Nobuki HIRAMINE
/
serial_receive
Serial communication. receive.
Diff: main.cpp
- Revision:
- 0:4ccad4f8fe4c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Jun 17 03:38:08 2012 +0000 @@ -0,0 +1,69 @@ +#include "mbed.h" +#include "TextLCD.h" + +#define READBUFFERSIZE (32) + +Serial g_serial(USBTX, USBRX); +TextLCD g_lcd(p15, p16, p17, p18, p19, p20); // RS, E, DB4, DB5, DB6, DB7 + +int ReadLineString( Serial& serial, + char szReadBuffer[], const int ciReadBufferSize, int& riIndexChar, + char szLineString[], const int ciLineStringSize ) +{ + while( 1 ) + { + if( !serial.readable() ) + { + break; + } + char c = serial.getc(); + if( '\r' == c ) + { + szReadBuffer[riIndexChar] = '\0'; + strncpy( szLineString, szReadBuffer, ciLineStringSize - 1 ); + szLineString[ciLineStringSize - 1] = '\0'; + riIndexChar = 0; + return 1; + } + else if( '\n' == c ) + { + ; + } + else + { + if( (ciReadBufferSize - 1) > riIndexChar ) + { + szReadBuffer[riIndexChar] = c; + riIndexChar++; + } + } + } + + return 0; +} + +int main() +{ + // setup + g_serial.baud(9600); + wait(0.001); + g_lcd.cls(); wait(0.001); + g_lcd.printf( "(ready)" ); + + // loop + char szReadBuffer[READBUFFERSIZE] = ""; + int iIndexChar = 0; + while(1) + { + char szLineString[READBUFFERSIZE]; + if( !ReadLineString( g_serial, + szReadBuffer, READBUFFERSIZE, iIndexChar, + szLineString, READBUFFERSIZE ) ) + { + continue; + } + g_lcd.cls(); wait(0.001); + g_lcd.locate(0, 0); + g_lcd.printf( szLineString ); + } +}