Affichage de mesures environnementales sur bus CAN

Dependencies:   Grove_LCD_RGB_Backlight mbed-rtos mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 #include "Grove_LCD_RGB_Backlight.h"
00004 
00005 #define SDA_I2C p28
00006 #define SCL_I2C p27
00007 
00008 #define SIG_RX_CAN  0x01
00009 
00010 DigitalOut led1(LED1);
00011 DigitalOut led2(LED2);
00012 Grove_LCD_RGB_Backlight Afficheur(SDA_I2C,SCL_I2C);
00013 
00014 Thread threadA;
00015 Thread threadB;
00016  
00017 CAN CanPort(p30, p29);
00018 CANMessage  MessageRx; 
00019 CANMessage  MessageTx;
00020 
00021 unsigned int    Id;
00022 
00023 void canReader(void)
00024 {      
00025     if (CanPort.read(MessageRx))
00026     {
00027             led1 = !led1;
00028             threadA.signal_set(SIG_RX_CAN);
00029     }
00030 } 
00031  
00032 void affichage()
00033 {
00034     switch(MessageRx.id)
00035     {    
00036         case '0x011' :
00037             printf("Temperature 1");
00038         break;
00039         
00040         case '0x021' :
00041             printf("Humidite");
00042         break;
00043     
00044         case '0x031' :
00045             printf("Temperature et Humidite");
00046         break;
00047         
00048         case '0x111' :
00049             printf("Trop chaud");
00050         break;
00051         
00052         case '0x112' :
00053             printf("Temperature normale");
00054         break;
00055         
00056         case '0x113' :
00057             printf("Trop froid");
00058         break;
00059         
00060         case '0x012' :
00061             printf("Temperature 2");
00062         break;
00063         
00064         case '0x041' :
00065             printf("Pression atmosphérique");
00066         break;
00067         
00068         case '0x051' :
00069             printf("Temperature 2 et Pression");
00070         break;
00071         
00072         case '0x141' :
00073             printf("Orageux");
00074         break;
00075         
00076         case '0x142' :
00077             printf("Nuageux");
00078         break;
00079         
00080         case '0x143' :
00081             printf("Dégagé");
00082         break;
00083         
00084         case '0x081' :
00085             printf("Luminosité");
00086         break;
00087         
00088         case '0x181' :
00089             printf("Jour");
00090         break;
00091         
00092         case '0x182' :
00093             printf("Nuit");
00094         break;
00095     }
00096 }   
00097 
00098 void requeteATous() // Requete demandant toutes les données
00099 {
00100     MessageTx.id=0x000;
00101     
00102 }
00103 
00104 void requeteTempHum()
00105 {
00106     MessageTx.id=0x031;    
00107 }
00108 
00109 void requeteTempPress()
00110 {
00111     MessageTx.id=0x051;    
00112 }
00113 
00114 void requeteLum()
00115 {
00116     MessageTx.id=0x081;
00117 }
00118 
00119 
00120 void thA() 
00121 {
00122     while(true)
00123     {
00124         Thread::signal_wait(SIG_RX_CAN);    
00125         led2 = !led2;
00126         affichage();
00127     }
00128 }
00129  
00130 void thB() 
00131 {
00132     while (true) 
00133     {
00134     CanPort.write(MessageTx);
00135         requeteATous();
00136         wait(1800000);   
00137     }
00138 }
00139 
00140 void thC() 
00141 {
00142     while (true) 
00143     {
00144     CanPort.write(MessageTx);
00145         requeteLum();
00146         wait(900000);   
00147     }
00148 }
00149 
00150 void thD() 
00151 {
00152     while (true) 
00153     {
00154     CanPort.write(MessageTx);
00155         requeteTempHum();
00156         wait(600000);   
00157     }
00158 }
00159 
00160 void thE() 
00161 {
00162     while (true) 
00163     {
00164     CanPort.write(MessageTx);
00165         requeteTempPress();
00166         wait(600000);   
00167     }
00168 }
00169 
00170 int main() 
00171 {
00172     wait(0.5);
00173     Afficheur.clear();
00174     Afficheur.print("Hello");
00175     Afficheur.setRGB(255, 255, 255);
00176     
00177     CanPort.frequency(20000);
00178     
00179     //Id = 0x1A5;
00180     //MessageTx.len=2;
00181     //MessageTx.data[0] = 0x55;
00182     //MessageTx.data[1] = 0xAA;
00183     
00184     //MessageTx.format = CANStandard;
00185     //MessageTx.format = CANExtended;
00186     
00187     //MessageTx.type = CANData;
00188     //MessageTx.type = CANRemote;
00189     
00190     CanPort.attach(canReader,CAN::RxIrq);
00191         
00192     threadA.start(thA);
00193     threadB.start(thB);
00194     
00195     led1 = 0;
00196     printf("Start OK\n");
00197     
00198     while (true) 
00199         {
00200     
00201         }
00202 }