Pages: [1]   Go Down
Author Topic: Serial read  (Read 292 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hello,

I would be very grateful if somebody could explain the following outcome of the serial communication.

I am using some global variables (datatype char and byte) to make decisions in the "loop" part of the code. The variables get modified over the serial input buffer, where I read 2 bytes and act accordingly (please see the code below)

Code:
while(Serial.available() > 1) { // wait for 2 bytes
  // prefix command
  prefix_command = (char) Serial.read();  

  if(prefix_command == 'r') {
  command_r = (char) Serial.read();  
  }

  else if(prefix_command == 'f') {
  command_f = (char) Serial.read();    
  }

  else if(prefix_command == 'E') {
  eeprom_data = (byte) Serial.read();
  }

  else Serial.println("ERROR");  
  }

If I open the serial monitor and send two bytes of data (ascii format), for example r0, the first "if" condition is met and the "command_r" is modified to '0'. This works for all modes and I have no problem here.

The question I have follows: If I send two bytes of data, the values get modified, but not before the "ERROR" is printed out. Why is this happening? It may be very obvious, but I really can't tell.

Also I will be trying to implement CRC checking for my data over the serial, sending ~100 bytes (so CRC-16 should be okay right?). Do you have any pointers about calculating the CRC checksum? Are there any tested (optimized) libraries that could be used with arduino (basically I have a custom board with Atmega 328p)?

Thank you very much and best regards,
K

« Last Edit: October 18, 2013, 01:15:55 am by Chimera » Logged

Global Moderator
Offline Offline
Brattain Member
*****
Karma: 480
Posts: 18722
Lua rocks!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

What is your line ending set to in the serial monitor? You may be sending a newline and/or a carriage-return as well.

Your method is not what I would recommend. Please read:

http://gammon.com.au/serial
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 29
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dear Mr. Gammon,

thank you very much for the answer. I will read the link you have provided with great interest.

Best regards,
K
Logged

Pages: [1]   Go Up
Jump to: