00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00027
00028
00029
00030
00031
00032
00033
00034 #define RC5_AVAILABLE
00035
00036
00037 #include "asuro.h"
00038 #include "rc5.h"
00039 #include <stdlib.h>
00040
00041 #define DIARWD 0x1008
00042 #define DIAFWD 0x1002
00043 #define DIALEFT 0x1004
00044 #define DIARIGHT 0x1006
00045 #define DIASTOP 0x1029
00046
00047 #define TUNERRWD 0x1021
00048 #define TUNERFWD 0x1020
00049 #define TUNERLEFT 0x1011
00050 #define TUNERRIGHT 0x1010
00051 #define TUNERSTOP 0x1025
00052
00053 #define OFFSET 0x3F
00054 #define STEP 5
00055
00056 int speedLeft,speedRight;
00057
00058 void IRFwd(void)
00059 {
00060 speedRight += STEP;
00061 speedLeft += STEP;
00062 if (speedLeft < 0 && speedLeft >= -OFFSET) speedLeft = 1;
00063 if (speedRight < 0 && speedRight >= -OFFSET) speedRight = 1;
00064 FrontLED(ON);
00065 BackLED(OFF,OFF);
00066 }
00067
00068 void IRRwd(void)
00069 {
00070 speedRight -= STEP;
00071 speedLeft -= STEP;
00072 if (speedRight > 0 && speedRight <= OFFSET) speedRight = -1;
00073 if (speedLeft > 0 && speedLeft <= OFFSET) speedLeft = -1;
00074 FrontLED(OFF);
00075 BackLED(ON,ON);
00076 }
00077
00078 void IRLeft (void)
00079 {
00080 speedLeft -= STEP;
00081 if (speedLeft > 0 && speedLeft <= OFFSET) speedLeft = -1;
00082 speedRight += STEP;
00083 if (speedRight < 0 && speedRight >= -OFFSET) speedRight = 1;
00084 FrontLED(OFF);
00085 BackLED(ON,OFF);
00086 }
00087
00088 void IRRight (void)
00089 {
00090 speedLeft += STEP;
00091 if (speedLeft < 0 && speedLeft >= -OFFSET) speedLeft = 1;
00092 speedRight -= STEP;
00093 if (speedRight > 0 && speedRight <= OFFSET) speedRight = -1;
00094 FrontLED(OFF);
00095 BackLED(OFF,ON);
00096 }
00097
00098
00099 void IRStop(void)
00100 {
00101 speedRight = speedLeft = 0;
00102 FrontLED(OFF);
00103 BackLED(OFF,OFF);
00104 }
00105
00106 int main(void)
00107 {
00108
00109 static unsigned int cmd;
00110 unsigned char leftDir = FWD, rightDir = FWD;
00111 char text[7];
00112
00113 Init();
00114 InitRC5();
00115
00116 SerPrint("RC5 Test\r\n");
00117 while (1)
00118 {
00119 cmd = ReadRC5();
00120 if (cmd)
00121 {
00122 cmd &= RC5_MASK;
00123 itoa(cmd, text, 16);
00124 SerPrint(text);
00125 SerPrint("\r\n");
00126
00127 switch (cmd)
00128 {
00129 case TUNERRWD :
00130 case DIARWD :
00131 SerPrint("rwd\r\n");
00132 IRRwd();
00133 break;
00134 case TUNERFWD :
00135 case DIAFWD :
00136 SerPrint("fwd\r\n");
00137 IRFwd();
00138 break;
00139 case TUNERLEFT :
00140 case DIALEFT:
00141 SerPrint("lft\r\n");
00142 IRLeft();
00143 break;
00144 case TUNERRIGHT :
00145 case DIARIGHT:
00146 SerPrint("rgt\r\n");
00147 IRRight();
00148 break;
00149 case TUNERSTOP :
00150 case DIASTOP :
00151 SerPrint("stp\r\n");
00152 IRStop();
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
00178