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

main.cpp

Committer:
DaniusKalv
Date:
2014-11-19
Revision:
19:2b14139fb19f
Parent:
18:fe3809cdc50a
Parent:
11:996c98ad9d73
Child:
20:8055a5b5dba0

File content as of revision 19:2b14139fb19f:

#include "mbed.h"
#include "matrix.h"
#include "text.h"
#include <string>

text generator;
matrix display(p13, p12, p11, p14, p15, p17, p16);
DigitalOut led(LED1);
Serial pc(USBTX, USBRX);
Serial bluetooth(p28,p27);
char line[99];
char line_buffer[99];
volatile bool mode_buffer = 0;
volatile uint8_t interrupt_flag = 0;
volatile int realTime;
void receive();

int main() {
    bool m_mode = 0;
    char buffer[4];
    bool dot;
    pc.baud(115200);
    bluetooth.baud(38400);
    void (*foo)() = &receive;
    bluetooth.attach(foo, Serial::RxIrq);
    generator.generate("Hello world!");
    while(true){
        if (interrupt_flag == 1){
            pc.printf("\r\nIn interrupt flag!");
            m_mode = mode_buffer;
            memcpy(line, line_buffer, sizeof(line_buffer));
            memset(line_buffer, 0, sizeof(line_buffer));
            interrupt_flag = 0;
        }
        pc.printf("\r\nMode = %i", m_mode);
        if (strlen(line) > 0 && m_mode == 0 && interrupt_flag == 0){  
            led = 0;  
            generator.generate(line);
            memset(line, 0, sizeof(line));
        }
        else if (strlen(line) > 0 && m_mode == 1 && interrupt_flag == 0){
            led = 0;
            memset(line, 0, sizeof(line));
        }
        if(m_mode == 1 && interrupt_flag == 0){
            time_t seconds = time(NULL);
            strftime(buffer, 4, "%H%M", localtime(&seconds)); 
            if ((seconds % 2) == 0) dot = true;
            else dot = false; 
            display.clock(buffer, dot);
        }
        else if (interrupt_flag == 0) display.show();
    }
}

void receive(){
    led = 1;
    int i, j = 0;
    i = 10 * (bluetooth.getc() - 48);
    i += bluetooth.getc() - 48;
    do{ 
        line[j] = bluetooth.getc();
        j++;
        wait(0.0004);       
    }
    else{
        mode_buffer = true;
        for (int i = 0; i < 10; i++){                   
            line_buffer[i] = bluetooth.getc();
            wait(0.0004);
        }
        realTime = atoi(line_buffer);
        set_time(realTime);
    }  
    while (bluetooth.readable()){
            bluetooth.getc();
    }
    interrupt_flag = 1; 
}