[PH]

Dependencies:   IRremouteAndButton QuadDisplayMy LIS3MDL_my sMotor

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }*/