Почему считывание аналогового контакта дает разные результаты при взаимодействии с 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.
@acester123, 👍1
1 ответ
Лучший ответ:
Вы не предоставили схему подключения Arduino.
Однако, если ничего не подключено к контакту, т. е. он не подключен к земле или напряжению питания, то вход будет плавающим. Это означает, что просто поднеся руку к Arduino, analogRead()
выдаст другое значение, чем когда руки нет рядом с ним.
Я рискну предположить, что если вы запустите оба набора кода несколько раз, то вы каждый раз будете получать разные ответы, если начнете размахивать рукой вокруг Arduino.
Сначала попробуйте это, а затем привяжите вход к HIGH
или LOW
, а затем повторите предыдущий эксперимент.
Во втором случае результаты должны быть последовательными и одинаковыми как в Arduino, так и в Processing.
Однако, согласно вашему комментарию, это не ваша проблема, поскольку ваши входные данные не являются плавающими.
Я думаю, что проблема на самом деле в следующем:
Даже при установленном Firmata приложению Processing необходимо определить режим выводов для ВСЕХ указанных выводов, сообщив экземпляру Arduino, что xPin, yPin и zPin являются АНАЛОГОВЫМИ выводами.
Источник: Re: Проблема Firmata с analogRead в библиотеке обработки
Глядя на ваш код обработки, пины не определены. Вам нужно это сделать.
При использовании кода Arduino нет необходимости определять аналоговые контакты.
- Чтение частоты ввода в цифровых выводах
- Функция AnalogRead Возможности считывания напряжения переменного тока
- Arduino измерительный высоковольтный электрический забор
- Измерение напряжения переменного тока с использованием Arduino Uno
- Как мне измерить аналоговый сигнал на моем Arduino Mega, который имеет как положительное, так и отрицательное напряжение?
- Измеренное напряжение выше, чем AREF
- NodeMCU - Vin контакт как выход 5V?
- Отправка значения с одного Arduino на другой