我正试图从一个简单的万用表电路中收集数据,但是我的串行端口没有返回数字,而是输出随机的Unicode符号。
这是我的代码:
void setup() {
pinMode(2, INPUT);
Serial.begin(1200);
int prevVal = 0;
int timeVar = 0;
}
void loop() {
int digisensorVal = digitalRead(2);
int anasensorVal = analogRead(2) * 100;
Serial.print("D" + digisensorVal);
Serial.print(",");
Serial.println("A" + anasensorVal);
delay(250);
}
这是输出示例:
⸮L/⸮U⸮⸮⸮⸮⸮?⸮⸮⸮w⸮e⸮⸮⸮⸮1⸮⸮⸮⸮}⸮J⸮⸮⸮⸮⸮oޝ⸮Y⸮⸮⸮|s⸮⸮}⸮⸮ ⸮⸮⸮⸮⸮є6x⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮y[⸮⸮⸮⸮⸮?⸮v⸮=⸮⸮⸮-⸮^⸮Y_z⸮⸮d⸮⸮⸮%ܿjV⸮〜O⸮⸮ G⸮⸮⸮⸮e⸮⸮U⸮⸮〜+0⸮⸮⸮hh⸮s⸮ ⸮c⸮⸮⸮+⸮⸮io3:⸮5kλϣ ,⸮g⸮⸮⸮⸮⸮>⸮⸮ ⸮yꨛ⸮v⸮N⸮⸮⸮=⸮⸮=⸮⸮⸮l⸮⸮g⸮g⸮⸮⸮⸮⸮s⸮U⸮⸮⸮⸮⸮⸮=⸮ܳt⸮⸮⸮}⸮⸮'⸮˾⸮k ⸮⸮⸮⸮⸮⸮⸮{⸮ᦒ⸮⸮⸮⸮ϓ߿gVp⸮⸮⸮⸮Y⸮⸮O⸮/F⸮〜⸮⸮⸮⸮q4⸮⸮_f⸮⸮⸮⸮⸮I|P⸮⸮⸮NE ⸮〜u⸮7⸮⸮⸮⸮g⸮⸮G〜⸮⸮⸮⸮__ @⸮⸮⸮⸮⸮⸮⸮C⸮⸮⸮k⸮T⸮o/⸮t^⸮〜⸮{}⸮w⸮⸮⸮ ⸮'h=⸮ϸ〜⸮⸮⸮⸮⸮⸮⸮?⸮s⸮s⸮l⸮o5⸮^⸮⸮⸮w9{]⸮⸮q〜⸮⸮⸮,⸮⸮⸮c ⸮2_⸮⸮⸮⸮o6k)ޏ⸮k⸮ׇ⸮i⸮⸮m⸮⸮:⸮⸮⸮⸮|⸮⸮??⸮⸮⸮⸮3⸮⸮⸮⸮⸮⸮⸮⸮⸮^⸮⸮ڏ⸮⸮ ⸮⸮l⸮⸮⸮⸮⸮⸮H⸮〜⸮>⸮⸮z⸮⸮⸮⸮⸮OwM;⸮⸮l⸮⸮ ⸮sr⸮S⸮⸮}⸮⸮⸮⸮ׂٶ⸮⸮〜⸮{⸮⸮]⸮⸮⸮⸮⸮⸮⸮⸮i⸮⸮⸮⸮⸮[⸮⸮⸮⸮⸮Nz⸮⸮⸮⸮⸮k⸮⸮⸮ ⸮⸮g⸮k⸮⸮⸮i3ɵ⸮⸮〜⸮⸮⸮⸮⸮]⸮2ϪWކ⸮i>⸮gu⸮⸮ӵ⸮?⸮̥⸮⸮m⸮⸮|⸮⸮⸮⸮Wɓ⸮⸮⸮[⸮⸮O㠑_⸮⸮⸮⸮⸮⸮⸮⸮⸮/⸮M⸮⸮_⸮⸮gwF⥷⸮⸮yn⸮P⸮⸮-⸮⸮⸮N⸮⸮⸮=⸮⸮⸮⸮⸮⸮⸮>J⸮ }⸮⸮&⸮⸮⸮C⸮HG翎⸮/⸮⸮⸮⸮}⸮⸮⸮^⸮⸮,⸮)[⸮⸮⸮⸮⸮⸮У⸮⸮}⸮ޯ⸮⸮⸮⸮7⸮ ⸮⸮⸮ó⸮U:〜⸮⸮ns⸮⸮z⸮⸮n⸮⸮G|ӳ⸮⸮}⸮⸮L⸮〜⸮⸮KI⸮⸮G⸮⸮⸮⸮⸮⸮ӏ⸮⸮⸮⸮u 6⸮W⸮⸮⸮⸮Ӊ۾⸮⸮9⸮zVΆ럿⸮⸮⸮ۘ⸮⸮T⸮<⸮⸮⸮⸮⸮⸮⸮/⸮⸮⸮⸮xG〜⸮V⸮⸮u+N⸮⸮ݫ⸮ ⸮⸮cv〜⸮⸮⸮W⸮
答案 0 :(得分:1)
Serial.println("A" + anasensorVal);
这需要分两行完成。您将传感器值添加到指针值,并在累加的内存位置发送任何指向的垃圾。它绝对不是您想要的。这不是Java。您不能只添加带有+的字符串。
答案 1 :(得分:1)
使用
Serial.println("A" + anasensorVal);
您实际上并不是在打印数字,而是从内存中某个位置开始的字符串,其起始地址为“ A” +“ anasensorVal”的值,因此您将得到一些垃圾信息。
您正在尝试向char的指针添加整数(并且可能会超出字符串“ A”的末尾),这不是您想要的。
在arduino上格式化输出的常用方法:
Serial.print("A");
Serial.println(anasensorVal);
或者,您可以为Serial对象定义一个流运算符,请参见https://playground.arduino.cc/Main/StreamingOutput,然后再像这样格式化输出:
Serial << "A" << anasensorVal;
答案 2 :(得分:0)
在Serial.print
中添加一个int类型和字符类型会弄乱您要打印到监视器的数据格式。