Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 从串行存储器中读取9位整数_Arduino - Fatal编程技术网

Arduino 从串行存储器中读取9位整数

Arduino 从串行存储器中读取9位整数,arduino,Arduino,我正在准备一个Arduino项目。我想取一个学生号,它是9位数字,比如140201004,我想用它作为ID。但是当我写入串行监视器时,它被转换为19500 我做错了什么 int readnumber(无效){ int num=0; 布尔值validnum=false; 而(1){ 而(!Serial.available()); char c=Serial.read(); if(isdigit(c)){ num*=10; num+=c-'0'; 安定=true; }否则如果(安定){ 返回num;

我正在准备一个Arduino项目。我想取一个学生号,它是9位数字,比如140201004,我想用它作为ID。但是当我写入串行监视器时,它被转换为19500

我做错了什么

int readnumber(无效){
int num=0;
布尔值validnum=false;
而(1){
而(!Serial.available());
char c=Serial.read();
if(isdigit(c)){
num*=10;
num+=c-'0';
安定=true;
}否则如果(安定){
返回num;
}
}
}
void循环(){
延迟(100);
如果(Serial.available()>0){
data=Serial.read();
如果(数据=='1'){
Serial.print(“注册ID#”);
int id=readnumber();
Serial.println(id);
获取指纹注册(id);
}
如果(数据=='4'){
获取指纹ID();
}
}
}

int
是一个16位有符号整数,数字可以从
−32768
32767

您的号码显然太大了

二进制中的
140201004
0000101000 01011011 01001100 00101100
,如果您只取较低的16位,您将得到
01001100 00101100
,正如您所看到的那样,它是
19500

为了能够存储该数字,您需要一个32位整数。因为你不需要负数,所以它应该是无符号的

你应该替换

int num=0;

unsigned long num=0;

uint32\u t num=0;

同时替换函数的返回类型。

int
是一个16位有符号整数,数字可以从
−32768
32767

您的号码显然太大了

二进制中的
140201004
0000101000 01011011 01001100 00101100
,如果您只取较低的16位,您将得到
01001100 00101100
,正如您所看到的那样,它是
19500

为了能够存储该数字,您需要一个32位整数。因为你不需要负数,所以它应该是无符号的

你应该替换

int num=0;

unsigned long num=0;

uint32\u t num=0;
同时替换函数的返回类型