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 OFFSET 0x3F
00026 #define STEP 5
00027
00028 #define RWD_KEY '2'
00029 #define FWD_KEY '8'
00030 #define LEFT_KEY '4'
00031 #define RIGHT_KEY '6'
00032 #define STOP_KEY '5'
00033 #define ESC_KEY 0x1B // Programm Exit mit Escape Taste
00034
00035
00036
00037
00038 int speedLeft,speedRight;
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066 void PCFwd(void)
00067 {
00068 speedRight += STEP;
00069 speedLeft += STEP;
00070 if (speedLeft < 0 && speedLeft >= -OFFSET) speedLeft = 1;
00071 if (speedRight < 0 && speedRight >= -OFFSET) speedRight = 1;
00072 FrontLED(ON);
00073 BackLED(OFF,OFF);
00074 }
00075
00076 void PCRwd(void)
00077 {
00078 speedRight -= STEP;
00079 speedLeft -= STEP;
00080 if (speedRight > 0 && speedRight <= OFFSET) speedRight = -1;
00081 if (speedLeft > 0 && speedLeft <= OFFSET) speedLeft = -1;
00082 FrontLED(OFF);
00083 BackLED(ON,ON);
00084 }
00085
00086 void PCLeft (void)
00087 {
00088 speedLeft -= STEP;
00089 if (speedLeft > 0 && speedLeft <= OFFSET) speedLeft = -1;
00090 speedRight += STEP;
00091 if (speedRight < 0 && speedRight >= -OFFSET) speedRight = 1;
00092 FrontLED(OFF);
00093 BackLED(ON,OFF);
00094 }
00095
00096 void PCRight (void)
00097 {
00098 speedLeft += STEP;
00099 if (speedLeft < 0 && speedLeft >= -OFFSET) speedLeft = 1;
00100 speedRight -= STEP;
00101 if (speedRight > 0 && speedRight <= OFFSET) speedRight = -1;
00102 FrontLED(OFF);
00103 BackLED(OFF,ON);
00104 }
00105
00106
00107 void PCStop(void)
00108 {
00109 speedRight = speedLeft = 0;
00110 FrontLED(OFF);
00111 BackLED(OFF,OFF);
00112 }
00113
00114
00115 void PCDemo(void)
00116 {
00117 unsigned char cmd;
00118 unsigned char leftDir = FWD, rightDir = FWD;
00119
00120 Init();
00121 SerPrint("PCDemo\r\n");
00122 StartSwitch();
00123 sei();
00124 for (;;)
00125 {
00126 cmd = 0;
00127 SerRead(&cmd,1,0xFFFE);
00128 switch (cmd)
00129 {
00130 case RWD_KEY :
00131 PCRwd();
00132 break;
00133 case FWD_KEY :
00134 PCFwd();
00135 break;
00136 case LEFT_KEY :
00137 PCLeft();
00138 break;
00139 case RIGHT_KEY :
00140 PCRight();
00141 break;
00142 case STOP_KEY :
00143 PCStop();
00144 break;
00145 case ESC_KEY :
00146 return;
00147 break;
00148 }
00149 if (speedLeft > 0 && speedLeft < OFFSET) speedLeft += OFFSET;
00150 if (speedLeft < 0 && speedLeft > -OFFSET) speedLeft -= OFFSET;
00151 if (speedRight > 0 && speedRight < OFFSET) speedRight += OFFSET;
00152 if (speedRight < 0 && speedRight > -OFFSET) speedRight -= OFFSET;
00153
00154 if (switched)
00155 {
00156 speedLeft = 0;
00157 speedRight = 0;
00158 switched = FALSE;
00159
00160 MotorDir(RWD,RWD);
00161 MotorSpeed(200,200);
00162 FrontLED(ON);
00163 BackLED(ON,ON);
00164 Msleep(1000);
00165 }
00166
00167 leftDir = rightDir = FWD;
00168 if (speedLeft < 0) leftDir = RWD;
00169 if (speedRight < 0) rightDir = RWD;
00170
00171 if (speedLeft > 255) speedLeft = 255;
00172 if (speedLeft < -255) speedLeft = -255;
00173 if (speedRight > 255) speedRight = 255;
00174 if (speedRight < -255) speedRight = -255;
00175
00176 MotorDir(leftDir,rightDir);
00177 MotorSpeed(abs(speedLeft),abs(speedRight));
00178 }
00179 }
00180
00181 #ifdef STAND_ALONE
00182 int main(void)
00183 {
00184 Init();
00185 while(1)
00186 {
00187 PCDemo();
00188 }
00189 return 0;
00190 }
00191 #endif
00192