в коде из #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 и земли)))
удачи в пайке/перепайке !
спасибо)))
#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" - не мерцает ?
#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 не загарается вообще и не прошивается((((
у меня вопрос: у тебя в формуле по топливу считыватся цифровой вход а нужно же аналоговый вход.
так было: toplivo=70.5-0.0762939453125*digitalRead(toplivoPin);
а нужно же toplivo=70.5-0.0762939453125*analogRead(toplivoPin);
я прав?
да, моя невнимательность....
я уже исправил))) но как уже говорил проверить не чем((((
слушай, хочу пока ардуинки нету хочу код почистить, то что пишется через "//" и в ардуино серым пишется оно же не на что не влияет?)))
комментарий ( ни на что не влияет )
// действует до конца строки
/*
парвыиеиаыиыыаи ы и ке
ыеиыкеи srtbsrt srtbsrth sret rg
// внутри этого блока тоже работает - наоборот - нет
вам erger ererg ergerg
*/
- действует от "/*" до "*/"
#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" - не мерцает ?
Загрузил код, завтра проверю. кстати на скорость ввел коэф. 4,6 и думаю будет правильно показывать))) как всё проверю, отпишусь...
в таком варианте экраны не мерцают, но скорость не считается, а ставиться как раньше только 0 и 1)))
и литраж бака пишется 200 с чем то литров, хотя писался раньше 70 L)))