Affichage de mesures environnementales sur bus CAN
Dependencies: Grove_LCD_RGB_Backlight mbed-rtos mbed
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 }
Generated on Fri Jul 15 2022 10:42:25 by 1.7.2