c - Trouble Reading from Serial.readstring() arduino UNO -
the objective enter "on" , "off" in com port , switch pin 13. no matter do. won't switch on or off. need help. tried see if string entered "on". prints "on" when check result shows different. wrong?
string sdata; string sdata1; void setup() { // put setup code here, run once: serial.begin(9600); pinmode(13,output); digitalwrite(13,high); delay(5000); digitalwrite(13,low); delay(1000); } void loop() { // put main code here, run repeatedly: while(serial.available()==0) { } sdata=serial.readstring(); sdata1="on"; if(sdata==sdata1) serial.print("same"); else { serial.print("different"); // serial.print(serialdata-serialdata1); serial.print("."); } if(sdata=="on") { digitalwrite(13,high); serial.println("led on"); delay(2000); } serial.println(sdata); if(sdata=="off") { digitalwrite(13,low); serial.println("led off"); delay(2000); } sdata=""; }
do not use string, use char array instead. can suggest function can set delimiter terminate string or timeout when terminator character provided.
bool read_string_until (char *data, const unsigned int length, const unsigned long timeout_period, const char terminator) { unsigned int index = 0; unsigned long start_time = millis(); while (index < length) { /* check if time */ if (millis() - start_time >= timeout_period) { return false; // no data in timeout period } /* if data, add buffer */ if (serial.available() > 0) { char r = serial.read(); if (r == terminator) { data [index] = 0; // terminating null byte dbg_msg("command complete"); return true; } data [index++] = r; } } return false; // filled without terminator } void loop() { if(serial.available()) { char msg[64] = {0}; /* capture incoming message */ if (read_string_until(msg, sizeof(msg), 500, '!')) { dbg_msg_val("rx: ", msg, ""); } } }
may can later use these oncomming messages command further parsing, using
Comments
Post a Comment