Как изменить значение переменной с помощью математики?

Я дошел до урока 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 в последовательном мониторе. Как мне сделать это правильно?

, 👍-1


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.

,

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 Bonet

https://gph.is/1dogvB3, @Maitland