Go Down

Topic: Interacting with user over serial.. Serial.read() (Read 468 times) previous topic - next topic

r00t

I am having problems reading in from the usb/serial rs232 to the arduino. The function Serial.read() is being ignored for some reason. I have tried many different ways, but nothing is helping.
In the following sketch, the function set_time() is only printing the strings but is not waiting for the user inputs, am I doing something wrong?

Code: [Select]

#include <Wire.h>

void intro()
{
  Serial.println("What would you like to do:");
  Serial.println("\t1) Set the time and date");
  Serial.println("\t2) Display the time in a loop until a key is hit (update every sec).");
  Serial.println("Yor selection: ");
}

void setup()
{
 //Wire.begin();
 Serial.begin(9600);
 Serial.println("Hello Welcome to the clock, designed to test how I2C works with the DS1307\n");
 intro();
}

void set_time()
{
int  yr[2], mn[2], dt[2], dy, hr[2], mi[2], sec[2], day[2];

Serial.println("Set time.");
Serial.flush();
//  if (Serial.available() > 0) {
Serial.print("Enter the year (00-99): ");
yr[0] = Serial.read();
yr[1] = Serial.read();
Serial.print("Enter the month (01-12): ");
mn[0] = Serial.read();
mn[1] = Serial.read();
Serial.print("Enter the date (01-31): ");
dt[0] = Serial.read();
dt[1] = Serial.read();
Serial.print("Enter the day (1-7): ");
dy = Serial.read();
Serial.print("Enter the hour (01-23): ");
hr[0] = Serial.read();
hr[1] = Serial.read();
// hr = hr & 0x3f;      /* force clock to 24 hour mode */
Serial.print("Enter the minute (00-59): ");
mi[0] = Serial.read();
mi[1] = Serial.read();
Serial.print("Enter the second (00-59): ");
sec[0] = Serial.read();
sec[1] = Serial.read();
//  }
}

void display_time()
{
Serial.println("Display time.");
}

void loop()
{
 int m=0;
 if (Serial.available() > 0) {
  m = Serial.read();
   if (m==49)
    set_time();
   else if (m==50)
    display_time();
   else
   {
    Serial.print("Wrong selection: ");
    Serial.println(m,BYTE);
   }
  intro();
 }
}


Thanks for your help.

kg4wsv

Serial.read will return if there is nothing in the input buffer; you need to check and see if something is available, then read it.  For example
Code: [Select]
   while (!Serial.available())
     {;}
   c = Serial.read();

This code loops until something is available to read.

I think you can also check the Serial.read return status to find out if the read was succesful, but check the documentation to be sure.

-j

Go Up