help with serial text recognition


hey everybody!

i'm starting experiment serial inputs arduino, , right project i'm trying enter string in serial monitor , have arduino recognize it. can array (fairly efficiently think) , shove string (successfully?), when compare assembled string "known" string not return true. i've tried trimming off whitespace, , number returned string.length matches desired "known" string. doing wrong? thanks!
code: [select]
char serin[20]; //var hold bytes in read serialbuffer
string string1 = "";
string name = "paul";
string stringtrimmed = "";

void setup() {
 
 serial.begin(19200);


}

void loop () {
 for(int i=0; <20; i++){
   serin[i] = ' ';
 }
 string1 = "";
 //int choice1 = 0;
 //int choice2 = 0;
 //int choice3 = 0;
 //int choice4 = 0;
 boolean input1 = false;
 //boolean input2 = false;
 //boolean input3 = false;
 //boolean input4 = false;
 serial.println("please enter user name..");
 serial.flush();
 while (input1 ==false){
   int = 0;
   while(serial.available()) {    
       serin[i] = serial.read();
       serin[i+1] = '\0';
       i++;
       delay(2);
   }
   if(serin[0] != ' '){
     for(int =0; <20; i++){
       if(serin[i] != ' ' || serin[i+1] != ' '){
       serial.println(serin[i]);
       delay(100);
       }
     }
     for(int =0; i<20; i++){
       if(serin[i] != ' ' || serin[i+1] != ' '){
       string1 = string(string1 + serin[i]);
       }
     }
     string stringtrimmed = string1.trim();
     serial.println("");
     serial.print(stringtrimmed);
     serial.println("<-------- end of string");
     //serial.println(stringtrimmed.length());
     //serial.println(name.length());
     input1 = true;
   }
 }  
 if(stringtrimmed.equalsignorecase(name)){
     serial.println("");
     serial.println("welcome paul!...access granted");
 }
 delay(10000);
}
   

you have bit learn strings. string (lower case s) null terminated array of characters.
code: [select]
 for(int i=0; <20; i++){
   serin[i] = ' ';
 }

how many nulls needed terminate string? hint: isn't 20.

code: [select]
   while(serial.available()) {    
       serin[i] = serial.read();
       serin[i+1] = '\0';
       i++;
       delay(2);
   }

serial data transmission relatively slow. may through loop before sending application has finished sending data. need add sort of end-of-packet marker, , keep reading (or waiting) until end-of-packet marker arrives.

what code supposed doing?
code: [select]
     for(int =0; <20; i++){
       if(serin[i] != ' ' || serin[i+1] != ' '){
       serial.println(serin[i]);
       delay(100);
       }
     }

serial.println(serin); print entire array, first null.

what supposed do?
code: [select]
     for(int =0; i<20; i++){
       if(serin[i] != ' ' || serin[i+1] != ' '){
       string1 = string(string1 + serin[i]);
       }
     }

string1 = serin; sufficient.

add serial.print statements, print name (bracketed) , stringtrimmed (bracketed) before if test.
code: [select]
serial.print("name: >");
serial.print(name);
serial.print("<\n");
serial.print("stringtrimmed: >");
serial.print(stringtrimmed);
serial.print("<\n");


nothing jumps out cause of problem, prints narrow down issue.


Arduino Forum > Forum 2005-2010 (read only) > Software > Syntax & Programs > help with serial text recognition


arduino

Comments

Popular posts from this blog

CAN'T INSTALL MAMBELFISH 1.5 FROM DIRECTORY - Joomla! Forum - community, help and support

error: expected initializer before 'void'

CPU load monitoring using GPIO and leds - Raspberry Pi Forums