#include <Wire.h>
#include<LiquidCrystal_I2C.h>
float druck =0;
// поэтому число с запятой и 2-мя цифрами после запятой
float DRUCK=0; // поэтому число с запятой и 2-мя цифрами после запятой
LiquidCrystal_I2C lcd(0x27, 16, 2); //+ to +, - to -, SDA to A4, SCL to A5 ,,,, 0x3F adress I2C
void setup()
{
pinMode(A0, INPUT); // А0 на вход для датчика
lcd.begin(); // стартуем дисплей
lcd.clear();
analogReference(INTERNAL);
/* на пин AREF будет подано внутреннее опорное напряжение 1,1 вольт (INTERNAL ).
с ним будет сравниваться напряжение на А0 с датчика
Вместо"INTERNAL" написав "EXTERNAL" нужно подать {{{обязательно}}} на пин AREF
любое опорное напряжение максимум до 5,5 вольт,
если эту строчку закомментировать или убрать вообще, то опорным будет напряжение
которое подходит к пину Vin , то-есть напряжение питания. */
// the setup routine runs once when you press reset:
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
// the loop routine runs over and over again forever:
lcd.backlight(); // подсветка дисплея
//lcd.setCursor(7, 0); // садим начало курсора на 7-й слева в верхнем ряду (7, 0)
//lcd.print("OK!"); // выводим на дисплей OK
//delay(1500); // задержка, чтобы так долго смотря на ОК, все думали, что всё в порядке
}
void loop() // начинаем циклить
{
float druck = analogRead(A0);
// Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 5V):
float voltage =druck * (5.0 / 1023.0);
// print out the value you read:
druck = analogRead(A0); // снимаем показания со входа A0 от 0 до 1023, в нашем случае 1023 - это 1,1 вольт,
// 400 - это 1,1/1024*400 = 0,4296875 вольт и т. д.
//sprintf(s," %2.2f- %2.2f %2.2f- %2.2f", Fr_min,Fr_max,Ps_min,Ps_max);
// printf(druck,"%2.2f",voltage);
druck = map(druck,0,1023,0,250); // С помощью map превращаем 1023 в 600 и вниз до 0 так же пропорционально
if (druck<20)druck=0; // это, дабы дисплей не дёргался при U<0.2 volt. следующим шагом мы разделим 20 на 100 что даст 0,2в
DRUCK = druck; //делим на 100 дабы получить переменную с запятой (в map можно было прописать 0, 1023, 0, 6)
//и наши показатели были бы целым числом и все вычисления округяются в этом случае по законам математики 3,4 =3, а 3,5 =4.
lcd.setCursor(2, 0); // садим начало курсора на 2-й слева в верхнем ряду (2, 0)
lcd.print("P");
lcd.setCursor(3,0); // садим начало курсора на 2-й слева в верхнем ряду (2, 0)
lcd.print("R"); // выводим на дисплей Oil pressure
lcd.setCursor(4,0); // садим начало курсора на 2-й слева в верхнем ряду (2, 0)
lcd.print("E");
lcd.setCursor(5,0); // садим начало курсора на 2-й слева в верхнем ряду (2, 0)
lcd.print("S");
lcd.setCursor(6,0); // садим начало курсора на 2-й слева в верхнем ряду (2, 0)
lcd.print("S");
lcd.setCursor(7,0); // садим начало курсора на 2-й слева в верхнем ряду (2, 0)
lcd.print("U");
lcd.setCursor(8,0); // садим начало курсора на 2-й слева в верхнем ряду (2, 0)
lcd.print("R");
lcd.setCursor(9,0); // садим начало курсора на 2-й слева в верхнем ряду (2, 0)
lcd.print("E");
lcd.setCursor(10, 0); // сдвигаем каретку на 10-ю слева в нижнем ряду (10, 1)
lcd.print("");
lcd.setCursor(11,0); // сдвигаем каретку на 10-ю слева в нижнем ряду (10, 1)
lcd.print("O");
lcd.setCursor(12,0); // сдвигаем каретку на 10-ю слева в нижнем ряду (10, 1)
lcd.print("2");
lcd.setCursor(1,1);
Serial.print( "Pressure:");// садим начало курсора на 3-й слева уже в нижнем ряду (3, 1)
Serial.println(DRUCK);
Serial.print("voltage:");
Serial.println(voltage);
delay(1000);
lcd.print(DRUCK);
lcd.setCursor(10, 1);
lcd.print(voltage);// выводим на дисплей результат переменной DRUCK
lcd.setCursor(14, 1);
lcd.print("V");
// lcd.setCursor(8, 1); // сдвигаем каретку на 10-ю слева в нижнем ряду (10, 1)
// lcd.print("m"); // выводим на дисплей BAR
lcd.setCursor(5, 1); // сдвигаем каретку на 10-ю слева в нижнем ряду (10, 1)
lcd.print("B");
lcd.setCursor(6, 1); // сдвигаем каретку на 10-ю слева в нижнем ряду (10, 1)
lcd.print("A");
lcd.setCursor(7, 1); // сдвигаем каретку на 10-ю слева в нижнем ряду (10, 1)
lcd.print("R");
delay(250); // задержка, чтобы не часто мелькал дисплей при каждом новом цикле
}
I2c работает только так )
Вот обощначение проводов датчика , можете не так подключил ,я подключав так s+на вход А0 S- на gnd
Когда подключав переменный резистор , на ком порте значения меняться а на экране нет , как будто неправильно отображает , только вольты правильно показывает !