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:6ecb1db6315e, 2010-12-13 (annotated)
- Committer:
- gpushkar
- Date:
- Mon Dec 13 21:22:07 2010 +0000
- Revision:
- 0:6ecb1db6315e
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| gpushkar | 0:6ecb1db6315e | 1 | #include "mbed.h" |
| gpushkar | 0:6ecb1db6315e | 2 | #include "extra.h" |
| gpushkar | 0:6ecb1db6315e | 3 | |
| gpushkar | 0:6ecb1db6315e | 4 | #define MARK 125 // 2000Hz |
| gpushkar | 0:6ecb1db6315e | 5 | #define SPACE 250 //1000Hz |
| gpushkar | 0:6ecb1db6315e | 6 | #define BAUD 300 |
| gpushkar | 0:6ecb1db6315e | 7 | #define BIT_PERIOD_US 1/BAUD |
| gpushkar | 0:6ecb1db6315e | 8 | |
| gpushkar | 0:6ecb1db6315e | 9 | //DigitalOut led(LED1); |
| gpushkar | 0:6ecb1db6315e | 10 | PwmOut led(p21); |
| gpushkar | 0:6ecb1db6315e | 11 | int output=0; |
| gpushkar | 0:6ecb1db6315e | 12 | int buf_mod[10]={0}; |
| gpushkar | 0:6ecb1db6315e | 13 | int buf_index = 0; |
| gpushkar | 0:6ecb1db6315e | 14 | Timeout stop; |
| gpushkar | 0:6ecb1db6315e | 15 | Serial bt(p9, p10); // tx, rx |
| gpushkar | 0:6ecb1db6315e | 16 | |
| gpushkar | 0:6ecb1db6315e | 17 | |
| gpushkar | 0:6ecb1db6315e | 18 | void stop_pwm(void); |
| gpushkar | 0:6ecb1db6315e | 19 | void read_serial(void); |
| gpushkar | 0:6ecb1db6315e | 20 | int main() { |
| gpushkar | 0:6ecb1db6315e | 21 | |
| gpushkar | 0:6ecb1db6315e | 22 | int i; |
| gpushkar | 0:6ecb1db6315e | 23 | pc.baud(115200); |
| gpushkar | 0:6ecb1db6315e | 24 | bt.baud(115200); |
| gpushkar | 0:6ecb1db6315e | 25 | pc.attach(&read_serial); |
| gpushkar | 0:6ecb1db6315e | 26 | bt.attach(&read_serial); |
| gpushkar | 0:6ecb1db6315e | 27 | timerSetup(); |
| gpushkar | 0:6ecb1db6315e | 28 | int bit_index = 0; |
| gpushkar | 0:6ecb1db6315e | 29 | float period; |
| gpushkar | 0:6ecb1db6315e | 30 | state = IDLE; |
| gpushkar | 0:6ecb1db6315e | 31 | |
| gpushkar | 0:6ecb1db6315e | 32 | while (1) { |
| gpushkar | 0:6ecb1db6315e | 33 | |
| gpushkar | 0:6ecb1db6315e | 34 | |
| gpushkar | 0:6ecb1db6315e | 35 | if (output==0 && buf_mod[0] != 0) { |
| gpushkar | 0:6ecb1db6315e | 36 | if (!bit_index) { |
| gpushkar | 0:6ecb1db6315e | 37 | |
| gpushkar | 0:6ecb1db6315e | 38 | led=0.5; |
| gpushkar | 0:6ecb1db6315e | 39 | led.period_us(SPACE); |
| gpushkar | 0:6ecb1db6315e | 40 | //pc.printf("start bit\n"); |
| gpushkar | 0:6ecb1db6315e | 41 | stop.attach_us(&stop_pwm,1000000*(float)BIT_PERIOD_US); |
| gpushkar | 0:6ecb1db6315e | 42 | bit_index++; |
| gpushkar | 0:6ecb1db6315e | 43 | output=1; |
| gpushkar | 0:6ecb1db6315e | 44 | continue; |
| gpushkar | 0:6ecb1db6315e | 45 | } |
| gpushkar | 0:6ecb1db6315e | 46 | period = ( 0x01 & (buf_mod[0] >> (bit_index-1)))? MARK:SPACE ; |
| gpushkar | 0:6ecb1db6315e | 47 | led = 0.5; |
| gpushkar | 0:6ecb1db6315e | 48 | pc.printf("Bit=%c", (period == MARK)?'H':'L' ); |
| gpushkar | 0:6ecb1db6315e | 49 | |
| gpushkar | 0:6ecb1db6315e | 50 | led.period_us(period); |
| gpushkar | 0:6ecb1db6315e | 51 | stop.attach_us(&stop_pwm,1000000*(float)BIT_PERIOD_US); |
| gpushkar | 0:6ecb1db6315e | 52 | |
| gpushkar | 0:6ecb1db6315e | 53 | bit_index++; |
| gpushkar | 0:6ecb1db6315e | 54 | output = 1; |
| gpushkar | 0:6ecb1db6315e | 55 | |
| gpushkar | 0:6ecb1db6315e | 56 | //Transmission complete |
| gpushkar | 0:6ecb1db6315e | 57 | if (bit_index == 9) { |
| gpushkar | 0:6ecb1db6315e | 58 | |
| gpushkar | 0:6ecb1db6315e | 59 | bit_index = 0; |
| gpushkar | 0:6ecb1db6315e | 60 | buf_index--; |
| gpushkar | 0:6ecb1db6315e | 61 | i=0; |
| gpushkar | 0:6ecb1db6315e | 62 | led.period_us(MARK); |
| gpushkar | 0:6ecb1db6315e | 63 | //while (buf[i] != 0) { |
| gpushkar | 0:6ecb1db6315e | 64 | while (i <= buf_index) { |
| gpushkar | 0:6ecb1db6315e | 65 | buf_mod[i] = buf_mod[i+1]; |
| gpushkar | 0:6ecb1db6315e | 66 | i++; |
| gpushkar | 0:6ecb1db6315e | 67 | } |
| gpushkar | 0:6ecb1db6315e | 68 | buf_mod[buf_index]=0; |
| gpushkar | 0:6ecb1db6315e | 69 | |
| gpushkar | 0:6ecb1db6315e | 70 | } |
| gpushkar | 0:6ecb1db6315e | 71 | } |
| gpushkar | 0:6ecb1db6315e | 72 | |
| gpushkar | 0:6ecb1db6315e | 73 | |
| gpushkar | 0:6ecb1db6315e | 74 | // DEMOD: |
| gpushkar | 0:6ecb1db6315e | 75 | if ( state == IDLE && n_long_periods == 3 ) { |
| gpushkar | 0:6ecb1db6315e | 76 | pc.printf("START "); |
| gpushkar | 0:6ecb1db6315e | 77 | state = READING; |
| gpushkar | 0:6ecb1db6315e | 78 | buf = 0; |
| gpushkar | 0:6ecb1db6315e | 79 | bit_count=0; |
| gpushkar | 0:6ecb1db6315e | 80 | n_long_periods = 0; |
| gpushkar | 0:6ecb1db6315e | 81 | } else if (state == READING ) { |
| gpushkar | 0:6ecb1db6315e | 82 | if (n_short_periods > 150 ) { |
| gpushkar | 0:6ecb1db6315e | 83 | // Error condition : You ve missed a bit |
| gpushkar | 0:6ecb1db6315e | 84 | state = IDLE; |
| gpushkar | 0:6ecb1db6315e | 85 | pc.printf("\n Error buf = %d",buf); |
| gpushkar | 0:6ecb1db6315e | 86 | buf = 0; |
| gpushkar | 0:6ecb1db6315e | 87 | bit_count = 0; |
| gpushkar | 0:6ecb1db6315e | 88 | continue; |
| gpushkar | 0:6ecb1db6315e | 89 | } |
| gpushkar | 0:6ecb1db6315e | 90 | |
| gpushkar | 0:6ecb1db6315e | 91 | if (n_short_periods == 90) { |
| gpushkar | 0:6ecb1db6315e | 92 | pc.printf("MARK "); |
| gpushkar | 0:6ecb1db6315e | 93 | buf = (0x80 | (buf >>1)); |
| gpushkar | 0:6ecb1db6315e | 94 | bit_count++; |
| gpushkar | 0:6ecb1db6315e | 95 | |
| gpushkar | 0:6ecb1db6315e | 96 | |
| gpushkar | 0:6ecb1db6315e | 97 | } |
| gpushkar | 0:6ecb1db6315e | 98 | if (n_short_periods >100 ) { |
| gpushkar | 0:6ecb1db6315e | 99 | n_short_periods = 0; |
| gpushkar | 0:6ecb1db6315e | 100 | } |
| gpushkar | 0:6ecb1db6315e | 101 | |
| gpushkar | 0:6ecb1db6315e | 102 | if (n_long_periods == 4 ) { |
| gpushkar | 0:6ecb1db6315e | 103 | |
| gpushkar | 0:6ecb1db6315e | 104 | pc.printf("SPACE "); |
| gpushkar | 0:6ecb1db6315e | 105 | buf = buf >>1; |
| gpushkar | 0:6ecb1db6315e | 106 | bit_count++; |
| gpushkar | 0:6ecb1db6315e | 107 | n_long_periods=0; |
| gpushkar | 0:6ecb1db6315e | 108 | } |
| gpushkar | 0:6ecb1db6315e | 109 | |
| gpushkar | 0:6ecb1db6315e | 110 | if (bit_count == 8 ) { |
| gpushkar | 0:6ecb1db6315e | 111 | // all bits received |
| gpushkar | 0:6ecb1db6315e | 112 | pc.printf("\n Rx from UE = %c",buf); |
| gpushkar | 0:6ecb1db6315e | 113 | bt.putc(buf); |
| gpushkar | 0:6ecb1db6315e | 114 | state = IDLE; |
| gpushkar | 0:6ecb1db6315e | 115 | buf = 0; |
| gpushkar | 0:6ecb1db6315e | 116 | bit_count=0 ; |
| gpushkar | 0:6ecb1db6315e | 117 | } |
| gpushkar | 0:6ecb1db6315e | 118 | } |
| gpushkar | 0:6ecb1db6315e | 119 | } |
| gpushkar | 0:6ecb1db6315e | 120 | } |
| gpushkar | 0:6ecb1db6315e | 121 | void read_serial(void) { |
| gpushkar | 0:6ecb1db6315e | 122 | |
| gpushkar | 0:6ecb1db6315e | 123 | if (pc.readable()) { |
| gpushkar | 0:6ecb1db6315e | 124 | |
| gpushkar | 0:6ecb1db6315e | 125 | buf_mod[buf_index++] = (int)pc.getc(); |
| gpushkar | 0:6ecb1db6315e | 126 | //pc.printf("%d",buf[buf_index-1]); |
| gpushkar | 0:6ecb1db6315e | 127 | //buf[buf_index++]=171; |
| gpushkar | 0:6ecb1db6315e | 128 | buf_mod[buf_index]= 0; |
| gpushkar | 0:6ecb1db6315e | 129 | } |
| gpushkar | 0:6ecb1db6315e | 130 | if (bt.readable()) { |
| gpushkar | 0:6ecb1db6315e | 131 | |
| gpushkar | 0:6ecb1db6315e | 132 | buf_mod[buf_index++] = (int)bt.getc(); |
| gpushkar | 0:6ecb1db6315e | 133 | //pc.printf("%d",buf[buf_index-1]); |
| gpushkar | 0:6ecb1db6315e | 134 | //buf[buf_index++]=171; |
| gpushkar | 0:6ecb1db6315e | 135 | buf_mod[buf_index]= 0; |
| gpushkar | 0:6ecb1db6315e | 136 | } |
| gpushkar | 0:6ecb1db6315e | 137 | } |
| gpushkar | 0:6ecb1db6315e | 138 | void stop_pwm(void) { |
| gpushkar | 0:6ecb1db6315e | 139 | output = 0; |
| gpushkar | 0:6ecb1db6315e | 140 | //led = 0; |
| gpushkar | 0:6ecb1db6315e | 141 | } |