Arduino -附加int值到字符串的末尾,用于连接变量
Arduino - Append int value to the end of a string for concatenated variables
我想通过顺序输入来检查它们的状态并照亮LED来扩展Arduino按钮和ForLoop教程,如果它们中的任何一个被按下。最后,我只想在一切开始之前对输入进行一次扫描,并且在主程序中关闭(或短路)的任何东西都将从旋转中取出。
如果引脚是顺序的,我就从第一个引脚开始执行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.
提前感谢!
由于Arduino实际上提供了一个StringAdditonOperator http://arduino.cc/en/Tutorial/StringAdditionOperator您可以使用:
for(int x = 1; x <=5; x++) {
String desiredString = "Button"+x;
Serial.println(desiredString);
}
将输出:
Button1
Button2
...
根据我对注释的理解,你想做这样的事情:
int buttonArray[3] = {7,15,3}; //Or on whatever pins your buttons are
// Setup code and anything else you need goes here
void loop() {
for(int x = 0; x <= 3; x++) {
int buttonState = digitalRead(buttonArray[x]);
digitalWrite(ledPin,buttonState);
}
}
但要注意,这将改变led引脚的状态,只到最后一个按钮状态读取。
明白了。这很有效。谢谢。
const int myButton1 = 7;
const int myButton2 = 15;
const int myButton3 = 3;
const int myButton4 = 27;
const int myButton5 = 22;
const int myButton6 = 18;
const int myButton7 = 23;
const int myButton8 = 11;
const int myOutput1 = 8;
const int myOutput2 = 16;
const int myOutput3 = 4;
const int myOutput4 = 28;
const int myOutput5 = 24;
const int myOutput6 = 19;
const int myOutput7 = 25;
const int myOutput8 = 12;
是
int myButton[8]={7,15,3,27,22,18,23,11};
int myOutput[8]={8,16,4,28,24,19,25,12};
然后将这个添加到setup
for (int i=0;i<8;i++) {
pinMode(myButton[i], INPUT);
pinMode(myOutput[i], OUTPUT);
}
相关文章:
- 没有用于初始化C++中的变量模板的匹配构造函数
- 将十六进制值设置为用于填充的字符变量时出现问题
- 与不同变量类型相比,用于变量的 Clang AST 匹配器
- 在一个子程序中输入的变量用于C++中的另一个子程序
- 如何将一个变量用于父类和派生类
- 将其他函数中的变量用于主函数C++
- 是否有用于"go to variable type definition" C++中"auto"变量的 Visual Studio 键盘快捷方式?
- 在运行时将更改的环境变量应用于 QApplication
- 输出(用于 GraphViz)提升图顶点及其属性,使用具有私有变量的类作为捆绑属性
- 用于浮点值的最佳变量类型
- 用于在运行时选择变量的 C++ 预处理器指令
- STD ::原子与静态变量用于线程同步
- 为什么保守调整大小不适用于函数中的 Ref 变量?
- 更改用于定义顶点的变量
- 回调函数,用于在同一对象中设置私有变量
- 为什么 std::get 不适用于变量?
- C 编译器可以执行用于返回值的命名const变量的RVO
- TBB Parallel_用于计数,增量变量不准确
- 元组 std::get() 不适用于变量定义的常量
- 模板约束是否可用于变量模板