Annick Senecal
/
Cacanne
Laboratoire de CAN du cours SOI
main.cpp@2:cad8d2ec9667, 2013-12-15 (annotated)
- Committer:
- annicksenecal
- Date:
- Sun Dec 15 16:01:47 2013 +0000
- Revision:
- 2:cad8d2ec9667
- Parent:
- 1:48351dcae5b4
Final du lab 7 de SOI
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
annicksenecal | 0:fead003a74cb | 1 | #include "mbed.h" |
annicksenecal | 1:48351dcae5b4 | 2 | #include "rtos.h" |
annicksenecal | 0:fead003a74cb | 3 | |
annicksenecal | 0:fead003a74cb | 4 | DigitalOut led1(LED1); |
annicksenecal | 0:fead003a74cb | 5 | DigitalOut led2(LED2); |
annicksenecal | 0:fead003a74cb | 6 | CAN can1(p9, p10); |
annicksenecal | 0:fead003a74cb | 7 | CAN can2(p30, p29); |
annicksenecal | 1:48351dcae5b4 | 8 | |
annicksenecal | 1:48351dcae5b4 | 9 | |
annicksenecal | 2:cad8d2ec9667 | 10 | //Premier message CAN à envoyer |
annicksenecal | 1:48351dcae5b4 | 11 | void sendCan1(void const *args) |
annicksenecal | 1:48351dcae5b4 | 12 | { |
annicksenecal | 1:48351dcae5b4 | 13 | |
annicksenecal | 1:48351dcae5b4 | 14 | char counter1 = 80; |
annicksenecal | 1:48351dcae5b4 | 15 | |
annicksenecal | 0:fead003a74cb | 16 | while(1) { |
annicksenecal | 1:48351dcae5b4 | 17 | |
annicksenecal | 1:48351dcae5b4 | 18 | |
annicksenecal | 1:48351dcae5b4 | 19 | printf("send()\n"); |
annicksenecal | 1:48351dcae5b4 | 20 | if(can1.write(CANMessage(0x0480, &counter1, 1))) { |
annicksenecal | 1:48351dcae5b4 | 21 | printf("wloop()\n"); |
annicksenecal | 1:48351dcae5b4 | 22 | |
annicksenecal | 1:48351dcae5b4 | 23 | printf("Message sent: %d\n", counter1); |
annicksenecal | 1:48351dcae5b4 | 24 | counter1++; |
annicksenecal | 1:48351dcae5b4 | 25 | } |
annicksenecal | 1:48351dcae5b4 | 26 | if (counter1 >89) { |
annicksenecal | 1:48351dcae5b4 | 27 | counter1 = 80; |
annicksenecal | 1:48351dcae5b4 | 28 | } |
annicksenecal | 1:48351dcae5b4 | 29 | led1 = !led1; |
annicksenecal | 1:48351dcae5b4 | 30 | Thread::wait(1842); |
annicksenecal | 0:fead003a74cb | 31 | } |
annicksenecal | 0:fead003a74cb | 32 | } |
annicksenecal | 0:fead003a74cb | 33 | |
annicksenecal | 2:cad8d2ec9667 | 34 | |
annicksenecal | 2:cad8d2ec9667 | 35 | //Deuxième message CAN à envoyer |
annicksenecal | 1:48351dcae5b4 | 36 | void sendCan2(void const *args) |
annicksenecal | 1:48351dcae5b4 | 37 | { |
annicksenecal | 1:48351dcae5b4 | 38 | |
annicksenecal | 1:48351dcae5b4 | 39 | char counter2 = 180; |
annicksenecal | 1:48351dcae5b4 | 40 | |
annicksenecal | 1:48351dcae5b4 | 41 | while(1) { |
annicksenecal | 1:48351dcae5b4 | 42 | printf("send()\n"); |
annicksenecal | 1:48351dcae5b4 | 43 | if(can1.write(CANMessage(0x0580,&counter2,1))) { |
annicksenecal | 1:48351dcae5b4 | 44 | printf("wloop()\n"); |
annicksenecal | 1:48351dcae5b4 | 45 | |
annicksenecal | 1:48351dcae5b4 | 46 | printf("Message sent: %d\n", counter2); |
annicksenecal | 1:48351dcae5b4 | 47 | counter2++; |
annicksenecal | 1:48351dcae5b4 | 48 | } |
annicksenecal | 1:48351dcae5b4 | 49 | if (counter2 >189) { |
annicksenecal | 1:48351dcae5b4 | 50 | counter2 = 180; |
annicksenecal | 1:48351dcae5b4 | 51 | } |
annicksenecal | 1:48351dcae5b4 | 52 | led1 = !led1; |
annicksenecal | 1:48351dcae5b4 | 53 | Thread::wait(2351); |
annicksenecal | 1:48351dcae5b4 | 54 | } |
annicksenecal | 1:48351dcae5b4 | 55 | } |
annicksenecal | 1:48351dcae5b4 | 56 | |
annicksenecal | 2:cad8d2ec9667 | 57 | //Réception du message |
annicksenecal | 1:48351dcae5b4 | 58 | void receptionMsg(void const *args) |
annicksenecal | 1:48351dcae5b4 | 59 | { |
annicksenecal | 1:48351dcae5b4 | 60 | |
annicksenecal | 1:48351dcae5b4 | 61 | CANMessage msg; |
annicksenecal | 1:48351dcae5b4 | 62 | |
annicksenecal | 1:48351dcae5b4 | 63 | while(1) { |
annicksenecal | 1:48351dcae5b4 | 64 | printf("reception()\n"); |
annicksenecal | 1:48351dcae5b4 | 65 | if(can2.read(msg)) |
annicksenecal | 1:48351dcae5b4 | 66 | printf("Message received: %x\n", msg.id); |
annicksenecal | 2:cad8d2ec9667 | 67 | if (msg.id == 1234) //Filtre pour recevoir le message voulu et le bon data |
annicksenecal | 1:48351dcae5b4 | 68 | printf("Message received: %d\n", msg.data[0]); |
annicksenecal | 1:48351dcae5b4 | 69 | Thread::wait(958); |
annicksenecal | 1:48351dcae5b4 | 70 | led2 = !led2; |
annicksenecal | 1:48351dcae5b4 | 71 | } |
annicksenecal | 1:48351dcae5b4 | 72 | } |
annicksenecal | 1:48351dcae5b4 | 73 | |
annicksenecal | 1:48351dcae5b4 | 74 | int main() |
annicksenecal | 1:48351dcae5b4 | 75 | { |
annicksenecal | 2:cad8d2ec9667 | 76 | // Fonction principale qui prend en loop les 3 thread |
annicksenecal | 1:48351dcae5b4 | 77 | printf("main()\n"); |
annicksenecal | 1:48351dcae5b4 | 78 | |
annicksenecal | 1:48351dcae5b4 | 79 | Thread thread1(sendCan1); |
annicksenecal | 1:48351dcae5b4 | 80 | Thread thread2(sendCan2); |
annicksenecal | 1:48351dcae5b4 | 81 | Thread thread3(receptionMsg); |
annicksenecal | 1:48351dcae5b4 | 82 | while(true); |
annicksenecal | 1:48351dcae5b4 | 83 | |
annicksenecal | 1:48351dcae5b4 | 84 | } |