ECE 4180 Mini-Project (Lab 4)

Dependencies:   4DGL-uLCD-SE MODSERIAL USBHost mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "USBHostKeyboard.h"
00003 #include <string>
00004 #include "error.h"
00005 
00006 #define MODSERIAL_DEFAULT_RX_BUFFER_SIZE 512
00007 #define MODSERIAL_DEFAULT_TX_BUFFER_SIZE 1024
00008 
00009 #include "MODSERIAL.h"
00010 #include "uLCD_4DGL.h"
00011 
00012 DigitalOut myled(LED1);
00013 MODSERIAL xbee(p9, p10);
00014 DigitalOut reset(p20);
00015 DigitalOut type(p19);
00016 MODSERIAL pc(USBTX, USBRX);
00017 
00018 DigitalOut led1(LED1);
00019 DigitalOut led2(LED2);
00020 DigitalOut led3(LED3);
00021 
00022 uLCD_4DGL lcd(p13,p14,p15);
00023 
00024 string s = "";
00025 
00026 void clearLastChar() {
00027     lcd.color(BLACK);            
00028     lcd.locate(lcd.current_col-1, lcd.current_row);
00029     lcd.putc(' ');
00030     lcd.locate(lcd.current_col-1, lcd.current_row);
00031 }
00032 
00033 void onKey(uint8_t key)
00034 {
00035     if (key == '\n') {
00036         led3 = 0;
00037         xbee.printf("%s\r", s);
00038         s = "";
00039         lcd.cls();
00040     } else if (key == 8) {
00041         if (lcd.current_col > 0) {
00042             clearLastChar();
00043             s = s.substr(0,s.length()-1);
00044         }
00045     } else {
00046         s += key;
00047         led3 = 1;
00048         lcd.color(WHITE);
00049         lcd.putc(key);
00050     }
00051 }
00052 
00053 void keyboard_task(void const *)
00054 {
00055 
00056     USBHostKeyboard keyboard;
00057 
00058     while(1) {
00059         // try to connect a USB keyboard
00060         while(!keyboard.connect())
00061             Thread::wait(500);
00062 
00063         // when connected, attach handler called on keyboard event
00064         keyboard.attach(onKey);
00065 
00066         // wait until the keyboard is disconnected
00067         while(keyboard.connected())
00068             Thread::wait(500);
00069     }
00070 }
00071 
00072 int num = 0;
00073 
00074 int main()
00075 {
00076     lcd.baudrate(3000000);
00077     reset = 0;
00078     wait_ms(1);
00079     reset = 1;
00080     wait_ms(1);
00081 
00082     if (!type) {
00083         while(1) {
00084             led2 = !led2;
00085 
00086             if (xbee.readable()) {
00087                 ++num;
00088                 if (num >= 2) {
00089                     lcd.cls();
00090                     num = 0;
00091                 }
00092                 lcd.printf("Got new Message:\n");
00093                 while (xbee.readable()) {
00094                     //pc.putc(xbee.getc());
00095                     char buffer[512];
00096                     xbee.scanf("%s", buffer);
00097                     lcd.printf("%s ", buffer);
00098                     wait_ms(1);
00099                 }
00100                 lcd.printf("\n\n");
00101                 led3 = !led3;
00102             }
00103             wait_ms(20);
00104         }
00105     } else {
00106         Thread keyboardTask(keyboard_task, NULL, osPriorityNormal, 256 * 4);
00107         while(1);
00108     }
00109 
00110 }