Нужна помощь

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Vanya_87 пишет:

у меня всё таже проблема с экраном, рябь от строки lcd.clear();. 

когда нажимаю на кнопку и держу, всё ок. когда кнопка отпущенная рябится(((((((((

это другая задача - сначало надо правильно вывести - потом рихтовать код от мерцаний

Vanya_87
Offline
Зарегистрирован: 31.03.2015

SU-27-16 пишет:

Vanya_87 пишет:

у меня всё таже проблема с экраном, рябь от строки lcd.clear();. 

когда нажимаю на кнопку и держу, всё ок. когда кнопка отпущенная рябится(((((((((

это другая задача - сначало надо правильно вывести - потом рихтовать код от мерцаний

а как его рихтовать?))) вставлять millis и delay что ли?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

а как его рихтовать?))) вставлять millis и delay что ли?
где-то - первое, где-то - второе.....

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

в коде из #85 изменяя значение в строке 10 - 0,1,2,3 - будете иметь возможность отработки кода для КАЖДОГО режима.... независимо от нажатия кнопки....
...пробуйте, а результаты - сюда
...что в каком режиме не так 

Vanya_87
Offline
Зарегистрирован: 31.03.2015

какой код №85? где он)))

Vanya_87
Offline
Зарегистрирован: 31.03.2015

SU-27-16 пишет:

в коде из #85 изменяя значение в строке 10 - 0,1,2,3 - будете иметь возможность отработки кода для КАЖДОГО режима.... независимо от нажатия кнопки....
...пробуйте, а результаты - сюда
...что в каком режиме не так 

у меня 10 строка :  byte nLCD=0;

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Vanya_87 пишет:

какой код №85? где он)))

в посте #85

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

у меня 10 строка :  byte nLCD=0;
вот и получишь на экран только "Helllo !"
:)

Vanya_87
Offline
Зарегистрирован: 31.03.2015

SU-27-16 пишет:

у меня 10 строка :  byte nLCD=0;
вот и получишь на экран только "Helllo !"
:)

а это разве не главный экран? потому что когда у меня 3 стояло то грузился 3 cаse

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

главный экран ( который отобразится при запуске ) - это что пропишем при объявлении и инициализации переменной, остальное зависит от нажатия кнопки....

Vanya_87
Offline
Зарегистрирован: 31.03.2015

SU-27-16 пишет:

главный экран ( который отобразится при запуске ) - это что пропишем при объявлении и инициализации переменной, остальное зависит от нажатия кнопки....

 

я щас поставил там 3, загрузился первый экран топливо и мерцает этот экран)))

Vanya_87
Offline
Зарегистрирован: 31.03.2015

я кстати нашёл тему про замыкание 5V и земли)))

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

ничё не понял !

я щас поставил там 3, загрузился первый экран топливо и мерцает этот экран)))
....разберись в функциях вывода на экран чего и когда - уже обговорил же - это не моя забота....

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

Vanya_87 пишет:

я кстати нашёл тему про замыкание 5V и земли)))

удачи в пайке/перепайке !

Vanya_87
Offline
Зарегистрирован: 31.03.2015

SU-27-16 пишет:

Vanya_87 пишет:

я кстати нашёл тему про замыкание 5V и земли)))

удачи в пайке/перепайке !

 

спасибо)))

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

#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" - не мерцает ?

Vanya_87
Offline
Зарегистрирован: 31.03.2015

SU-27-16 пишет:


#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 не загарается вообще и не прошивается((((

Vanya_87
Offline
Зарегистрирован: 31.03.2015

  у меня вопрос: у тебя в формуле по топливу считыватся цифровой вход а нужно же аналоговый вход.

так было: toplivo=70.5-0.0762939453125*digitalRead(toplivoPin);

а нужно же  toplivo=70.5-0.0762939453125*analogRead(toplivoPin);

я прав?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

да, моя невнимательность....

Vanya_87
Offline
Зарегистрирован: 31.03.2015

я уже исправил))) но как уже говорил проверить не чем((((

слушай, хочу пока ардуинки нету хочу код почистить, то что пишется через "//" и в ардуино серым пишется оно же не на что не влияет?)))

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

комментарий ( ни на что не влияет )

// действует до конца строки

/*
  парвыиеиаыиыыаи ы и ке 
  ыеиыкеи srtbsrt srtbsrth sret rg
// внутри этого блока тоже работает - наоборот - нет
  вам erger ererg ergerg
*/
-      действует    от "/*"    до    "*/"

Vanya_87
Offline
Зарегистрирован: 31.03.2015

SU-27-16 пишет:


#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 и думаю будет правильно показывать))) как всё проверю, отпишусь...

Vanya_87
Offline
Зарегистрирован: 31.03.2015

в таком варианте экраны не мерцают, но скорость не считается, а ставиться как раньше только 0 и 1)))

и литраж бака пишется 200 с чем то литров, хотя писался раньше 70 L)))