【发布时间】:2014-05-23 18:55:02
【问题描述】:
我想通过顺序输入来扩展 Arduino 按钮和 ForLoop 教程,以检查它们的状态并在按下任何一个时点亮 LED。最终,我只想在一切开始之前对输入进行一次单次扫描,并且任何关闭(或短路)的东西都将从主程序的旋转中取出。
如果引脚是连续的,我会从第一个引脚开始执行 buttonIn++。不幸的是,输入引脚不是连续的,但名称是连续的。
我只想将 int "1" 添加到 char buttonIn = "myButton" 的末尾并 ++ 字符串中的数字。这似乎不像我想象的那么容易。
现在,我可以很容易地用 PHP 做到这一点
<?php
$myButton1="7";
$myButton2="15";
$myButton3="3";
$myButton4="11";
$myButton5="8";
for ($i=0;$i<=5;$i++) {
$buttonIn="myButton".$i;
echo $buttonIn." = ".$$buttonIn."\n";
}
?>
然后输出:
myButton1 = 7
myButton2 = 15
myButton3 = 3
myButton4 = 11
myButton5 = 8
完美,我可以得到变量名和它的值。
但是,这不适用于 C。注释掉的行是我迄今为止尝试过的。希望其他人有更好的想法来做到这一点,而不必在预运行循环中指定每个引脚,从而节省空间和时间。
const int myButton1 = 7;
const int myButton2 = 15;
const int myButton3 = 3;
const int ledPin = 13;
int buttonState = 0;
void setup() {
pinMode(myButton1, INPUT);
pinMode(myButton2, INPUT);
pinMode(myButton3, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
char buttonIn[13];
for (int x=1;x<=5;x++) {
// char buttonIn = "OSD1button",x;
// char buttonIn[13]="OSD1button",x;
// int sprintf(str, "OSD1button%d",x);
// sprintf(buttonIn,"OSD1button%d",x);
// strncat(buttonIn,x,2);
// char nameIn[12]="OSD1button";
//buttonIn=nameIn + x;
// sprintf(buttonIn, "%d", x);
char OSD="OSD1button";
// buttonIn=OSD+itoa(x,OSD,13);
strncpy(buttonIn,OSD,x);
buttonState = digitalRead(buttonIn);
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin,LOW);
}
}
}
这是当前的错误信息:
Arduino: 1.5.6-r2 (Windows 7), Board: "Arduino Due (Programming Port)"
OSD_Test.ino: In function 'void loop()':
OSD_Test:67: error: invalid conversion from 'const char*' to 'char'
OSD_Test:69: error: invalid conversion from 'char' to 'const char*'
OSD_Test:69: error: initializing argument 2 of 'char* strncpy(char*, const char*, size_t)'
OSD_Test:70: error: invalid conversion from 'char*' to 'uint32_t'
OSD_Test:70: error: initializing argument 1 of 'int digitalRead(uint32_t)'
This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
提前致谢!
【问题讨论】:
标签: c++ string arduino int concatenation