Candy PERES
/
can_speaker
TP3 - Réseau terrain de supervision : CAN
Diff: speaker.cpp
- Revision:
- 3:478e83703442
diff -r 468ee5a130a1 -r 478e83703442 speaker.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/speaker.cpp Fri Jun 02 16:20:34 2017 +0000 @@ -0,0 +1,105 @@ +#include "mbed.h" +#include "rtos.h" + +#define SIG_RX_CAN 0x01 + + +DigitalOut led1(LED1); +DigitalOut led2(LED2); + + +Thread threadA; +Thread threadB; + + +CAN CanPort(p30, p29); +CANMessage MessageRx; +CANMessage MessageTx; + +PwmOut Speaker(p21); + +unsigned int Id; + +void canReader(void) +{ + if (CanPort.read(MessageRx)) + { + led1 = !led1; + threadA.signal_set(SIG_RX_CAN); + } +} + + + // THREAD DE RECEPTION +void thA() +{ + while(true) + { + // le thread attend un signe du canReader() + Thread::signal_wait(SIG_RX_CAN); + led2 = !led2; + + // si l'ID correspond à notre protocole applicatif ( 0X111 pour le speaker) + // alors on traite la trame, sinon on ne fait rien + if (MessageRx.id == 0x111){ + + // la lecture du badge est autorisée (data reçue : 0x01) + if (MessageRx.data[0] == 0x01){ + led1 = !led1; + // on fait 2 bips + Speaker.write(0.3); + wait(0.1); + Speaker.write(0.3); + wait(0.1); + + } + else if (MessageRx.data[0] == 0x00){ + // dans ce cas là, l'accès est refusée (data reçue : 0x00) + led1 = !led1; + // on fait 6 petits bips + for (int i = 0; i<6 ; i++){ + Speaker.write(0.1); + wait(0.1); + } + } + } + + } +} + +// THREAD D'ENVOI +/*void thB() +{ + while (true) + { + led1 = !led1; + printf("TIC3s\n"); + MessageTx.id=Id; + CanPort.write(MessageTx); + + if (Id < 0x3FF) Id++; + else Id = 0x000; + + wait(3); + } +} + */ + + +int main() +{ + CanPort.frequency(20000); + + CanPort.attach(canReader,CAN::RxIrq); + + threadA.start(thA); + + led1 = 0; + printf("Start OK\n"); + + while (true) + { + + } +} +