00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00027
00028
00029
00030
00031
00032
00033
00034
00035 #include "asuro.h"
00036 #include "rc5.h"
00037 #include <stdlib.h>
00038
00039 #define DIARWD 0x1008
00040 #define DIAFWD 0x1002
00041 #define DIALEFT 0x1004
00042 #define DIARIGHT 0x1006
00043 #define DIASTOP 0x1029
00044 #define DIAPOWER 0x103D
00045
00046
00047 #define TUNERRWD 0x1021
00048 #define TUNERFWD 0x1020
00049 #define TUNERLEFT 0x1011
00050 #define TUNERRIGHT 0x1010
00051 #define TUNERSTOP 0x1025
00052 #define TUNERPOWER 0x100C
00053
00054 #define OFFSET 0x3F
00055 #define STEP 5
00056
00057 int speedLeft,speedRight;
00058
00059 void IRFwd(void)
00060 {
00061 speedRight += STEP;
00062 speedLeft += STEP;
00063 if (speedLeft < 0 && speedLeft >= -OFFSET) speedLeft = 1;
00064 if (speedRight < 0 && speedRight >= -OFFSET) speedRight = 1;
00065 FrontLED(ON);
00066 BackLED(OFF,OFF);
00067 }
00068
00069 void IRRwd(void)
00070 {
00071 speedRight -= STEP;
00072 speedLeft -= STEP;
00073 if (speedRight > 0 && speedRight <= OFFSET) speedRight = -1;
00074 if (speedLeft > 0 && speedLeft <= OFFSET) speedLeft = -1;
00075 FrontLED(OFF);
00076 BackLED(ON,ON);
00077 }
00078
00079 void IRLeft (void)
00080 {
00081 speedLeft -= STEP;
00082 if (speedLeft > 0 && speedLeft <= OFFSET) speedLeft = -1;
00083 speedRight += STEP;
00084 if (speedRight < 0 && speedRight >= -OFFSET) speedRight = 1;
00085 FrontLED(OFF);
00086 BackLED(ON,OFF);
00087 }
00088
00089 void IRRight (void)
00090 {
00091 speedLeft += STEP;
00092 if (speedLeft < 0 && speedLeft >= -OFFSET) speedLeft = 1;
00093 speedRight -= STEP;
00094 if (speedRight > 0 && speedRight <= OFFSET) speedRight = -1;
00095 FrontLED(OFF);
00096 BackLED(OFF,ON);
00097 }
00098
00099
00100 void IRStop(void)
00101 {
00102 speedRight = speedLeft = 0;
00103 FrontLED(OFF);
00104 BackLED(OFF,OFF);
00105 }
00106
00107 int IRDemo(void)
00108 {
00109
00110 static unsigned int cmd;
00111 unsigned char leftDir = FWD, rightDir = FWD;
00112 char text[7];
00113
00114 Init();
00115 InitRC5();
00116
00117 SerPrint("RC5 Test\r\n");
00118 while (1)
00119 {
00120 cmd = ReadRC5();
00121 if (cmd)
00122 {
00123 cmd &= RC5_MASK;
00124 itoa(cmd, text, 16);
00125 SerPrint(text);
00126 SerPrint("\r\n");
00127
00128 switch (cmd)
00129 {
00130 case TUNERRWD :
00131 case DIARWD :
00132 IRRwd();
00133 break;
00134 case TUNERFWD :
00135 case DIAFWD :
00136 IRFwd();
00137 break;
00138 case TUNERLEFT :
00139 case DIALEFT:
00140 IRLeft();
00141 break;
00142 case TUNERRIGHT :
00143 case DIARIGHT:
00144 IRRight();
00145 break;
00146 case TUNERSTOP :
00147 case DIASTOP :
00148 IRStop();
00149 break;
00150 case TUNERPOWER :
00151 case DIAPOWER :
00152 return 0;
00153 break;
00154 }
00155 }
00156 if (speedLeft > 0 && speedLeft < OFFSET) speedLeft += OFFSET;
00157 if (speedLeft < 0 && speedLeft > -OFFSET) speedLeft -= OFFSET;
00158 if (speedRight > 0 && speedRight < OFFSET) speedRight += OFFSET;
00159 if (speedRight < 0 && speedRight > -OFFSET) speedRight -= OFFSET;
00160
00161 leftDir = rightDir = FWD;
00162 if (speedLeft < 0) leftDir = RWD;
00163 if (speedRight < 0) rightDir = RWD;
00164
00165 if (speedLeft > 255) speedLeft = 255;
00166 if (speedLeft < -255) speedLeft = -255;
00167 if (speedRight > 255) speedRight = 255;
00168 if (speedRight < -255) speedRight = -255;
00169
00170 MotorDir(leftDir,rightDir);
00171 MotorSpeed(abs(speedLeft),abs(speedRight));
00172 Msleep(100);
00173 }
00174 return 0;
00175 }
00176
00177 #ifdef STAND_ALONE
00178 int main(void)
00179 {
00180 Init();
00181 while(1)
00182 {
00183 IRDemo();
00184 }
00185 return 0;
00186 }
00187 #endif
00188