Как изменить значение переменной с помощью математики?
Я дошел до урока 11 в руководстве TopTechBoy: https://www.youtube.com/watch?v=afurKLOqqSg
Урок 11: http://www.toptechboy.com/arduino/lesson-11-arduino-circuit-to-dim-led-with-potentiometer/
Я могу использовать analogRead() для заполнения переменной значением и Serial.printld, но я хочу иметь возможность увеличить это целое число на × 4,887585533
int pinV; // Эта пустая переменная будет заполнена целым значением от 0 до 1023.
int receiverPin=0; // Это вывод RX, «приемник», который подключается к интерфейсу USB-Serial.
int ResultsPerSec=500; // Arduino считывает и выводит результат каждые полсекунды.
float printingValue; // Еще одна пустая переменная, которой присваивается значение pinV для умножения и печати.
void setup() {
Serial.begin(9600);
pinMode(receiverPin,INPUT);
}
void loop() {
pinV=analogRead(receiverPin);
// Каждый вольт имеет значение 204,6 (4,88 мВ на целое число из 1023 доступных)
printingValue = (pinV *4.887585533);
// 5000 мВ делим на 1023 возможных значения = 4,887585533 мВ на целое число
// Arduino может считать от 0 до 5 Вольт с шагом 4,887585533 мВ.
// 1000 мВ делим на 4,887585533 мВ = 204,599999989 целых чисел из 1023 доступных, равных 1 В
// Каждое целое число из 1023 возможных значений, которые выводит analogRead(), можно увеличить на 4,887585533
// Здесь показано реальное напряжение в милливольтах (мВ).
Serial.println(printingValue);
delay(ResultsPerSec);
}
Это на самом деле приемлемо с точки зрения IDE, но это не работает так, как задумано. Я получаю выходные данные в тысячах, когда он должен выводить 0 в последовательном мониторе. Как мне сделать это правильно?
@Maitland, 👍-1
1 ответ
Лучший ответ:
Я только что получил ответ от кого-то из одной из веток на https://8ch.net/tech/catalog.html
Оказывается, цифровые выводы (0,1,2,3,4,5,6,7,8,9,10,11,12,13) не способны считывать аналоговые напряжения. Вместо этого нужно использовать выводы A0–A5. Кроме того, если напряжение не подается, Arduino будет выводить случайные числа в Serial Monitor.
- Избегайте математических вычислений с плавающей запятой, чтобы ускорить Arduino
- Float печатается только 2 десятичных знака после запятой
- Отправка и получение различных типов данных через I2C в Arduino
- Как добавить гистерезис к пороговым значениям?
- Как вывести истинное аналоговое напряжение на выходной контакт
- Разные и самые быстрые способы вычисления синусов и косинусов в Arduino
- Как именно работает двойной выход 5В и 3,3В на Uno R3?
- Ввод и сохранение цифр с клавиатуры
0 как параметр analogRead - это A0. Вы использовали A0. Если вывод не подключен к цепи или земле, он называется «плавающим»., @Juraj
На странице, на которую вы ссылаетесь, чётко показано, что для считывания данных используется аналоговый вывод A0. Похоже, вы посчитали, что вывод 0 (на другой стороне платы) будет приемлемой альтернативой., @Nick Gammon
Здорово, что я могу превратить свой Arduino в вольтметр (при условии, что напряжение ниже 5 В). Можно прикоснуться двумя проводами к концам батарейки АА и увидеть её напряжение. Но интересно, верны ли расчёты? Говорят, что **float** может хранить только до 7 цифр после запятой (4,887585533 считается девятью)., @Maitland
1. Напряжение, которое вы должны вывести, равно
5e3/1024*analogRead(A0). Не обращайте внимания на руководство по использованию 1023: единственный авторитетный источник — это техническое описание. 2. Числа с плавающей точкой не содержат десятичных дробей: они двоичные, с [машинным эпсилоном](https://en.wikipedia.org/wiki/Machine_epsilon) 2^(−23) ≈ 1,19e-7. Отношение 5e3/1024 является точным числом с плавающей точкой. 5e3/1023 — нет, и компилятор округляет его до ближайшего числа с плавающей точкой, а именно 4,88758563995361328125. Ошибка округления несущественна, учитывая низкое разрешение измерения., @Edgar Bonethttps://gph.is/1dogvB3, @Maitland