Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:703249a56b9d, 2017-10-23 (annotated)
- Committer:
- Sainratp
- Date:
- Mon Oct 23 13:13:33 2017 +0000
- Revision:
- 0:703249a56b9d
- Child:
- 1:5c0ca9bdf810
App4;
Who changed what in which revision?
| User | Revision | Line number | New 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 | } |