Blue LED matrix (8x16) program. Gets text string through bluetooth and displays it on led matrix. Also has a clock function- get system time from a phone through bluetooth and enters clock mode. In clock mode it acts as a clock showing hours and minutes and blinking led every second. Clock mode can be broken if a text string is received through bluetooth.

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "matrix.h"
00003 #include "text.h"
00004 #include <string>
00005 
00006 text generator;
00007 matrix display(p13, p12, p11, p14, p15, p17, p16);
00008 DigitalOut led(LED1);
00009 Serial pc(USBTX, USBRX);
00010 Serial bluetooth(p28,p27);
00011 char line[99];
00012 char line_buffer[99];
00013 volatile bool mode_buffer = 0;
00014 volatile uint8_t interrupt_flag = 0;
00015 volatile int realTime;
00016 void receive();
00017 
00018 int main() {
00019     bool m_mode = 0;
00020     char buffer[4];
00021     bool dot;
00022     pc.baud(115200);
00023     bluetooth.baud(115200);
00024     void (*foo)() = &receive;
00025     bluetooth.attach(foo, Serial::RxIrq);
00026     generator.generate("Hello world!");
00027     while(true){
00028         if (interrupt_flag == 1){
00029             pc.printf("\r\nIn interrupt flag!");
00030             m_mode = mode_buffer;
00031             memcpy(line, line_buffer, sizeof(line_buffer));
00032             memset(line_buffer, 0, sizeof(line_buffer));
00033             interrupt_flag = 0;
00034         }
00035         pc.printf("\r\nMode = %i", m_mode);
00036         if (strlen(line) > 0 && m_mode == 0 && interrupt_flag == 0){  
00037             led = 0;  
00038             generator.generate(line);
00039             memset(line, 0, sizeof(line));
00040         }
00041         else if (strlen(line) > 0 && m_mode == 1 && interrupt_flag == 0){
00042             led = 0;
00043             memset(line, 0, sizeof(line));
00044         }
00045         if(m_mode == 1 && interrupt_flag == 0){
00046             time_t seconds = time(NULL);
00047             strftime(buffer, 4, "%H%M", localtime(&seconds)); 
00048             if ((seconds % 2) == 0) dot = true;
00049             else dot = false; 
00050             display.clock(buffer, dot);
00051         }
00052         else if (interrupt_flag == 0) display.show();
00053         //wait(0.1);
00054     }
00055 }
00056 
00057 void receive(){
00058     led = 1;
00059     int i, j = 0;
00060     i = 10 * (bluetooth.getc() - 48);
00061     i += bluetooth.getc() - 48;
00062     if(i > 0){
00063         mode_buffer = false;
00064         do{ 
00065             line_buffer[j] = bluetooth.getc();
00066             j++;
00067             wait(0.0001);       
00068         }
00069         while(bluetooth.readable() && (j < i) && (j < 99));
00070     }
00071     else{
00072         mode_buffer = true;
00073         for (int i = 0; i < 10; i++){                   
00074             line_buffer[i] = bluetooth.getc();
00075             wait(0.0001);
00076         }
00077         realTime = atoi(line_buffer);
00078         set_time(realTime);
00079     }  
00080     while (bluetooth.readable()){
00081             bluetooth.getc();
00082     }
00083     interrupt_flag = 1; 
00084 }