监控Arduino上的6个模拟输入引脚

时间:2012-01-24 12:47:21

标签: arduino

我正在为Arduino编写代码。它应该做的是:

必须监控6个模拟输入,如果有任何活动,请通过串行连接发送(有效引脚数+其引脚上的值)。

在串行连接的另一端,其他程序将对此给定信息做出决定。

如何做到最好?

2 个答案:

答案 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)。

这将无限期重复,但如果有活动,则仅提及发送数据。如果您需要更复杂的东西,请扩展您认为的“活动”(例如,如果自上次读取后模拟值发生了变化,您可能只想发送数据?)。