TP3 - Réseau terrain de supervision : CAN

Dependencies:   mbed-rtos mbed

Committer:
candybibby
Date:
Fri Jun 02 16:20:34 2017 +0000
Revision:
3:478e83703442
Commit final

Who changed what in which revision?

UserRevisionLine numberNew contents of line
candybibby 3:478e83703442 1 #include "mbed.h"
candybibby 3:478e83703442 2 #include "rtos.h"
candybibby 3:478e83703442 3
candybibby 3:478e83703442 4 #define SIG_RX_CAN 0x01
candybibby 3:478e83703442 5
candybibby 3:478e83703442 6
candybibby 3:478e83703442 7 DigitalOut led1(LED1);
candybibby 3:478e83703442 8 DigitalOut led2(LED2);
candybibby 3:478e83703442 9
candybibby 3:478e83703442 10
candybibby 3:478e83703442 11 Thread threadA;
candybibby 3:478e83703442 12 Thread threadB;
candybibby 3:478e83703442 13
candybibby 3:478e83703442 14
candybibby 3:478e83703442 15 CAN CanPort(p30, p29);
candybibby 3:478e83703442 16 CANMessage MessageRx;
candybibby 3:478e83703442 17 CANMessage MessageTx;
candybibby 3:478e83703442 18
candybibby 3:478e83703442 19 PwmOut Speaker(p21);
candybibby 3:478e83703442 20
candybibby 3:478e83703442 21 unsigned int Id;
candybibby 3:478e83703442 22
candybibby 3:478e83703442 23 void canReader(void)
candybibby 3:478e83703442 24 {
candybibby 3:478e83703442 25 if (CanPort.read(MessageRx))
candybibby 3:478e83703442 26 {
candybibby 3:478e83703442 27 led1 = !led1;
candybibby 3:478e83703442 28 threadA.signal_set(SIG_RX_CAN);
candybibby 3:478e83703442 29 }
candybibby 3:478e83703442 30 }
candybibby 3:478e83703442 31
candybibby 3:478e83703442 32
candybibby 3:478e83703442 33 // THREAD DE RECEPTION
candybibby 3:478e83703442 34 void thA()
candybibby 3:478e83703442 35 {
candybibby 3:478e83703442 36 while(true)
candybibby 3:478e83703442 37 {
candybibby 3:478e83703442 38 // le thread attend un signe du canReader()
candybibby 3:478e83703442 39 Thread::signal_wait(SIG_RX_CAN);
candybibby 3:478e83703442 40 led2 = !led2;
candybibby 3:478e83703442 41
candybibby 3:478e83703442 42 // si l'ID correspond à notre protocole applicatif ( 0X111 pour le speaker)
candybibby 3:478e83703442 43 // alors on traite la trame, sinon on ne fait rien
candybibby 3:478e83703442 44 if (MessageRx.id == 0x111){
candybibby 3:478e83703442 45
candybibby 3:478e83703442 46 // la lecture du badge est autorisée (data reçue : 0x01)
candybibby 3:478e83703442 47 if (MessageRx.data[0] == 0x01){
candybibby 3:478e83703442 48 led1 = !led1;
candybibby 3:478e83703442 49 // on fait 2 bips
candybibby 3:478e83703442 50 Speaker.write(0.3);
candybibby 3:478e83703442 51 wait(0.1);
candybibby 3:478e83703442 52 Speaker.write(0.3);
candybibby 3:478e83703442 53 wait(0.1);
candybibby 3:478e83703442 54
candybibby 3:478e83703442 55 }
candybibby 3:478e83703442 56 else if (MessageRx.data[0] == 0x00){
candybibby 3:478e83703442 57 // dans ce cas là, l'accès est refusée (data reçue : 0x00)
candybibby 3:478e83703442 58 led1 = !led1;
candybibby 3:478e83703442 59 // on fait 6 petits bips
candybibby 3:478e83703442 60 for (int i = 0; i<6 ; i++){
candybibby 3:478e83703442 61 Speaker.write(0.1);
candybibby 3:478e83703442 62 wait(0.1);
candybibby 3:478e83703442 63 }
candybibby 3:478e83703442 64 }
candybibby 3:478e83703442 65 }
candybibby 3:478e83703442 66
candybibby 3:478e83703442 67 }
candybibby 3:478e83703442 68 }
candybibby 3:478e83703442 69
candybibby 3:478e83703442 70 // THREAD D'ENVOI
candybibby 3:478e83703442 71 /*void thB()
candybibby 3:478e83703442 72 {
candybibby 3:478e83703442 73 while (true)
candybibby 3:478e83703442 74 {
candybibby 3:478e83703442 75 led1 = !led1;
candybibby 3:478e83703442 76 printf("TIC3s\n");
candybibby 3:478e83703442 77 MessageTx.id=Id;
candybibby 3:478e83703442 78 CanPort.write(MessageTx);
candybibby 3:478e83703442 79
candybibby 3:478e83703442 80 if (Id < 0x3FF) Id++;
candybibby 3:478e83703442 81 else Id = 0x000;
candybibby 3:478e83703442 82
candybibby 3:478e83703442 83 wait(3);
candybibby 3:478e83703442 84 }
candybibby 3:478e83703442 85 }
candybibby 3:478e83703442 86 */
candybibby 3:478e83703442 87
candybibby 3:478e83703442 88
candybibby 3:478e83703442 89 int main()
candybibby 3:478e83703442 90 {
candybibby 3:478e83703442 91 CanPort.frequency(20000);
candybibby 3:478e83703442 92
candybibby 3:478e83703442 93 CanPort.attach(canReader,CAN::RxIrq);
candybibby 3:478e83703442 94
candybibby 3:478e83703442 95 threadA.start(thA);
candybibby 3:478e83703442 96
candybibby 3:478e83703442 97 led1 = 0;
candybibby 3:478e83703442 98 printf("Start OK\n");
candybibby 3:478e83703442 99
candybibby 3:478e83703442 100 while (true)
candybibby 3:478e83703442 101 {
candybibby 3:478e83703442 102
candybibby 3:478e83703442 103 }
candybibby 3:478e83703442 104 }
candybibby 3:478e83703442 105