Paul Sainrat / Mbed 2 deprecated App4_Projet

Dependencies:   mbed-rtos mbed

Committer:
Sainratp
Date:
Mon Oct 23 13:13:33 2017 +0000
Revision:
0:703249a56b9d
Child:
1:5c0ca9bdf810
App4;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sainratp 0:703249a56b9d 1 #include "mbed.h"
Sainratp 0:703249a56b9d 2 #include "DO/DO.h"
Sainratp 0:703249a56b9d 3 #include "MO/MO.h"
Sainratp 0:703249a56b9d 4 #include "rtos.h"
Sainratp 0:703249a56b9d 5 #include "config.h"
Sainratp 0:703249a56b9d 6
Sainratp 0:703249a56b9d 7
Sainratp 0:703249a56b9d 8 DigitalOut led1(LED1);
Sainratp 0:703249a56b9d 9 DigitalOut led2(LED2);
Sainratp 0:703249a56b9d 10 DigitalOut led3(LED3);
Sainratp 0:703249a56b9d 11
Sainratp 0:703249a56b9d 12 DigitalOut out(PIN_OUT);
Sainratp 0:703249a56b9d 13 InterruptIn in(PIN_IN);
Sainratp 0:703249a56b9d 14
Sainratp 0:703249a56b9d 15 Serial pc(USBTX,USBRX);
Sainratp 0:703249a56b9d 16
Sainratp 0:703249a56b9d 17
Sainratp 0:703249a56b9d 18 Thread sendCharThread;
Sainratp 0:703249a56b9d 19 Thread receiveBitThread;
Sainratp 0:703249a56b9d 20
Sainratp 0:703249a56b9d 21 Ticker ticker;
Sainratp 0:703249a56b9d 22 Mutex mux;
Sainratp 0:703249a56b9d 23 Timer timer;
Sainratp 0:703249a56b9d 24
Sainratp 0:703249a56b9d 25
Sainratp 0:703249a56b9d 26 Mail<char,16> mailBoxReception;
Sainratp 0:703249a56b9d 27 Mail<char,16> mailBoxEnvoi;
Sainratp 0:703249a56b9d 28 Queue <void,16> queueBitReception;
Sainratp 0:703249a56b9d 29
Sainratp 0:703249a56b9d 30
Sainratp 0:703249a56b9d 31 //MODULATION
Sainratp 0:703249a56b9d 32 void sendChar()
Sainratp 0:703249a56b9d 33 {
Sainratp 0:703249a56b9d 34 while(1) {
Sainratp 0:703249a56b9d 35 osEvent evt = mailBoxEnvoi.get();
Sainratp 0:703249a56b9d 36 if(evt.status == osEventMail) {
Sainratp 0:703249a56b9d 37
Sainratp 0:703249a56b9d 38 char* c = (char*)evt.value.p;
Sainratp 0:703249a56b9d 39 for(int i =0 ; i<8 ; i++) {
Sainratp 0:703249a56b9d 40 if(((*c>>7-i)&0x01)==1) {
Sainratp 0:703249a56b9d 41 out = 1;
Sainratp 0:703249a56b9d 42 Thread::signal_wait(0x01);
Sainratp 0:703249a56b9d 43 out = 0;
Sainratp 0:703249a56b9d 44 Thread::signal_wait(0x01);
Sainratp 0:703249a56b9d 45 } else {
Sainratp 0:703249a56b9d 46 out = 0;
Sainratp 0:703249a56b9d 47 Thread::signal_wait(0x01);
Sainratp 0:703249a56b9d 48 out = 1;
Sainratp 0:703249a56b9d 49 Thread::signal_wait(0x01);
Sainratp 0:703249a56b9d 50 }
Sainratp 0:703249a56b9d 51 }
Sainratp 0:703249a56b9d 52 }
Sainratp 0:703249a56b9d 53 }
Sainratp 0:703249a56b9d 54 }
Sainratp 0:703249a56b9d 55
Sainratp 0:703249a56b9d 56
Sainratp 0:703249a56b9d 57 //DEMODULATION
Sainratp 0:703249a56b9d 58 void receiveChar()
Sainratp 0:703249a56b9d 59 {
Sainratp 0:703249a56b9d 60 char res;
Sainratp 0:703249a56b9d 61 while(1) {
Sainratp 0:703249a56b9d 62 res=0x00;
Sainratp 0:703249a56b9d 63 for(int i =0; i<8; i++) {
Sainratp 0:703249a56b9d 64 osEvent evt = queueBitReception.get();
Sainratp 0:703249a56b9d 65 if(evt.status == osEventMessage) {
Sainratp 0:703249a56b9d 66 res = res | (((char)evt.value.p)<<i);
Sainratp 0:703249a56b9d 67 }
Sainratp 0:703249a56b9d 68 }
Sainratp 0:703249a56b9d 69 mailBoxReception.put((char*)res);
Sainratp 0:703249a56b9d 70 }
Sainratp 0:703249a56b9d 71
Sainratp 0:703249a56b9d 72 }
Sainratp 0:703249a56b9d 73
Sainratp 0:703249a56b9d 74 //DEMODULATION
Sainratp 0:703249a56b9d 75 void receiveBit()
Sainratp 0:703249a56b9d 76 {
Sainratp 0:703249a56b9d 77 int oldTime;
Sainratp 0:703249a56b9d 78 bool bitType=false;
Sainratp 0:703249a56b9d 79 Thread::signal_wait(0x02);
Sainratp 0:703249a56b9d 80 oldTime = timer.read_ms();
Sainratp 0:703249a56b9d 81 while(1) {
Sainratp 0:703249a56b9d 82
Sainratp 0:703249a56b9d 83
Sainratp 0:703249a56b9d 84 Thread::signal_wait(0x01);
Sainratp 0:703249a56b9d 85 if(timer.read_ms()-oldTime<T) {
Sainratp 0:703249a56b9d 86 Thread::signal_wait(0x01);
Sainratp 0:703249a56b9d 87 oldTime=timer.read_ms();
Sainratp 0:703249a56b9d 88 } else {
Sainratp 0:703249a56b9d 89 oldTime=timer.read_ms();
Sainratp 0:703249a56b9d 90 bitType=!bitType;
Sainratp 0:703249a56b9d 91 }
Sainratp 0:703249a56b9d 92
Sainratp 0:703249a56b9d 93
Sainratp 0:703249a56b9d 94
Sainratp 0:703249a56b9d 95
Sainratp 0:703249a56b9d 96
Sainratp 0:703249a56b9d 97 if(bitType) {
Sainratp 0:703249a56b9d 98 queueBitReception.put((void*)0x01);
Sainratp 0:703249a56b9d 99 } else {
Sainratp 0:703249a56b9d 100 queueBitReception.put((void*)0x00);
Sainratp 0:703249a56b9d 101 }
Sainratp 0:703249a56b9d 102
Sainratp 0:703249a56b9d 103
Sainratp 0:703249a56b9d 104
Sainratp 0:703249a56b9d 105 }
Sainratp 0:703249a56b9d 106 }
Sainratp 0:703249a56b9d 107
Sainratp 0:703249a56b9d 108
Sainratp 0:703249a56b9d 109 void interruptRise()
Sainratp 0:703249a56b9d 110 {
Sainratp 0:703249a56b9d 111 receiveBitThread.signal_set(0x01);
Sainratp 0:703249a56b9d 112 }
Sainratp 0:703249a56b9d 113
Sainratp 0:703249a56b9d 114 void interruptFall()
Sainratp 0:703249a56b9d 115 {
Sainratp 0:703249a56b9d 116 receiveBitThread.signal_set(0x01);
Sainratp 0:703249a56b9d 117 }
Sainratp 0:703249a56b9d 118
Sainratp 0:703249a56b9d 119 void wake()
Sainratp 0:703249a56b9d 120 {
Sainratp 0:703249a56b9d 121 sendCharThread.signal_set(0x01);
Sainratp 0:703249a56b9d 122 led3=!led3;
Sainratp 0:703249a56b9d 123 }
Sainratp 0:703249a56b9d 124
Sainratp 0:703249a56b9d 125
Sainratp 0:703249a56b9d 126 int main()
Sainratp 0:703249a56b9d 127 {
Sainratp 0:703249a56b9d 128 timer.start();
Sainratp 0:703249a56b9d 129 ticker.attach(&wake,T/2.0);
Sainratp 0:703249a56b9d 130 in.rise(&interruptRise);
Sainratp 0:703249a56b9d 131 in.fall(&interruptFall);
Sainratp 0:703249a56b9d 132 led3=1;
Sainratp 0:703249a56b9d 133 wait(1);
Sainratp 0:703249a56b9d 134 while(1) {
Sainratp 0:703249a56b9d 135 if(pc.readable()) {
Sainratp 0:703249a56b9d 136 sendCharThread.start(&sendChar);
Sainratp 0:703249a56b9d 137 }
Sainratp 0:703249a56b9d 138 }
Sainratp 0:703249a56b9d 139 }