00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "asuro.h"
00023 #include <stdlib.h>
00024
00025 #define DIARWD 0xFE01
00026 #define DIAFWD 0xFF00
00027 #define DIALEFT 0xFB04
00028 #define DIARIGHT 0xFA05
00029 #define DIASTOP 0xF30C
00030
00031 #define TUNERRWD 0xF00F
00032 #define TUNERFWD 0xEE11
00033 #define TUNERLEFT 0xE718
00034 #define TUNERRIGHT 0xE51A
00035 #define TUNERSTOP 0xE619
00036
00037 #define OFFSET 0x3F
00038 #define STEP 5
00039
00040 int speedLeft,speedRight;
00041
00042 void IRFwd(void)
00043 {
00044 speedRight += STEP;
00045 speedLeft += STEP;
00046 if (speedLeft < 0 && speedLeft >= -OFFSET) speedLeft = 1;
00047 if (speedRight < 0 && speedRight >= -OFFSET) speedRight = 1;
00048 FrontLED(ON);
00049 BackLED(OFF,OFF);
00050 }
00051
00052 void IRRwd(void)
00053 {
00054 speedRight -= STEP;
00055 speedLeft -= STEP;
00056 if (speedRight > 0 && speedRight <= OFFSET) speedRight = -1;
00057 if (speedLeft > 0 && speedLeft <= OFFSET) speedLeft = -1;
00058 FrontLED(OFF);
00059 BackLED(ON,ON);
00060 }
00061
00062 void IRLeft (void)
00063 {
00064 speedLeft -= STEP;
00065 if (speedLeft > 0 && speedLeft <= OFFSET) speedLeft = -1;
00066 speedRight += STEP;
00067 if (speedRight < 0 && speedRight >= -OFFSET) speedRight = 1;
00068 FrontLED(OFF);
00069 BackLED(ON,OFF);
00070 }
00071
00072 void IRRight (void)
00073 {
00074 speedLeft += STEP;
00075 if (speedLeft < 0 && speedLeft >= -OFFSET) speedLeft = 1;
00076 speedRight -= STEP;
00077 if (speedRight > 0 && speedRight <= OFFSET) speedRight = -1;
00078 FrontLED(OFF);
00079 BackLED(OFF,ON);
00080 }
00081
00082
00083 void IRStop(void)
00084 {
00085 speedRight = speedLeft = 0;
00086 FrontLED(OFF);
00087 BackLED(OFF,OFF);
00088 }
00089
00090 void IRDemo(void)
00091 {
00092
00093 unsigned char oldToggle,toggle,i;
00094 unsigned char data[33],start;
00095 static unsigned int cmd;
00096 unsigned char leftDir = FWD, rightDir = FWD;
00097
00098 Init();
00099 for (;;)
00100 {
00101 oldToggle = 1;
00102 start = FALSE;
00103 i = 0;
00104 while (PIND & (1 << PD0));
00105 TCNT0 = 0;
00106 TCCR0 = (1 << CS02) | (1 << CS00);
00107 do
00108 {
00109 toggle = PIND & (1 << PD0);
00110 while (PIND & (1 << PD0));
00111 }
00112 while (toggle != oldToggle);
00113 data[0] = TCNT0;
00114 if (TCNT0 > 0x60 && TCNT0 < 0x72)
00115 {
00116 start = TRUE;
00117 StatusLED(YELLOW);
00118 }
00119 oldToggle = 0;
00120 TCNT0 = 0;
00121
00122 if (start == TRUE)
00123 {
00124 do
00125 {
00126 toggle = PIND & (1 << PD0);
00127 if (toggle != oldToggle)
00128 {
00129 if (toggle < oldToggle)
00130 {
00131 if ((TCNT0 > 0x10 && TCNT0 < 0x13) || (TCNT0 > 0x06 && TCNT0 < 0x10))
00132 data[i++] = TCNT0;
00133 TCNT0 = 0;
00134 }
00135 oldToggle = toggle;
00136 }
00137 }
00138 while (i < 32 && TCNT0 < 0x60);
00139
00140 if (TCNT0 < 0x62)
00141 {
00142 cmd = 0;
00143 for (i = 16; i < 32; i++)
00144 if (data[i] > 0x10) cmd |= 1 << (i - 16);
00145 StatusLED(GREEN);
00146 }
00147 }
00148
00149 switch (cmd)
00150 {
00151 case TUNERRWD :
00152 case DIARWD :
00153 IRRwd();
00154 break;
00155 case TUNERFWD :
00156 case DIAFWD :
00157 IRFwd();
00158 break;
00159 case TUNERLEFT :
00160 case DIALEFT:
00161 IRLeft();
00162 break;
00163 case TUNERRIGHT :
00164 case DIARIGHT:
00165 IRRight();
00166 break;
00167 case TUNERSTOP :
00168 case DIASTOP :
00169 IRStop();
00170 break;
00171 }
00172 if (speedLeft > 0 && speedLeft < OFFSET) speedLeft += OFFSET;
00173 if (speedLeft < 0 && speedLeft > -OFFSET) speedLeft -= OFFSET;
00174 if (speedRight > 0 && speedRight < OFFSET) speedRight += OFFSET;
00175 if (speedRight < 0 && speedRight > -OFFSET) speedRight -= OFFSET;
00176
00177 leftDir = rightDir = FWD;
00178 if (speedLeft < 0) leftDir = RWD;
00179 if (speedRight < 0) rightDir = RWD;
00180
00181 if (speedLeft > 255) speedLeft = 255;
00182 if (speedLeft < -255) speedLeft = -255;
00183 if (speedRight > 255) speedRight = 255;
00184 if (speedRight < -255) speedRight = -255;
00185
00186 MotorDir(leftDir,rightDir);
00187 MotorSpeed(abs(speedLeft),abs(speedRight));
00188 }
00189 }
00190