Фактическая разница между Serial.parseInt () и Serial.read ()? - PullRequest
0 голосов
/ 20 июня 2020
• 1000 мне непонятно. вот код
boolean a,b;
int val;

void setup(){
Serial.begin(9600);
  Serial.setTimeout(2000);
Serial.println("Enter what logic you want to implement: \nFor AND enter 1\n For NAND enter 2\n For OR enter 3\n For NOR enter 4\n For EX- OR enter 5\n For EX-NOR enter 6\n For NOT enter 7");
}

void loop(){
if(Serial.available()>0){
val= Serial.read();
if(val=='1')
{
//AND
Serial.println("SELECTED AND GATE:");
Serial.println("Enter your inputs:");
a=Serial.parseInt(); 
Serial.println(a); 
b=Serial.parseInt(); 
Serial.println(b);
if(a && b){
Serial.print("OUTPUT:"); 
Serial.println("1"); 
}
else{
Serial.print("OUTPUT:"); 
Serial.println("0");
}
}
else if(val=='2'){
//NAND
Serial.println("SELECTED NAND GATE:");
Serial.println("Enter your inputs:"); 
a=Serial.parseInt(); 
Serial.println(a); 
b=Serial.parseInt(); 
Serial.println(b);
if(a && b){
Serial.print("OUTPUT:"); 
Serial.println("0"); 
} 
else{
Serial.print("OUTPUT:"); 
Serial.println("1");
}
}
else if(val=='3'){
//OR
Serial.println("SELECTED OR GATE:");
Serial.println("Enter your inputs:");
a=Serial.parseInt();
Serial.println(a); 
b=Serial.parseInt();
Serial.println(b);
if(a || b){
Serial.print("OUTPUT:");
Serial.println("1"); 
} 
else{
Serial.print("OUTPUT:"); 
Serial.println("0");
}
}
else if(val=='4'){
//NOR
Serial.println("SELECTED NOR GATE:"); 
Serial.println("Enter your inputs:");
a=Serial.parseInt();
Serial.println(a); 
b=Serial.parseInt(); 
Serial.println(b); 
if(a || b){
Serial.print("OUTPUT:"); 
Serial.println("0"); 
} 
else{
Serial.print("OUTPUT:"); 
Serial.println("1");
}
}
else if(val=='5'){
// EX-OR
Serial.println("SELECTED EX-OR GATE:");
Serial.println("Enter your inputs:");
a=Serial.parseInt(); 
Serial.println(a);
b=Serial.parseInt(); 
Serial.println(b); 
if(a == b){
Serial.print("OUTPUT:"); Serial.println("0"); 
} 
else{
Serial.print("OUTPUT:"); Serial.println("1");
}
}
else if(val=='6'){
//EX-NOR
Serial.println("SELECTED EX-NOR GATE:");
Serial.println("Enter your inputs:");
a=Serial.parseInt();
Serial.println(a); 
b=Serial.parseInt(); 
Serial.println(b); 
if(a == b){
Serial.print("OUTPUT:");
Serial.println("1"); 
} 
else{
Serial.print("OUTPUT:"); 
Serial.println("0");
}
} 
else if(val=='7'){
//NOT
Serial.println("SELECTED NOT GATE:");
Serial.println("Enter your inputs:"); 
a=Serial.parseInt(); 
Serial.println(a); 
if(a==1){
Serial.print("OUTPUT:"); Serial.println("0");
} 
else{
Serial.print("OUTPUT:"); Serial.println("1");
}
} 
else{
Serial.println("No gate is assigned to this number");
}
}
}

int приведенный выше код после serial.available ive использовал serial.read для чтения val, но если я использую serial.parseint, он не работает, аналогично в каждой функции ворот, используемой ive parseint ( Я знаю, что он возвращает целочисленное представление строки), и если я поставлю serial.read, это не сработает. может кто-нибудь, пожалуйста, скажите разницу, почему это происходит, и каковы фактические различия между этими двумя.

1 Ответ

0 голосов
/ 20 июня 2020

parseInt () читает столько символов, сколько может, прежде чем истечет время ожидания или встретит не-di git символ. Он соберет эти символы ascii в число, преобразует их из ascii и вернет вам реальный int.

read () просто считывает один символ из последовательного буфера и возвращает его (повышается до int) или -1, если читать нечего. read не преобразует ничего из ascii, поэтому, если вы отправите '1' с последовательного монитора, он прочитает 49 (код ascii для '1').

В вашем коде вы сравниваете то, что вы читаете, с значение ascii, так как вы сравниваете с '1'. Если он будет преобразован в число с помощью parseInt, тогда это будет фактически 1, а не 49. 1 не равно 49, так что это не сработает.

В других ваших функциях, где вы используете parseInt, вы сравниваете эти вещи и обрабатываете их как числа, а не как символы ascii. Итак, вам нужен parseInt.

...