我正在为Arduino编写代码。它应该做的是:
必须监控6个模拟输入,如果有任何活动,请通过串行连接发送(有效引脚数+其引脚上的值)。
在串行连接的另一端,其他程序将对此给定信息做出决定。
如何做到最好?
答案 0 :(得分:3)
一种解决方案可能是这样的:
int analogPin1 = 1;
int analogPin2 = 2;
int analogPin3 = 3;
int analogPin4 = 4;
int analogPin5 = 5;
int analogPin6 = 6;
int val = 0;
byte sendAnalog=0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
val=analogRead(analogPin1);
if(val>0){
Serial.print("1");
sendAnalog=val*0.24926697;
Serial.print(sendAnalog,BYTE);
}
val=analogRead(analogPin2);
if(val>0){
Serial.print("2");
sendAnalog=val*0.24926697;
Serial.print(sendAnalog,BYTE);
}
val=analogRead(analogPin3);
if(val>0){
Serial.print("3");
sendAnalog=val*0.24926697;
Serial.print(sendAnalog,BYTE);
}
val=analogRead(analogPin4);
if(val>0){
Serial.print("4");
sendAnalog=val*0.24926697;
Serial.print(sendAnalog,BYTE);
}
}
AD转换器存储10位值。 AD转换器的最大值为1023([2 ^ 10-1])。用于串行通信的模块正在发送数据字节,因此您需要缩放1023到255. Equation是(255/1023)* currentAnalogValue(因此它是0.249266 * currentAnalogValue)。在您的计算机应用程序中,您需要反向等式1023/255 * receivedByte来接收原始值。
答案 1 :(得分:2)
如果你使用基于文本的界面,Arduino和另一台设备之间的通信(我假设这里有一台PC)最简单(也是最简单的调试)。例如:
void setup() {
Serial.begin(9600);
}
void loop() {
for (int i = 0; i < 6; i++) {
Serial.print(i);
Serial.print(":");
Serial.println(analogRead(i));
}
}
这将连续从模拟端口读取值并将其发送(如文本),如下所示:
0:456
1:26
2:0
3:1023
4:321
5:1010
端口编号从0到5,然后冒号(:
)字符作为分隔符发送,然后是模拟值(从0到1023)。
这将无限期重复,但如果有活动,则仅提及发送数据。如果您需要更复杂的东西,请扩展您认为的“活动”(例如,如果自上次读取后模拟值发生了变化,您可能只想发送数据?)。