Монитор 6 аналоговых входов на Arduino - PullRequest
3 голосов
/ 24 января 2012

Я пишу код для Arduino.Что он должен сделать:

Он должен контролировать 6 аналоговых входов и, если есть какие-либо действия на любом из них, отправить (число активных выводов + значение на его выводе) через последовательное соединение.

На другой стороне последовательного соединения другая программа примет решение по данной информации.

Как лучше это сделать?

Ответы [ 2 ]

3 голосов
/ 24 января 2012

Одно из решений может быть таким:

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);

    }

}

АЦП хранит 10-битные значения.Максимальное значение от АЦП составляет 1023 ([2 ^ 10-1]).Модуль для последовательной связи отправляет байты данных, поэтому вам нужно масштабировать от 1023 до 255. Уравнение равно (255/1023) * currentAnalogValue (поэтому оно равно 0,249266 * currentAnalogValue).В вашем компьютерном приложении вам нужно обратное уравнение 1023/255 * receiveByte, чтобы получить исходное значение.

2 голосов
/ 25 января 2012

Связь между Arduino и другим устройством (я полагаю, ПК здесь) является самой простой (и самой легкой для отладки), если вы используете текстовый интерфейс. Например:

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).

Это будет повторяться бесконечно, но вы упоминаете только об отправке данных, если есть активность. Если вам нужно что-то более сложное, пожалуйста, подробно расскажите о том, что вы считаете «деятельностью» (например, может быть, вы хотите отправлять данные только в том случае, если аналоговое значение изменилось с момента последнего чтения?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...