в коде из #85 изменяя значение в строке 10 - 0,1,2,3 - будете иметь возможность отработки кода для КАЖДОГО режима.... независимо от нажатия кнопки....
...пробуйте, а результаты - сюда
...что в каком режиме не так
в коде из #85 изменяя значение в строке 10 - 0,1,2,3 - будете иметь возможность отработки кода для КАЖДОГО режима.... независимо от нажатия кнопки....
...пробуйте, а результаты - сюда
...что в каком режиме не так
главный экран ( который отобразится при запуске ) - это что пропишем при объявлении и инициализации переменной, остальное зависит от нажатия кнопки....
главный экран ( который отобразится при запуске ) - это что пропишем при объявлении и инициализации переменной, остальное зависит от нажатия кнопки....
я щас поставил там 3, загрузился первый экран топливо и мерцает этот экран)))
я щас поставил там 3, загрузился первый экран топливо и мерцает этот экран)))
....разберись в функциях вывода на экран чего и когда - уже обговорил же - это не моя забота....
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 10, 6, 5, 4, 3);
volatile byte nSpeed; // колво импульсов, если не будете гонять более 255 км/час
//volatile int nSpeed; // колво импульсов, если будете гонять более 255 км/час
#define speedPin 2 // для UNO
#define buttonPin 4 // кнопка на GND и на пин 4 !!!!!!!!!!!!!!!!!!!!!!!!!!!
unsigned long speedMillisOld; // "секундомер" для замера скорости
const byte speedMillisDelta=60; // время измерения скорости - 60 mS
boolean getSpeed; // флаг измерения скорости
byte nLCD=3; // 0 - приветствие , 1 - скорость, 2 - напряжение, 3 - топливо
#define voltagePin A0 // пин для измерения бортсети
// с +АКБ авто на резистор 3 kOm, с него на резистор 1 kOm, с него на -АКБ
// среднюю точку резисторов на пин A0
float kVoltage=1.00; // поправочный коэффициент для напряжения бортсети
float voltage; // напряжение бортсети
#define toplivoPin A1 // пин для измерения остатка топлива
byte toplivo; // остаток топлива
boolean firstTime=1;
//================================================================================
void speedInterrupt()
{
nSpeed++;
}
//================================================================================
void outputDispHello()
{
if(firstTime)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" Hello !");
lcd.setCursor(0,1);
lcd.print(" Hello !");
firstTime=0;
}
else
{
}
}
//================================================================================
void outputDispSpeed()
{
if(firstTime)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Speed:");
lcd.setCursor(4,1);
lcd.print("km/h");
firstTime=0;
}
else
{
if(nSpeed<10)
{
lcd.setCursor(2,1);
lcd.print(nSpeed);
}
if((nSpeed>9)&&(nSpeed<100))
{
lcd.setCursor(1,1);
lcd.print(nSpeed);
}
if(nSpeed>99)
{
lcd.setCursor(0,1);
lcd.print(nSpeed);
}
}
}
//================================================================================
void outputDispVoltage()
{
if(firstTime)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Voltage:");
lcd.setCursor(6,1);
lcd.print("V");
firstTime=0;
}
else
{
if(voltage<10.0)
{
lcd.setCursor(2,1);
lcd.print(voltage,1);
}
if(voltage>9.9)
{
lcd.setCursor(1,1);
lcd.print(voltage,1);
}
}
}
//================================================================================
void outputDispToplivo()
{
if(firstTime)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Toplivo:");
lcd.setCursor(4,1);
lcd.print("L");
firstTime=0;
}
else
{
if(toplivo<10)
{
lcd.setCursor(2,1);
lcd.print(toplivo);
}
if(toplivo>9)
{
lcd.setCursor(1,1);
lcd.print(toplivo);
}
}
}
//================================================================================
void setup()
{
// Serial.begin(9600);
lcd.begin(8,2);
pinMode(speedPin,INPUT);
digitalWrite(speedPin,HIGH);
pinMode(buttonPin,INPUT);
digitalWrite(buttonPin,HIGH);
pinMode(toplivoPin,INPUT);
digitalWrite(toplivoPin,HIGH);
attachInterrupt(0,speedInterrupt,RISING);
}
//================================================================================
void loop()
{
// расчёт скорости
if(getSpeed)
{
nSpeed=0;
getSpeed=0;
speedMillisOld=millis();
}
else
{
if((millis()-speedMillisOld)>speedMillisDelta)
{
getSpeed=1;
}
}
// измерение напряжения бортсети
voltage=0.01953125*analogRead(voltagePin)*kVoltage;
// измерение остатка топлива
toplivo=70.5-0.0762939453125*digitalRead(toplivoPin);
// обработка кнопки
if(digitalRead(buttonPin)==0)
{
delay(75);
while(digitalRead(buttonPin)==0) { }
nLCD++;
firstTime=1;
if(nLCD>3) nLCD=0;
}
// вывод экранов
switch (nLCD)
{
case 0: {outputDispHello(); break;}
case 1: {outputDispSpeed(); break;}
case 2: {outputDispVoltage(); break;}
case 3: {outputDispToplivo(); break;}
}
}
//================================================================================
в таком варианте - экран в режимах отображения "Hello" , "Speed" , "Voltage" , "Toplivo" - не мерцает ?
извини, проверить не чем, вчера спалил ардуинку, уже заказал другую, как придёт продолжим дальше тему)))
а спалил тем что отпаялся провод от минуса на триноге которая переделывает +12V в +5V и замкнула на +5V, пошёл дымок, отключил сразу но это не помогло, щас не работает экран и не прошивается. при начале прошивки мегает PX красная лампочка а Tx не загарается вообще и не прошивается((((
/*
парвыиеиаыиыыаи ы и ке
ыеиыкеи srtbsrt srtbsrth sret rg
// внутри этого блока тоже работает - наоборот - нет
вам erger ererg ergerg
*/
- действует от "/*" до "*/"
у меня всё таже проблема с экраном, рябь от строки lcd.clear();.
когда нажимаю на кнопку и держу, всё ок. когда кнопка отпущенная рябится(((((((((
это другая задача - сначало надо правильно вывести - потом рихтовать код от мерцаний
у меня всё таже проблема с экраном, рябь от строки lcd.clear();.
когда нажимаю на кнопку и держу, всё ок. когда кнопка отпущенная рябится(((((((((
это другая задача - сначало надо правильно вывести - потом рихтовать код от мерцаний
а как его рихтовать?))) вставлять millis и delay что ли?
а как его рихтовать?))) вставлять millis и delay что ли?
где-то - первое, где-то - второе.....
в коде из #85 изменяя значение в строке 10 - 0,1,2,3 - будете иметь возможность отработки кода для КАЖДОГО режима.... независимо от нажатия кнопки....
...пробуйте, а результаты - сюда
...что в каком режиме не так
какой код №85? где он)))
в коде из #85 изменяя значение в строке 10 - 0,1,2,3 - будете иметь возможность отработки кода для КАЖДОГО режима.... независимо от нажатия кнопки....
...пробуйте, а результаты - сюда
...что в каком режиме не так
у меня 10 строка : byte nLCD=0;
какой код №85? где он)))
в посте #85
у меня 10 строка : byte nLCD=0;
вот и получишь на экран только "Helllo !"
:)
у меня 10 строка : byte nLCD=0;
вот и получишь на экран только "Helllo !"
:)
а это разве не главный экран? потому что когда у меня 3 стояло то грузился 3 cаse
главный экран ( который отобразится при запуске ) - это что пропишем при объявлении и инициализации переменной, остальное зависит от нажатия кнопки....
главный экран ( который отобразится при запуске ) - это что пропишем при объявлении и инициализации переменной, остальное зависит от нажатия кнопки....
я щас поставил там 3, загрузился первый экран топливо и мерцает этот экран)))
я кстати нашёл тему про замыкание 5V и земли)))
ничё не понял !
я щас поставил там 3, загрузился первый экран топливо и мерцает этот экран)))
....разберись в функциях вывода на экран чего и когда - уже обговорил же - это не моя забота....
я кстати нашёл тему про замыкание 5V и земли)))
удачи в пайке/перепайке !
я кстати нашёл тему про замыкание 5V и земли)))
удачи в пайке/перепайке !
спасибо)))
в таком варианте - экран в режимах отображения "Hello" , "Speed" , "Voltage" , "Toplivo" - не мерцает ?
в таком варианте - экран в режимах отображения "Hello" , "Speed" , "Voltage" , "Toplivo" - не мерцает ?
извини, проверить не чем, вчера спалил ардуинку, уже заказал другую, как придёт продолжим дальше тему)))
а спалил тем что отпаялся провод от минуса на триноге которая переделывает +12V в +5V и замкнула на +5V, пошёл дымок, отключил сразу но это не помогло, щас не работает экран и не прошивается. при начале прошивки мегает PX красная лампочка а Tx не загарается вообще и не прошивается((((
у меня вопрос: у тебя в формуле по топливу считыватся цифровой вход а нужно же аналоговый вход.
так было: toplivo=70.5-0.0762939453125*digitalRead(toplivoPin);
а нужно же toplivo=70.5-0.0762939453125*analogRead(toplivoPin);
я прав?
да, моя невнимательность....
я уже исправил))) но как уже говорил проверить не чем((((
слушай, хочу пока ардуинки нету хочу код почистить, то что пишется через "//" и в ардуино серым пишется оно же не на что не влияет?)))
комментарий ( ни на что не влияет )
// действует до конца строки
/*
парвыиеиаыиыыаи ы и ке
ыеиыкеи srtbsrt srtbsrth sret rg
// внутри этого блока тоже работает - наоборот - нет
вам erger ererg ergerg
*/
- действует от "/*" до "*/"
в таком варианте - экран в режимах отображения "Hello" , "Speed" , "Voltage" , "Toplivo" - не мерцает ?
Загрузил код, завтра проверю. кстати на скорость ввел коэф. 4,6 и думаю будет правильно показывать))) как всё проверю, отпишусь...
в таком варианте экраны не мерцают, но скорость не считается, а ставиться как раньше только 0 и 1)))
и литраж бака пишется 200 с чем то литров, хотя писался раньше 70 L)))