[PH]
Dependencies: IRremouteAndButton QuadDisplayMy LIS3MDL_my sMotor
main.cpp
00001 #include "mbed.h" 00002 #include "platform/mbed_thread.h" 00003 #include "UserButton.h" 00004 #include "sMotor.h" 00005 #include "lis3mdl_class.h" 00006 #include "QuadDisplay2.h" 00007 00008 /**************************************************************** 00009 * Definitions 00010 ****************************************************************/ 00011 00012 // Blinking rate in milliseconds 00013 #define step_speed 1500 00014 #define POINTS 1 00015 #define M_PI 3.14159265358979323846 00016 #define RADIAN M_PI/180.0 00017 00018 /**************************************************************** 00019 * Prototypes 00020 *****************************************************************/ 00021 00022 void Ini(); 00023 void HowManyClicks(); 00024 void proximityR_isr(); 00025 void proximityF_isr(); 00026 //----------------------- 00027 void polling_sensors_isr(); 00028 void sensors_task(); 00029 void FrameTimeoutCW_isr(); 00030 void FrameTimeoutCCW_isr(); 00031 void BounceTimeoutCW_isr(); 00032 void BounceTimeoutCCW_isr(); 00033 void CW_switch_isr(); 00034 void CCW_switch_isr(); 00035 //----------------------- 00036 //void clk_speed_isr(); 00037 /***************************************************************** 00038 * Interface 00039 ******************************************************************/ 00040 00041 DigitalOut led1(LED1); 00042 InterruptIn CW_switch(D10); 00043 InterruptIn CCW_switch(D11); 00044 //--- 00045 RawSerial pc(USBTX, USBRX); 00046 DevI2C devI2c(D14,D15); 00047 LIS3MDL magnetometer(&devI2c,LIS3MDL_M_MEMS_ADDRESS_LOW); 00048 DigitalOut led2(A0); 00049 SPI spi(D4, D5, D3); 00050 QuadDisplayMy display(&spi,D6); 00051 //--- 00052 sMotor motor(A5, A4, A3, A2); // creates new stepper motor: IN1, IN2, IN3, IN4 00053 InterruptIn BlueBatton(USER_BUTTON); 00054 00055 /***************************************************************** 00056 * Time 00057 ******************************************************************/ 00058 Ticker polling_sensors; 00059 //Ticker clk_speed; 00060 Timeout FrameTimeoutCW; 00061 Timeout BounceTimeoutCW; 00062 Timeout FrameTimeoutCCW; 00063 Timeout BounceTimeoutCCW; 00064 00065 /**************************************************************** 00066 * Threads 00067 ****************************************************************/ 00068 Thread sensor_daemon; 00069 00070 /***************************************************************** 00071 * Global variables 00072 ******************************************************************/ 00073 00074 00075 //---------------- 00076 uint8_t button_event; 00077 uint8_t mode=0; 00078 uint8_t RotateDir; 00079 uint16_t RotateSpeed; 00080 00081 //---------------- 00082 uint8_t SensorsEn=1; 00083 00084 int16_t M[3]; 00085 uint8_t point; 00086 uint32_t rotate_cnt; 00087 //--------- 00088 uint8_t DebounceCW=0; 00089 uint8_t cntCW=0; 00090 uint8_t NewCWMode=0; 00091 uint8_t DebounceCCW=0; 00092 uint8_t cntCCW=0; 00093 uint8_t NewCCWMode=0; 00094 //------------------ 00095 00096 /****************************************************************** 00097 * Main 00098 ******************************************************************/ 00099 int main() 00100 { 00101 // Initialise the digital pin LED1 as an output 00102 00103 Ini(); 00104 00105 while (true) { 00106 //led = !led; 00107 HowManyClicks(); 00108 if (mode){ 00109 00110 } 00111 if (point){ 00112 motor.step(POINTS, RotateDir, RotateSpeed); 00113 }else 00114 wait_us(step_speed); 00115 00116 //thread_sleep_for(BLINKING_RATE_MS); 00117 } 00118 } 00119 00120 /********************************************************** 00121 * Functions 00122 ***********************************************************/ 00123 void Ini() 00124 { 00125 pc.baud(115200); 00126 ButtonIni(&BlueBatton); 00127 //button_event_ind=button_event=0; 00128 00129 00130 //-------------- 00131 00132 sensor_daemon.start(sensors_task); 00133 SensorsEn=1; 00134 polling_sensors.attach(&polling_sensors_isr, 0.4); 00135 //clk_speed.attach(&clk_speed_isr, 0.01); 00136 mode=0; 00137 point=0; 00138 RotateSpeed=step_speed; 00139 rotate_cnt=0; 00140 CW_switch.fall(&CW_switch_isr); 00141 CCW_switch.fall(&CCW_switch_isr); 00142 } 00143 00144 //------------------ 00145 void HowManyClicks() 00146 { 00147 WhatButtonMode(&button_event); 00148 if(button_event) { 00149 switch (button_event) { 00150 case 1: 00151 mode=0; 00152 point=0; 00153 break; 00154 case 2: 00155 mode=1; 00156 point=1; 00157 RotateDir=0; 00158 RotateSpeed=step_speed; 00159 break; 00160 case 3: 00161 mode=2; 00162 point=0; 00163 //RotateDir=0; 00164 //RotateSpeed=step_speed; 00165 break; 00166 case 4: 00167 mode=3; 00168 point=0; 00169 //RotateDir=1; 00170 //RotateSpeed=step_speed; 00171 break; 00172 case 5: 00173 mode=4; 00174 point=0; 00175 //RotateSpeed=step_speed*2; 00176 //RotateDir=0; 00177 break; 00178 case 6: 00179 mode=5; 00180 point=1; 00181 RotateSpeed=step_speed*2; 00182 RotateDir=1; 00183 break; 00184 case 7: 00185 00186 break; 00187 00188 default: 00189 break; 00190 } 00191 button_event=0; 00192 } 00193 } 00194 00195 //----------------- 00196 void sensors_task() 00197 { 00198 int status; 00199 char text[5]; 00200 int32_t dif; 00201 00202 while (true) { 00203 ThisThread::flags_wait_any(0x1,true); 00204 SensorsEn=0; 00205 00206 switch(mode){ 00207 case 0: 00208 // sprintf(text,"c%3d",distance_c); 00209 break; 00210 case 1: 00211 //sprintf(text,"l%3d", distance_l); 00212 break; 00213 case 2: 00214 //sprintf(text,"r%3d", distance_r); 00215 break; 00216 case 3: 00217 00218 break; 00219 case 4: 00220 //sprintf(text,"%d",G[0]); 00221 break; 00222 case 5: 00223 //sprintf(text,"%d",dur_time); 00224 break; 00225 default: 00226 sprintf(text,"----"); 00227 break; 00228 } 00229 SensorsEn=1; 00230 } 00231 } 00232 00233 /********************************************************** 00234 * Interrupt Service Routines 00235 ***********************************************************/ 00236 void FrameTimeoutCW_isr() 00237 { 00238 NewCWMode=cnt; 00239 cntCW=0; 00240 } 00241 00242 //--------------------- 00243 void BounceTimeoutCW_isr() 00244 { 00245 DebounceCW=0; 00246 00247 } 00248 00249 void FrameTimeoutCCW_isr() 00250 { 00251 NewCCWMode=cnt; 00252 cntCCW=0; 00253 } 00254 00255 //--------------------- 00256 void BounceTimeoutCCW_isr() 00257 { 00258 DebounceCCW=0; 00259 00260 } 00261 //--------------------- 00262 void polling_sensors_isr() 00263 { 00264 if (SensorsEn){ 00265 sensor_daemon.flags_set(0x1); 00266 led1 = !led1; 00267 } 00268 } 00269 void CW_switch_isr() 00270 { 00271 if(DebounceCW==0){ 00272 DebounceCW=1; 00273 cntCW++; 00274 FrameTimeoutCW.detach(); 00275 FrameTimeoutCW.attach(FrameTimeoutCW_isr,1.0); 00276 BounceTimeoutCW.attach(BounceTimeoutCW_isr,0.2); 00277 } 00278 } 00279 void CCW_switch_isr() 00280 { 00281 if(DebounceCCW==0){ 00282 DebounceCCW=1; 00283 cntCCW++; 00284 FrameTimeoutCCW.detach(); 00285 FrameTimeoutCCW.attach(FrameTimeoutCCW_isr,1.0); 00286 BounceTimeoutCCW.attach(BounceTimeoutCCW_isr,0.2); 00287 } 00288 } 00289 //--------------------------------- 00290 /*void clk_speed_isr() 00291 { 00292 rotate_cnt++; 00293 if (rotate_cnt>10) 00294 dur_time_en=1; 00295 }*/
Generated on Sat Jul 16 2022 00:27:37 by 1.7.2