Go Down

Topic: Serial read (Read 538 times) previous topic - next topic


Oct 18, 2013, 08:14 am Last Edit: Oct 18, 2013, 08:15 am by Chimera Reason: 1

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: [Select]
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,

Nick Gammon

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:

Please post technical questions on the forum, not by personal message. Thanks!

More info:


Dear Mr. Gammon,

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

Best regards,

Go Up

Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

via Egeo 16
Torino, 10131