Всем привет. Сделал вольтметр на SSD1306, но возникло ряд вопросов как повысить его точность и как вывести в нижней строке при напряжении от 2 до 3 вольт надпись STOP и на один цифровой выход для индикации светодиодом
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
int analogInput = 0; // переменная для удобства инициализации и работы с аналог. портом 0
float vout = 0.0; // переменная с значением выходного напряжения
float vin = 0.0; // переменная с результатом измерений
float R1 = 100000.0; // сопротивление R1
float R2 = 10000.0; // сопротивление R2
int value = 0; // переменная хранения данных
Adafruit_SSD1306 display(OLED_RESET);
void setup(){
pinMode(analogInput, INPUT); // инициализируем аналоговый порт 0, как вход
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64)
delay(20);
display.clearDisplay();}
void loop() { // производим чтение аналогового сигнала и выводим на дисплей
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
value = analogRead(analogInput);// читаем аналоговый сигнал, с аналог. порта - 0
vout = (value * 5.0) / 1024.0; // не забываем про внесение поправки (5.0 - это идеальный вариант,хотя все возможно)
vin = vout / (R2/(R1+R2)); // в переменной будет значение входного напряжения
if (vin<0.09) // проверка, для получ. 0
{
vin=0.0; // обнуляем нежелательное значение
}
display.print("U = ");
display.print(vin);
display.println(" ");
display.println("volt");
display.display();
delay(500);
}
Для точности надо точные резисторы и в 27 строке 5.0 изменить на реально измеренное значение питания. Еще - если вы знаете пределы измеряемого напряжения, то можно изменить или совсем убрать делитель из резисторов.
Для Stop:
между 36 и 37 вставить проверку напряжения и в зависимости от результата выводить надпись и зажигать диод или выводить пробелы и тушить диод.
if ((vin>=2.00) && (vin<=3.00))
{
Печатаем Stop
Зажигаем диод
} else
{
Печатаем несколько пробелов что бы затереть Stop
Гасим диод
}