Serial communication. receive.

Dependencies:   TextLCD mbed

Committer:
nobuki
Date:
Sun Jun 17 03:38:08 2012 +0000
Revision:
0:4ccad4f8fe4c
Version 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nobuki 0:4ccad4f8fe4c 1 #include "mbed.h"
nobuki 0:4ccad4f8fe4c 2 #include "TextLCD.h"
nobuki 0:4ccad4f8fe4c 3
nobuki 0:4ccad4f8fe4c 4 #define READBUFFERSIZE (32)
nobuki 0:4ccad4f8fe4c 5
nobuki 0:4ccad4f8fe4c 6 Serial g_serial(USBTX, USBRX);
nobuki 0:4ccad4f8fe4c 7 TextLCD g_lcd(p15, p16, p17, p18, p19, p20); // RS, E, DB4, DB5, DB6, DB7
nobuki 0:4ccad4f8fe4c 8
nobuki 0:4ccad4f8fe4c 9 int ReadLineString( Serial& serial,
nobuki 0:4ccad4f8fe4c 10 char szReadBuffer[], const int ciReadBufferSize, int& riIndexChar,
nobuki 0:4ccad4f8fe4c 11 char szLineString[], const int ciLineStringSize )
nobuki 0:4ccad4f8fe4c 12 {
nobuki 0:4ccad4f8fe4c 13 while( 1 )
nobuki 0:4ccad4f8fe4c 14 {
nobuki 0:4ccad4f8fe4c 15 if( !serial.readable() )
nobuki 0:4ccad4f8fe4c 16 {
nobuki 0:4ccad4f8fe4c 17 break;
nobuki 0:4ccad4f8fe4c 18 }
nobuki 0:4ccad4f8fe4c 19 char c = serial.getc();
nobuki 0:4ccad4f8fe4c 20 if( '\r' == c )
nobuki 0:4ccad4f8fe4c 21 {
nobuki 0:4ccad4f8fe4c 22 szReadBuffer[riIndexChar] = '\0';
nobuki 0:4ccad4f8fe4c 23 strncpy( szLineString, szReadBuffer, ciLineStringSize - 1 );
nobuki 0:4ccad4f8fe4c 24 szLineString[ciLineStringSize - 1] = '\0';
nobuki 0:4ccad4f8fe4c 25 riIndexChar = 0;
nobuki 0:4ccad4f8fe4c 26 return 1;
nobuki 0:4ccad4f8fe4c 27 }
nobuki 0:4ccad4f8fe4c 28 else if( '\n' == c )
nobuki 0:4ccad4f8fe4c 29 {
nobuki 0:4ccad4f8fe4c 30 ;
nobuki 0:4ccad4f8fe4c 31 }
nobuki 0:4ccad4f8fe4c 32 else
nobuki 0:4ccad4f8fe4c 33 {
nobuki 0:4ccad4f8fe4c 34 if( (ciReadBufferSize - 1) > riIndexChar )
nobuki 0:4ccad4f8fe4c 35 {
nobuki 0:4ccad4f8fe4c 36 szReadBuffer[riIndexChar] = c;
nobuki 0:4ccad4f8fe4c 37 riIndexChar++;
nobuki 0:4ccad4f8fe4c 38 }
nobuki 0:4ccad4f8fe4c 39 }
nobuki 0:4ccad4f8fe4c 40 }
nobuki 0:4ccad4f8fe4c 41
nobuki 0:4ccad4f8fe4c 42 return 0;
nobuki 0:4ccad4f8fe4c 43 }
nobuki 0:4ccad4f8fe4c 44
nobuki 0:4ccad4f8fe4c 45 int main()
nobuki 0:4ccad4f8fe4c 46 {
nobuki 0:4ccad4f8fe4c 47 // setup
nobuki 0:4ccad4f8fe4c 48 g_serial.baud(9600);
nobuki 0:4ccad4f8fe4c 49 wait(0.001);
nobuki 0:4ccad4f8fe4c 50 g_lcd.cls(); wait(0.001);
nobuki 0:4ccad4f8fe4c 51 g_lcd.printf( "(ready)" );
nobuki 0:4ccad4f8fe4c 52
nobuki 0:4ccad4f8fe4c 53 // loop
nobuki 0:4ccad4f8fe4c 54 char szReadBuffer[READBUFFERSIZE] = "";
nobuki 0:4ccad4f8fe4c 55 int iIndexChar = 0;
nobuki 0:4ccad4f8fe4c 56 while(1)
nobuki 0:4ccad4f8fe4c 57 {
nobuki 0:4ccad4f8fe4c 58 char szLineString[READBUFFERSIZE];
nobuki 0:4ccad4f8fe4c 59 if( !ReadLineString( g_serial,
nobuki 0:4ccad4f8fe4c 60 szReadBuffer, READBUFFERSIZE, iIndexChar,
nobuki 0:4ccad4f8fe4c 61 szLineString, READBUFFERSIZE ) )
nobuki 0:4ccad4f8fe4c 62 {
nobuki 0:4ccad4f8fe4c 63 continue;
nobuki 0:4ccad4f8fe4c 64 }
nobuki 0:4ccad4f8fe4c 65 g_lcd.cls(); wait(0.001);
nobuki 0:4ccad4f8fe4c 66 g_lcd.locate(0, 0);
nobuki 0:4ccad4f8fe4c 67 g_lcd.printf( szLineString );
nobuki 0:4ccad4f8fe4c 68 }
nobuki 0:4ccad4f8fe4c 69 }