Serial.parseInt() 和 Serial.read() 之间的实际区别?
Actual difference between Serial.parseInt() and Serial.read()?
我正在写一个关于逻辑门工作的简单程序(它是在 arduino 中编程的,输入是使用串行监视器获取的),我真的不明白 parseint 的工作,我读过我在网上阅读了很多文章,但仍然不是我清楚。
这是代码
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");
}
}
}
在 serial.available 之后插入上面的代码我使用 serial.read 读取 val 但如果我使用 serial.parseint 它不起作用,类似地在我使用 parseint 的每个门函数中(我知道它 returns 字符串的整数表示),如果我输入 serial.read 它不起作用。
有人能告诉我为什么会发生这种情况吗?这两者的实际差异是什么 b/w。
parseInt() 在超时或遇到非数字字符之前读取尽可能多的字符。它会将 assemble 那些 ascii 字符转换为数字并从 ascii 转换并返回一个实际的 int。
read() 只是从串行缓冲区中读取一个字符,然后 returns 它(提升为一个 int)或 -1 如果没有可读取的内容。 read 不会从 ascii 转换任何内容,因此如果您从串行监视器发送“1”,它将读取 49(“1”的 ascii 代码)。
在您的代码中,您将读取的内容与 ascii 值进行比较,因为您将其与“1”进行比较。如果它通过 parseInt 转换为数字,那么它实际上是 1 而不是 49。1 不等于 49,所以这不起作用。
在您使用 parseInt 的其他函数中,您正在比较这些东西并将它们视为数字而不是 ascii 字符。所以你需要parseInt。
我正在写一个关于逻辑门工作的简单程序(它是在 arduino 中编程的,输入是使用串行监视器获取的),我真的不明白 parseint 的工作,我读过我在网上阅读了很多文章,但仍然不是我清楚。 这是代码
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");
}
}
}
在 serial.available 之后插入上面的代码我使用 serial.read 读取 val 但如果我使用 serial.parseint 它不起作用,类似地在我使用 parseint 的每个门函数中(我知道它 returns 字符串的整数表示),如果我输入 serial.read 它不起作用。 有人能告诉我为什么会发生这种情况吗?这两者的实际差异是什么 b/w。
parseInt() 在超时或遇到非数字字符之前读取尽可能多的字符。它会将 assemble 那些 ascii 字符转换为数字并从 ascii 转换并返回一个实际的 int。
read() 只是从串行缓冲区中读取一个字符,然后 returns 它(提升为一个 int)或 -1 如果没有可读取的内容。 read 不会从 ascii 转换任何内容,因此如果您从串行监视器发送“1”,它将读取 49(“1”的 ascii 代码)。
在您的代码中,您将读取的内容与 ascii 值进行比较,因为您将其与“1”进行比较。如果它通过 parseInt 转换为数字,那么它实际上是 1 而不是 49。1 不等于 49,所以这不起作用。
在您使用 parseInt 的其他函数中,您正在比较这些东西并将它们视为数字而不是 ascii 字符。所以你需要parseInt。