Laboratoire de CAN du cours SOI

Dependencies:   mbed-rtos mbed

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?

UserRevisionLine numberNew 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 }