arduino串口通信直接输入数值的方法及代码
首先不知道有没有这样的库函数,总之下面的代码是有效的。有限繁琐,等待大神来瘦身呵呵。
我们知道Serial.read()读出来的是字符的ascii码,这样输入多位字符的时候便成了一个个分离开的单个字符。
我们只需要将这些带个字符按规律乘以10的乘方即可还原成需要的数值了。
这里以回车符 即'\r'为结束标志 可以根据需要修改 代码转自 uer8.com 大学生电子爱好者哈 分享给大家。char mes,i=0;
int real,zero=0;
int number; //number储存实际输入数值
int change(int);
int pow(int,int);
void setup(){
Serial.begin(9600);
}
void loop(){
while(Serial.available()>0){
mes=Serial.read();
//该部分代码用于记录末尾0的个数,然后最后添上
if(mes=='0') zero++;
else if(mes!='\r') zero=0;
//若需修改结束标志,可以更改'\r'
if(mes=='\r') {
i=0;
number=change(real);
for(;zero>0;zero--) number=number*10; //该循环用于将末尾丢失的0添上
Serial.println(real);
Serial.println(number); //number中储存实际输入数值,real是反过来的数值可以无视
real=0;
break;
}
real+=(mes-'0')*pow(10,i);
i++;
}
}
int pow(int n,int x){ //自制简易乘方函数,返回n^x。也可以试试调用math.h中的pow()
int val=1;
for(;x>0;x--) val=val*n;
return val;
}
int change(int a){ //读到的数值首末倒过来
int p,real;
int i=0,n=0;
for(p=a;p!=0;n++) p=p/10; //n记录数值的位数
for(;a!=0;i++){
p=a%10; //取余,一次取出个位
real+=p*pow(10,n-i-1);
a=a/10;
}
return real;
}其实还有一个思路可以试试:
将读到的字符按顺序存储到字符数组里,然后一个个取出来乘以10的乘方即可。
这样可以免去将数的头尾倒过来。
不过既然写出来了就懒得改了 谢谢分享
页:
[1]