Serial communication. send and receive.

Dependencies:   TextLCD mbed

Committer:
nobuki
Date:
Sun Jun 17 03:39:19 2012 +0000
Revision:
0:6c9ad71dd3b9
Version 1

Who changed what in which revision?

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