我有一个arduino程序,我正在努力制作。
目的: 从2到11读取数字引脚。 打印针号," 1"如果引脚为高电平,或者" 0"如果引脚很低。
这是我试图做的事情:
void loop() {
for(int i = 2; i<12; i++){
if(digitalRead(i) == HIGH){
Serial.println(i + "1");
}
if(digitalRead(i) == LOW){
Serial.println(i + "0");
}
}
}
输出应&#34; 21&#34;如果引脚2是HIGH
,或者#34; 20&#34;如果引脚2是LOW
。这同样适用于其他引脚。
相反,所有打印的内容都是
Ò>Tm_°
>Tm_°
>Tm_°
Tm_°
Ò>Tm_°
>Tm_°
>Tm_°
Tm_°
关于如何让它发挥作用的任何建议?
答案 0 :(得分:1)
您的代码会发生什么?
Serial.println(2 + "1")
在C中不会给你21
(在这种情况下用于Arduino)。
您正在尝试直接连接整数和字符串,但它在C
(或几乎编程语言)中无效。
<强>解决方案:强>
void loop() {
char pin_display;
for(int i = 2; i<12; i++){
if(digitalRead(i) == HIGH){
pin_display = i + 0x30 //convert to Ascii
Serial.print(pin_display);
Serial.print("1");
}
...
答案 1 :(得分:1)
如其他答案所述,问题发生在Serial.println(i + "1")
。此表达式计算为 int + pointer ,导致指针损坏。解决这个问题的一个简单方法是从整数变量Serial.println(String(i)+"1")
创建 String 。此表达式计算为 String + pointer ,从而生成有效的 String 对象。
更正后的代码:
void loop() {
for(int i = 2; i<12; i++){
if(digitalRead(i) == HIGH){
Serial.println(String(i) + "1");
}
if(digitalRead(i) == LOW){
Serial.println(String(i) + "0");
}
}
}