Thomas Cauwelier / Mbed 2 deprecated visible_light_communication

Dependencies:   SoftSerial SDFileSystem mbed wave_player

Committer:
Desertification
Date:
Wed Apr 26 07:35:07 2017 +0000
Revision:
1:6b839581dc9f
Child:
3:f128424d2e80
add libs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Desertification 1:6b839581dc9f 1 #define TX_MODE 0 //E
Desertification 1:6b839581dc9f 2 //#define TX_MODE 1 //F
Desertification 1:6b839581dc9f 3
Desertification 1:6b839581dc9f 4 #include "mbed.h"
Desertification 1:6b839581dc9f 5 #include "C12832.h"
Desertification 1:6b839581dc9f 6 #include "Buffer.h"
Desertification 1:6b839581dc9f 7 #include "SoftSerial.h"
Desertification 1:6b839581dc9f 8 #include "BufferedSoftSerial.h"
Desertification 1:6b839581dc9f 9
Desertification 1:6b839581dc9f 10 C12832 lcd(p5, p7, p6, p8, p11);
Desertification 1:6b839581dc9f 11 //BufferedSoftSerial buf(p9, p10);
Desertification 1:6b839581dc9f 12 Serial uart(p9, p10);
Desertification 1:6b839581dc9f 13
Desertification 1:6b839581dc9f 14 void to_manchester(char* in, int size, char* out){
Desertification 1:6b839581dc9f 15 int m_char_index = 0;
Desertification 1:6b839581dc9f 16 for(int char_index = 0; char_index < size; char_index++){
Desertification 1:6b839581dc9f 17 bool bits[16]; // manchester char
Desertification 1:6b839581dc9f 18 int m_bit_index = 0;
Desertification 1:6b839581dc9f 19 //split in bits and insert inverse
Desertification 1:6b839581dc9f 20 for(int j = 0; j < 8; j++){ // iterate over all the bits in the char
Desertification 1:6b839581dc9f 21 bool bit = (bool) ((in[char_index] >> 7-j) & 1);
Desertification 1:6b839581dc9f 22 bits[m_bit_index] = bit;
Desertification 1:6b839581dc9f 23 m_bit_index++;
Desertification 1:6b839581dc9f 24 bits[m_bit_index] = !bit;
Desertification 1:6b839581dc9f 25 m_bit_index++;
Desertification 1:6b839581dc9f 26 }
Desertification 1:6b839581dc9f 27 //combine back to 2 chars //todo dry
Desertification 1:6b839581dc9f 28 int bit_index = 0;
Desertification 1:6b839581dc9f 29 for(int j = 0; j < 8; j++){ //assemble first char
Desertification 1:6b839581dc9f 30 out[m_char_index] = out[m_char_index] | (bits[bit_index] << (7-j));
Desertification 1:6b839581dc9f 31 bit_index++;
Desertification 1:6b839581dc9f 32 }
Desertification 1:6b839581dc9f 33 m_char_index++;
Desertification 1:6b839581dc9f 34 for(int j = 0; j < 8; j++){ // assemble second char
Desertification 1:6b839581dc9f 35 out[m_char_index] = out[m_char_index] | (bits[bit_index] << (7-j));
Desertification 1:6b839581dc9f 36 bit_index++;
Desertification 1:6b839581dc9f 37 }
Desertification 1:6b839581dc9f 38 m_char_index++;
Desertification 1:6b839581dc9f 39 }
Desertification 1:6b839581dc9f 40 }
Desertification 1:6b839581dc9f 41
Desertification 1:6b839581dc9f 42 void print_bits(char* buffer, int size){
Desertification 1:6b839581dc9f 43 for(int i = 0; i < size; i++){
Desertification 1:6b839581dc9f 44 for(int j = 0; j < 8; j++){
Desertification 1:6b839581dc9f 45 int bit = ((buffer[i] >> 7-j) & 1);
Desertification 1:6b839581dc9f 46 lcd.printf("%i",bit);
Desertification 1:6b839581dc9f 47 }
Desertification 1:6b839581dc9f 48 lcd.printf(" ");
Desertification 1:6b839581dc9f 49 }
Desertification 1:6b839581dc9f 50 }
Desertification 1:6b839581dc9f 51
Desertification 1:6b839581dc9f 52 int main() {
Desertification 1:6b839581dc9f 53 lcd.cls();
Desertification 1:6b839581dc9f 54 lcd.locate(0,0);
Desertification 1:6b839581dc9f 55 char s[2];
Desertification 1:6b839581dc9f 56 s[0] = '\0';
Desertification 1:6b839581dc9f 57 s[1] = 15;
Desertification 1:6b839581dc9f 58 print_bits(s,2);
Desertification 1:6b839581dc9f 59 lcd.printf("\r\n");
Desertification 1:6b839581dc9f 60 char m[4];
Desertification 1:6b839581dc9f 61 to_manchester(s,2,m);
Desertification 1:6b839581dc9f 62 print_bits(m,4);
Desertification 1:6b839581dc9f 63 /**
Desertification 1:6b839581dc9f 64 uart.baud(9600);
Desertification 1:6b839581dc9f 65 lcd.cls();
Desertification 1:6b839581dc9f 66 lcd.printf("mbed application board!");
Desertification 1:6b839581dc9f 67 while(true){
Desertification 1:6b839581dc9f 68 if (TX_MODE){
Desertification 1:6b839581dc9f 69 uart.printf("Hello World - buffered \r\n");
Desertification 1:6b839581dc9f 70 wait(0.1f);
Desertification 1:6b839581dc9f 71 } else {
Desertification 1:6b839581dc9f 72 char r[64];
Desertification 1:6b839581dc9f 73 //buf.gets(r, 64);
Desertification 1:6b839581dc9f 74 //lcd.printf("%s",r);
Desertification 1:6b839581dc9f 75 lcd.putc(uart.getc());
Desertification 1:6b839581dc9f 76 }
Desertification 1:6b839581dc9f 77 }**/
Desertification 1:6b839581dc9f 78 }
Desertification 1:6b839581dc9f 79
Desertification 1:6b839581dc9f 80
Desertification 1:6b839581dc9f 81
Desertification 1:6b839581dc9f 82
Desertification 1:6b839581dc9f 83 /** A serial port (UART) for communication with other serial devices
Desertification 1:6b839581dc9f 84 *
Desertification 1:6b839581dc9f 85 * Can be used for Full Duplex communication, or Simplex by specifying
Desertification 1:6b839581dc9f 86 * one pin as NC (Not Connected)
Desertification 1:6b839581dc9f 87 *
Desertification 1:6b839581dc9f 88 * This uses software serial emulation, regular serial pins are alot better,
Desertification 1:6b839581dc9f 89 * however if you don't have spare ones, you can use this. It is advicable
Desertification 1:6b839581dc9f 90 * to put the serial connection with highest speed to hardware serial.
Desertification 1:6b839581dc9f 91 *
Desertification 1:6b839581dc9f 92 * If you lack RAM memory you can also use SoftSerial without this buffer around it.
Desertification 1:6b839581dc9f 93 * In that case it is fully blocking.
Desertification 1:6b839581dc9f 94 *
Desertification 1:6b839581dc9f 95 * Example:
Desertification 1:6b839581dc9f 96 * @code
Desertification 1:6b839581dc9f 97 * #include "mbed.h"
Desertification 1:6b839581dc9f 98 * #include "BufferedSoftSerial.h"
Desertification 1:6b839581dc9f 99 *
Desertification 1:6b839581dc9f 100 * SoftSerial block(USBTX, USBRX);
Desertification 1:6b839581dc9f 101 * BufferedSoftSerial buf(USBTX, USBRX);
Desertification 1:6b839581dc9f 102 *
Desertification 1:6b839581dc9f 103 * int main()
Desertification 1:6b839581dc9f 104 * {
Desertification 1:6b839581dc9f 105 * while(1) {
Desertification 1:6b839581dc9f 106 * Timer s;
Desertification 1:6b839581dc9f 107 *
Desertification 1:6b839581dc9f 108 * s.start();
Desertification 1:6b839581dc9f 109 * buf.printf("Hello World - buffered\r\n");
Desertification 1:6b839581dc9f 110 * int buffered_time = s.read_us();
Desertification 1:6b839581dc9f 111 * wait(0.1f); // give time for the buffer to empty
Desertification 1:6b839581dc9f 112 *
Desertification 1:6b839581dc9f 113 * s.reset();
Desertification 1:6b839581dc9f 114 * block.printf("Hello World - blocking\r\n");
Desertification 1:6b839581dc9f 115 * int polled_time = s.read_us();
Desertification 1:6b839581dc9f 116 * s.stop();
Desertification 1:6b839581dc9f 117 * wait(0.1f); // give time for the buffer to empty
Desertification 1:6b839581dc9f 118 *
Desertification 1:6b839581dc9f 119 * buf.printf("printf buffered took %d us\r\n", buffered_time);
Desertification 1:6b839581dc9f 120 * buf.printf("printf blocking took %d us\r\n", polled_time);
Desertification 1:6b839581dc9f 121 * wait(5);
Desertification 1:6b839581dc9f 122 * }
Desertification 1:6b839581dc9f 123 * }
Desertification 1:6b839581dc9f 124 **/