Feby Mathew
/
mbed_can_hello_2
Feby's Can
main.cpp@0:84a4dc1cd81d, 2020-12-09 (annotated)
- Committer:
- feby
- Date:
- Wed Dec 09 17:26:40 2020 +0000
- Revision:
- 0:84a4dc1cd81d
Febys_can
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
feby | 0:84a4dc1cd81d | 1 | #include "mbed.h" |
feby | 0:84a4dc1cd81d | 2 | #include "rtos.h" |
feby | 0:84a4dc1cd81d | 3 | #include "LM75B.h" |
feby | 0:84a4dc1cd81d | 4 | #include "C12832.h" |
feby | 0:84a4dc1cd81d | 5 | |
feby | 0:84a4dc1cd81d | 6 | CANMessage msg; |
feby | 0:84a4dc1cd81d | 7 | |
feby | 0:84a4dc1cd81d | 8 | // STEP 1///////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 9 | //baseboard address |
feby | 0:84a4dc1cd81d | 10 | #define BASE_ADDRESS 140 |
feby | 0:84a4dc1cd81d | 11 | |
feby | 0:84a4dc1cd81d | 12 | |
feby | 0:84a4dc1cd81d | 13 | |
feby | 0:84a4dc1cd81d | 14 | // STEP 2////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 15 | // phyiscal inputs |
feby | 0:84a4dc1cd81d | 16 | DigitalIn joy_up(p15); |
feby | 0:84a4dc1cd81d | 17 | DigitalIn joy_down(p12); |
feby | 0:84a4dc1cd81d | 18 | DigitalIn joy_left(p13); |
feby | 0:84a4dc1cd81d | 19 | DigitalIn joy_right(p16); |
feby | 0:84a4dc1cd81d | 20 | DigitalIn joy_fire(p14); |
feby | 0:84a4dc1cd81d | 21 | |
feby | 0:84a4dc1cd81d | 22 | LM75B sensor(p28,p27); |
feby | 0:84a4dc1cd81d | 23 | |
feby | 0:84a4dc1cd81d | 24 | |
feby | 0:84a4dc1cd81d | 25 | |
feby | 0:84a4dc1cd81d | 26 | //STEP 3/////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 27 | //physical outputs |
feby | 0:84a4dc1cd81d | 28 | DigitalOut led1(LED1); |
feby | 0:84a4dc1cd81d | 29 | DigitalOut led2(LED2); |
feby | 0:84a4dc1cd81d | 30 | PwmOut spkr(p26); |
feby | 0:84a4dc1cd81d | 31 | PwmOut r (p23); |
feby | 0:84a4dc1cd81d | 32 | PwmOut g (p24); |
feby | 0:84a4dc1cd81d | 33 | PwmOut b (p25); |
feby | 0:84a4dc1cd81d | 34 | |
feby | 0:84a4dc1cd81d | 35 | //STEP 4/////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 36 | // message structure can |
feby | 0:84a4dc1cd81d | 37 | |
feby | 0:84a4dc1cd81d | 38 | /////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 39 | typedef struct { |
feby | 0:84a4dc1cd81d | 40 | |
feby | 0:84a4dc1cd81d | 41 | int id; /* can id */ |
feby | 0:84a4dc1cd81d | 42 | char data[8]; /*can data */ |
feby | 0:84a4dc1cd81d | 43 | |
feby | 0:84a4dc1cd81d | 44 | } can_message_t; |
feby | 0:84a4dc1cd81d | 45 | |
feby | 0:84a4dc1cd81d | 46 | |
feby | 0:84a4dc1cd81d | 47 | |
feby | 0:84a4dc1cd81d | 48 | |
feby | 0:84a4dc1cd81d | 49 | |
feby | 0:84a4dc1cd81d | 50 | //STEP 4/////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 51 | // ipc for can write thread |
feby | 0:84a4dc1cd81d | 52 | /////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 53 | MemoryPool<can_message_t, 8> can_write_mpool; |
feby | 0:84a4dc1cd81d | 54 | Queue<can_message_t, 8> can_write_queue; |
feby | 0:84a4dc1cd81d | 55 | |
feby | 0:84a4dc1cd81d | 56 | //STEP 5/////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 57 | // ipc for digital output thread |
feby | 0:84a4dc1cd81d | 58 | |
feby | 0:84a4dc1cd81d | 59 | //////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 60 | MemoryPool<can_message_t, 8> digital_output_mpool; |
feby | 0:84a4dc1cd81d | 61 | Queue<can_message_t, 8> digital_output_queue; |
feby | 0:84a4dc1cd81d | 62 | |
feby | 0:84a4dc1cd81d | 63 | |
feby | 0:84a4dc1cd81d | 64 | //STEP 6/////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 65 | // ipc for analog output thread |
feby | 0:84a4dc1cd81d | 66 | |
feby | 0:84a4dc1cd81d | 67 | //////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 68 | MemoryPool<can_message_t, 8> analog_output_mpool; |
feby | 0:84a4dc1cd81d | 69 | Queue<can_message_t, 8> analog_output_queue; |
feby | 0:84a4dc1cd81d | 70 | |
feby | 0:84a4dc1cd81d | 71 | //STEP 7/////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 72 | // set up canbus |
feby | 0:84a4dc1cd81d | 73 | /////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 74 | CAN can1(p30, p29); |
feby | 0:84a4dc1cd81d | 75 | //CAN can1(p9, p10); |
feby | 0:84a4dc1cd81d | 76 | |
feby | 0:84a4dc1cd81d | 77 | //STEP 8/////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 78 | /* digital input Thread */ |
feby | 0:84a4dc1cd81d | 79 | ////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 80 | void digital_input_thread (void const *args) { |
feby | 0:84a4dc1cd81d | 81 | |
feby | 0:84a4dc1cd81d | 82 | while (true) { |
feby | 0:84a4dc1cd81d | 83 | |
feby | 0:84a4dc1cd81d | 84 | can_message_t *message = can_write_mpool.alloc(); |
feby | 0:84a4dc1cd81d | 85 | message->id = BASE_ADDRESS + 0; |
feby | 0:84a4dc1cd81d | 86 | message->data[0] = joy_up; |
feby | 0:84a4dc1cd81d | 87 | message->data[1] = joy_down; |
feby | 0:84a4dc1cd81d | 88 | message->data[2] = joy_left; |
feby | 0:84a4dc1cd81d | 89 | message->data[3] = joy_right; |
feby | 0:84a4dc1cd81d | 90 | message->data[4] = joy_fire; |
feby | 0:84a4dc1cd81d | 91 | |
feby | 0:84a4dc1cd81d | 92 | |
feby | 0:84a4dc1cd81d | 93 | |
feby | 0:84a4dc1cd81d | 94 | can_write_queue.put(message); |
feby | 0:84a4dc1cd81d | 95 | |
feby | 0:84a4dc1cd81d | 96 | //fun bit nod yes on fire |
feby | 0:84a4dc1cd81d | 97 | if(joy_left) |
feby | 0:84a4dc1cd81d | 98 | { |
feby | 0:84a4dc1cd81d | 99 | can_message_t *message = can_write_mpool.alloc(); |
feby | 0:84a4dc1cd81d | 100 | message->id = 142; |
feby | 0:84a4dc1cd81d | 101 | message->data[0] = 5; |
feby | 0:84a4dc1cd81d | 102 | |
feby | 0:84a4dc1cd81d | 103 | can_write_queue.put(message); |
feby | 0:84a4dc1cd81d | 104 | } |
feby | 0:84a4dc1cd81d | 105 | else if(joy_fire) |
feby | 0:84a4dc1cd81d | 106 | { |
feby | 0:84a4dc1cd81d | 107 | can_message_t *message = can_write_mpool.alloc(); |
feby | 0:84a4dc1cd81d | 108 | message->id = 144; //even addresses only for now !!!! |
feby | 0:84a4dc1cd81d | 109 | message->data[0] = 1; |
feby | 0:84a4dc1cd81d | 110 | |
feby | 0:84a4dc1cd81d | 111 | can_write_queue.put(message); |
feby | 0:84a4dc1cd81d | 112 | } |
feby | 0:84a4dc1cd81d | 113 | else if(joy_right == 1) |
feby | 0:84a4dc1cd81d | 114 | { |
feby | 0:84a4dc1cd81d | 115 | can_message_t *message = can_write_mpool.alloc(); |
feby | 0:84a4dc1cd81d | 116 | message->id = 144; |
feby | 0:84a4dc1cd81d | 117 | message->data[0] = 2; |
feby | 0:84a4dc1cd81d | 118 | |
feby | 0:84a4dc1cd81d | 119 | can_write_queue.put(message); |
feby | 0:84a4dc1cd81d | 120 | } |
feby | 0:84a4dc1cd81d | 121 | else if(joy_up == 1) |
feby | 0:84a4dc1cd81d | 122 | { |
feby | 0:84a4dc1cd81d | 123 | can_message_t *message = can_write_mpool.alloc(); |
feby | 0:84a4dc1cd81d | 124 | message->id = 144; |
feby | 0:84a4dc1cd81d | 125 | message->data[0] = 4; |
feby | 0:84a4dc1cd81d | 126 | |
feby | 0:84a4dc1cd81d | 127 | can_write_queue.put(message); |
feby | 0:84a4dc1cd81d | 128 | } |
feby | 0:84a4dc1cd81d | 129 | else if(joy_down == 1) |
feby | 0:84a4dc1cd81d | 130 | { |
feby | 0:84a4dc1cd81d | 131 | can_message_t *message = can_write_mpool.alloc(); |
feby | 0:84a4dc1cd81d | 132 | message->id = 144; |
feby | 0:84a4dc1cd81d | 133 | message->data[0] = 3; |
feby | 0:84a4dc1cd81d | 134 | |
feby | 0:84a4dc1cd81d | 135 | can_write_queue.put(message); |
feby | 0:84a4dc1cd81d | 136 | } |
feby | 0:84a4dc1cd81d | 137 | |
feby | 0:84a4dc1cd81d | 138 | Thread::wait(500); |
feby | 0:84a4dc1cd81d | 139 | } |
feby | 0:84a4dc1cd81d | 140 | |
feby | 0:84a4dc1cd81d | 141 | } |
feby | 0:84a4dc1cd81d | 142 | |
feby | 0:84a4dc1cd81d | 143 | //STEP 9/////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 144 | /* analog input Thread */ |
feby | 0:84a4dc1cd81d | 145 | ////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 146 | void analog_input_thread (void const *args) { |
feby | 0:84a4dc1cd81d | 147 | |
feby | 0:84a4dc1cd81d | 148 | //if (sensor.open()) { |
feby | 0:84a4dc1cd81d | 149 | |
feby | 0:84a4dc1cd81d | 150 | // printf("Device detected!\n"); |
feby | 0:84a4dc1cd81d | 151 | while (true) { |
feby | 0:84a4dc1cd81d | 152 | can_message_t *message = can_write_mpool.alloc(); |
feby | 0:84a4dc1cd81d | 153 | message->id = BASE_ADDRESS + 4; |
feby | 0:84a4dc1cd81d | 154 | message->data[0] = sensor.read(); |
feby | 0:84a4dc1cd81d | 155 | can_write_queue.put(message); |
feby | 0:84a4dc1cd81d | 156 | |
feby | 0:84a4dc1cd81d | 157 | Thread::wait(500); |
feby | 0:84a4dc1cd81d | 158 | } |
feby | 0:84a4dc1cd81d | 159 | //else{ |
feby | 0:84a4dc1cd81d | 160 | |
feby | 0:84a4dc1cd81d | 161 | // printf("Device faulty!\n"); |
feby | 0:84a4dc1cd81d | 162 | |
feby | 0:84a4dc1cd81d | 163 | //} |
feby | 0:84a4dc1cd81d | 164 | } |
feby | 0:84a4dc1cd81d | 165 | |
feby | 0:84a4dc1cd81d | 166 | //STEP 10/////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 167 | // Can write thread |
feby | 0:84a4dc1cd81d | 168 | ////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 169 | void can_write_thread(void const *args) { |
feby | 0:84a4dc1cd81d | 170 | |
feby | 0:84a4dc1cd81d | 171 | while (true) { |
feby | 0:84a4dc1cd81d | 172 | osEvent evt = can_write_queue.get(); |
feby | 0:84a4dc1cd81d | 173 | if (evt.status == osEventMessage) { |
feby | 0:84a4dc1cd81d | 174 | can_message_t *message = (can_message_t*)evt.value.p; |
feby | 0:84a4dc1cd81d | 175 | |
feby | 0:84a4dc1cd81d | 176 | //send canbus message |
feby | 0:84a4dc1cd81d | 177 | //can1.write(CANMessage(message->id, message->data, 8)); |
feby | 0:84a4dc1cd81d | 178 | can1.write(CANMessage(message->id,message->data, 8)); |
feby | 0:84a4dc1cd81d | 179 | can_write_mpool.free(message); |
feby | 0:84a4dc1cd81d | 180 | } |
feby | 0:84a4dc1cd81d | 181 | |
feby | 0:84a4dc1cd81d | 182 | } |
feby | 0:84a4dc1cd81d | 183 | |
feby | 0:84a4dc1cd81d | 184 | } |
feby | 0:84a4dc1cd81d | 185 | |
feby | 0:84a4dc1cd81d | 186 | |
feby | 0:84a4dc1cd81d | 187 | |
feby | 0:84a4dc1cd81d | 188 | //STEP 11/////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 189 | //Can read thread |
feby | 0:84a4dc1cd81d | 190 | ////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 191 | void can_read_thread (void const *args) { |
feby | 0:84a4dc1cd81d | 192 | |
feby | 0:84a4dc1cd81d | 193 | while (true) { |
feby | 0:84a4dc1cd81d | 194 | printf("loop()\n"); |
feby | 0:84a4dc1cd81d | 195 | if(can1.read(msg)) |
feby | 0:84a4dc1cd81d | 196 | { |
feby | 0:84a4dc1cd81d | 197 | |
feby | 0:84a4dc1cd81d | 198 | if(msg.id == BASE_ADDRESS + 4) // Then its an analog out message |
feby | 0:84a4dc1cd81d | 199 | { |
feby | 0:84a4dc1cd81d | 200 | //send to analog output ipc |
feby | 0:84a4dc1cd81d | 201 | can_message_t *message = analog_output_mpool.alloc(); |
feby | 0:84a4dc1cd81d | 202 | message->id = msg.id; |
feby | 0:84a4dc1cd81d | 203 | message->data[0] = msg.data[0]; |
feby | 0:84a4dc1cd81d | 204 | analog_output_queue.put(message); |
feby | 0:84a4dc1cd81d | 205 | |
feby | 0:84a4dc1cd81d | 206 | Thread::wait(500); |
feby | 0:84a4dc1cd81d | 207 | } |
feby | 0:84a4dc1cd81d | 208 | |
feby | 0:84a4dc1cd81d | 209 | |
feby | 0:84a4dc1cd81d | 210 | else if(msg.id == BASE_ADDRESS + 6) //then its an do message |
feby | 0:84a4dc1cd81d | 211 | { |
feby | 0:84a4dc1cd81d | 212 | //send to digital output ipc |
feby | 0:84a4dc1cd81d | 213 | can_message_t *message = digital_output_mpool.alloc(); |
feby | 0:84a4dc1cd81d | 214 | |
feby | 0:84a4dc1cd81d | 215 | message->id = msg.id; |
feby | 0:84a4dc1cd81d | 216 | message->data[0] = msg.data[0]; |
feby | 0:84a4dc1cd81d | 217 | |
feby | 0:84a4dc1cd81d | 218 | digital_output_queue.put(message); |
feby | 0:84a4dc1cd81d | 219 | Thread::wait(500); |
feby | 0:84a4dc1cd81d | 220 | |
feby | 0:84a4dc1cd81d | 221 | } |
feby | 0:84a4dc1cd81d | 222 | |
feby | 0:84a4dc1cd81d | 223 | // else { |
feby | 0:84a4dc1cd81d | 224 | |
feby | 0:84a4dc1cd81d | 225 | //handler for other messages |
feby | 0:84a4dc1cd81d | 226 | |
feby | 0:84a4dc1cd81d | 227 | // } |
feby | 0:84a4dc1cd81d | 228 | |
feby | 0:84a4dc1cd81d | 229 | Thread::wait(100); |
feby | 0:84a4dc1cd81d | 230 | |
feby | 0:84a4dc1cd81d | 231 | }//end of if can.read |
feby | 0:84a4dc1cd81d | 232 | |
feby | 0:84a4dc1cd81d | 233 | }//end of while(1) |
feby | 0:84a4dc1cd81d | 234 | |
feby | 0:84a4dc1cd81d | 235 | } //end of thread |
feby | 0:84a4dc1cd81d | 236 | |
feby | 0:84a4dc1cd81d | 237 | |
feby | 0:84a4dc1cd81d | 238 | |
feby | 0:84a4dc1cd81d | 239 | |
feby | 0:84a4dc1cd81d | 240 | |
feby | 0:84a4dc1cd81d | 241 | |
feby | 0:84a4dc1cd81d | 242 | |
feby | 0:84a4dc1cd81d | 243 | //STEP 12/////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 244 | // Analog_ouptut_thread |
feby | 0:84a4dc1cd81d | 245 | ////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 246 | void Analog_ouptut_thread(void const *args) { |
feby | 0:84a4dc1cd81d | 247 | |
feby | 0:84a4dc1cd81d | 248 | while (true) { |
feby | 0:84a4dc1cd81d | 249 | |
feby | 0:84a4dc1cd81d | 250 | osEvent evt = analog_output_queue.get(); |
feby | 0:84a4dc1cd81d | 251 | |
feby | 0:84a4dc1cd81d | 252 | |
feby | 0:84a4dc1cd81d | 253 | if (evt.status == osEventMessage) { |
feby | 0:84a4dc1cd81d | 254 | can_message_t *message = (can_message_t*)evt.value.p; |
feby | 0:84a4dc1cd81d | 255 | |
feby | 0:84a4dc1cd81d | 256 | |
feby | 0:84a4dc1cd81d | 257 | //drive the speaker based on can message |
feby | 0:84a4dc1cd81d | 258 | //// spkr.period(1/(2000 + (message->data[0]* 50))); //generate a tone based on data[0] value range from 2000 + 0*50 to 2000 + 255*50 |
feby | 0:84a4dc1cd81d | 259 | // spkr=0.5; |
feby | 0:84a4dc1cd81d | 260 | r = message->data[0]/255; |
feby | 0:84a4dc1cd81d | 261 | g = message->data[1]/255; |
feby | 0:84a4dc1cd81d | 262 | b = message->data[2]/255; |
feby | 0:84a4dc1cd81d | 263 | |
feby | 0:84a4dc1cd81d | 264 | //led1 test |
feby | 0:84a4dc1cd81d | 265 | led1 = !led1; |
feby | 0:84a4dc1cd81d | 266 | |
feby | 0:84a4dc1cd81d | 267 | |
feby | 0:84a4dc1cd81d | 268 | analog_output_mpool.free(message); |
feby | 0:84a4dc1cd81d | 269 | } |
feby | 0:84a4dc1cd81d | 270 | } |
feby | 0:84a4dc1cd81d | 271 | |
feby | 0:84a4dc1cd81d | 272 | } |
feby | 0:84a4dc1cd81d | 273 | |
feby | 0:84a4dc1cd81d | 274 | |
feby | 0:84a4dc1cd81d | 275 | |
feby | 0:84a4dc1cd81d | 276 | //STEP 13/////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 277 | // Digital_ouptut_thread |
feby | 0:84a4dc1cd81d | 278 | ////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 279 | void Digital_output_thread(void const *args) { |
feby | 0:84a4dc1cd81d | 280 | |
feby | 0:84a4dc1cd81d | 281 | while (true) { |
feby | 0:84a4dc1cd81d | 282 | |
feby | 0:84a4dc1cd81d | 283 | osEvent evt = digital_output_queue.get(); |
feby | 0:84a4dc1cd81d | 284 | |
feby | 0:84a4dc1cd81d | 285 | |
feby | 0:84a4dc1cd81d | 286 | if (evt.status == osEventMessage) { |
feby | 0:84a4dc1cd81d | 287 | can_message_t *message = (can_message_t*)evt.value.p; |
feby | 0:84a4dc1cd81d | 288 | |
feby | 0:84a4dc1cd81d | 289 | //drive the digital ouptut based on can message |
feby | 0:84a4dc1cd81d | 290 | |
feby | 0:84a4dc1cd81d | 291 | if (message->data[0] == 1 ) |
feby | 0:84a4dc1cd81d | 292 | { |
feby | 0:84a4dc1cd81d | 293 | led1 = 1; |
feby | 0:84a4dc1cd81d | 294 | } |
feby | 0:84a4dc1cd81d | 295 | else if(message->data[0] == 0 ) |
feby | 0:84a4dc1cd81d | 296 | { |
feby | 0:84a4dc1cd81d | 297 | led1 = 0; |
feby | 0:84a4dc1cd81d | 298 | } |
feby | 0:84a4dc1cd81d | 299 | |
feby | 0:84a4dc1cd81d | 300 | if (message->data[0] == 2 ) |
feby | 0:84a4dc1cd81d | 301 | { |
feby | 0:84a4dc1cd81d | 302 | led2 = 1; |
feby | 0:84a4dc1cd81d | 303 | } |
feby | 0:84a4dc1cd81d | 304 | |
feby | 0:84a4dc1cd81d | 305 | else if (message->data[0] == 3 ) |
feby | 0:84a4dc1cd81d | 306 | { |
feby | 0:84a4dc1cd81d | 307 | |
feby | 0:84a4dc1cd81d | 308 | led2 = 0; |
feby | 0:84a4dc1cd81d | 309 | } |
feby | 0:84a4dc1cd81d | 310 | |
feby | 0:84a4dc1cd81d | 311 | |
feby | 0:84a4dc1cd81d | 312 | digital_output_mpool.free(message); |
feby | 0:84a4dc1cd81d | 313 | |
feby | 0:84a4dc1cd81d | 314 | } //end of if statement |
feby | 0:84a4dc1cd81d | 315 | |
feby | 0:84a4dc1cd81d | 316 | }//end of while loop |
feby | 0:84a4dc1cd81d | 317 | |
feby | 0:84a4dc1cd81d | 318 | } |
feby | 0:84a4dc1cd81d | 319 | |
feby | 0:84a4dc1cd81d | 320 | |
feby | 0:84a4dc1cd81d | 321 | |
feby | 0:84a4dc1cd81d | 322 | //STEP 13/////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 323 | // START THREADS |
feby | 0:84a4dc1cd81d | 324 | ////////////////////////////////////////////////////// |
feby | 0:84a4dc1cd81d | 325 | int main() { |
feby | 0:84a4dc1cd81d | 326 | Thread thread1(Digital_output_thread); |
feby | 0:84a4dc1cd81d | 327 | |
feby | 0:84a4dc1cd81d | 328 | Thread thread2(Analog_ouptut_thread); |
feby | 0:84a4dc1cd81d | 329 | |
feby | 0:84a4dc1cd81d | 330 | Thread thread3(can_read_thread); |
feby | 0:84a4dc1cd81d | 331 | |
feby | 0:84a4dc1cd81d | 332 | Thread thread4(can_write_thread); |
feby | 0:84a4dc1cd81d | 333 | |
feby | 0:84a4dc1cd81d | 334 | Thread thread5(analog_input_thread ); |
feby | 0:84a4dc1cd81d | 335 | |
feby | 0:84a4dc1cd81d | 336 | Thread thread6(digital_input_thread); |
feby | 0:84a4dc1cd81d | 337 | |
feby | 0:84a4dc1cd81d | 338 | |
feby | 0:84a4dc1cd81d | 339 | while(true) |
feby | 0:84a4dc1cd81d | 340 | |
feby | 0:84a4dc1cd81d | 341 | { |
feby | 0:84a4dc1cd81d | 342 | |
feby | 0:84a4dc1cd81d | 343 | led2 !=led2; |
feby | 0:84a4dc1cd81d | 344 | |
feby | 0:84a4dc1cd81d | 345 | Thread::wait(500); |
feby | 0:84a4dc1cd81d | 346 | |
feby | 0:84a4dc1cd81d | 347 | } |
feby | 0:84a4dc1cd81d | 348 | |
feby | 0:84a4dc1cd81d | 349 | |
feby | 0:84a4dc1cd81d | 350 | |
feby | 0:84a4dc1cd81d | 351 | } |