Почему считывание аналогового контакта дает разные результаты при взаимодействии с Processing?

Меня интересует измерение напряжения через аналоговый вывод (A6). Когда я использую Arduino IDE для печати результатов через последовательный порт, я получаю значения около 300.

Вот код

void setup(){
   Serial.begin(57600);
}

void loop(){
   Serial.println(analogRead(A6));
   delay(50);
}

Когда я пытаюсь запустить эквивалентную программу с использованием Processing и подключаю ее через Firmata и соответствующую библиотеку, я получаю значения около 900.

Вот код обработки:

import cc.arduino.*;
import processing.serial.*;

Arduino arduino;

void setup(){
   arduino = new Arduino(this,Arduino.list()[0], 57600);
   delay(2000);
}

void draw(){
  System.out.println(arduino.analogRead(6));
  delay(50);
}

Кто-нибудь знает, в чем может быть проблема? Наверное, мне лучше доверять значениям, которые дает Arduino напрямую, без интерфейса, верно?

Вывод подключен к цепи с напряжением питания. Я также попробовал прочитать значения напрямую с помощью Serial в Processing (то есть без использования библиотеки cc.arduino.*), и это показало мне значения около 300. Так что я предполагаю, что разница вызвана методом arduino.analogRead(). Я озадачен, является ли это ошибкой в библиотеке или чем-то еще.

Проблема, похоже, в том, что я неправильно инициализирую пины. Но звонок

arduino.pinMode(6,Arduino.ANALOG);

в методе настройки ничего не происходит, как и Arduino.PWM, SERVO и любая комбинация, которую я пробовал. Я думал, что, возможно, Processing пытался назначить D6 как аналоговый вместо A6, но изменение значения на 20 (так как это номер пина согласно этому) просто вызвало OutOfBoundsException.

, 👍1


1 ответ


Лучший ответ:

1

Вы не предоставили схему подключения Arduino.

Однако, если ничего не подключено к контакту, т. е. он не подключен к земле или напряжению питания, то вход будет плавающим. Это означает, что просто поднеся руку к Arduino, analogRead() выдаст другое значение, чем когда руки нет рядом с ним.

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

Сначала попробуйте это, а затем привяжите вход к HIGH или LOW, а затем повторите предыдущий эксперимент.

Во втором случае результаты должны быть последовательными и одинаковыми как в Arduino, так и в Processing.


Однако, согласно вашему комментарию, это не ваша проблема, поскольку ваши входные данные не являются плавающими.

Я думаю, что проблема на самом деле в следующем:

Даже при установленном Firmata приложению Processing необходимо определить режим выводов для ВСЕХ указанных выводов, сообщив экземпляру Arduino, что xPin, yPin и zPin являются АНАЛОГОВЫМИ выводами.

Источник: Re: Проблема Firmata с analogRead в библиотеке обработки

Глядя на ваш код обработки, пины не определены. Вам нужно это сделать.

При использовании кода Arduino нет необходимости определять аналоговые контакты.

,