Помогите перекинуть дисплей

el666
Offline
Зарегистрирован: 27.12.2019

Помогите перекинуть дисплей

нужно на чпу фрез поставить  тахометр,  собрал, работает

но дисплей  1602 ,уж слишком большой,, вот хочу поставить маленький чтоб только цыфры выводил (5 знаков)

Когда-то  собрал уф метр на дисплее нокия 5110,вот хочу перекинуть его на тахометр

а как отредактировать скетч не знаю,

 ///   tahometr
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

volatile float time = 0;
volatile float time_last = 0;
volatile int rpm_array[3] = {0,0,0};
//////////////////////////////////////////
void setup()
 { //Digital Pin 2 
 attachInterrupt(0,taho, FALLING);
  lcd.begin();  
}
/////////////////////////////////////////////
void loop()
 { int rpm = 0;
  while(1)     
  {delay(400);
      lcd.setCursor(0, 1);
  lcd.print("                ");   
    lcd.setCursor(0, 1);
  lcd.print(rpm);   
    if(time > 0)
     { rpm_array[0] = rpm_array[1];
      rpm_array[1] = rpm_array[2];
      rpm_array[2] = 60*(1000000/(time));
      rpm = (rpm_array[0] + rpm_array[1] + rpm_array[2] ) / 3;
  }}}
/////////////////////////////////////////////
void taho()
  { time = (micros() - time_last); 
   time_last = micros();
}

 

el666
Offline
Зарегистрирован: 27.12.2019

и второй скеч  уф метр

el666
Offline
Зарегистрирован: 27.12.2019
///// uv metr

#include <LCD5110_Graph.h>
LCD5110 lcd(8,9,10,12,11);
extern unsigned char BigNumbers[];
String UV = "0"; 
///////////////////////////////////////////////
void setup() 
{ 
 lcd.InitLCD();
 lcd.setFont(BigNumbers);
 lcd.clrScr();
 lcd.update();  
 delay(500);}
/////////////////////////////////////////////
void loop() 
{
 int stringLength = 0; 
 UV = readSensor();
 lcd.clrScr();
 stringLength = UV.length();
 printUV(stringLength);
 lcd.update();
 delay(1000);
}
void printUV(int length)
 { switch(length)
  {case 1:  lcd.print(UV,38,19); break;
    case 2:  lcd.print(UV,24,19); break;
    default:  lcd.print(UV,0,19); break;
  }
}
String readSensor()
  {String UVIndex = "0";
  int sensorValue = 0;
  sensorValue = analogRead(0);                        //connect UV sensor to Analog 0   
  int voltage = (sensorValue * (5.0 / 1023.0))*1000;  //Voltage in miliVolts
  
 if(voltage<50)
   { UVIndex = "0";}
   else if (voltage>50 && voltage<=199) 
  {return UVIndex;}
}

здесь в конце длинный хвост был  до  11, я его срезал до нуля ,щяс  на дисплей  ноль 

el666
Offline
Зарегистрирован: 27.12.2019

я пробывал перекинуть  void setup()  и void loop() из одного в другой  и наоборот, но тормознулся  на  выводе на экран

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А к автору этих двух скетчей обращались?

el666
Offline
Зарегистрирован: 27.12.2019

не,  эт  давно было,, уже не помню откуда скачал

 

el666
Offline
Зарегистрирован: 27.12.2019

это  я  их  не много  обрезал

 

el666
Offline
Зарегистрирован: 27.12.2019

ув метр собирал когда  на длп принтере нужно было настроить маску,а тахометр   собрал для тестирования безимянных моторчиков

el666
Offline
Зарегистрирован: 27.12.2019
////#include <Wire.h> 
/////#include <LiquidCrystal_I2C.h>
/////LiquidCrystal_I2C lcd(0x27, 16, 2);

#include <LCD5110_Graph.h>         //  пе
LCD5110 lcd(8,9,10,12,11);          //    ре
extern unsigned char BigNumbers[];  //       кинул

volatile float time = 0;
volatile float time_last = 0;
volatile int rpm_array[3] = {0,0,0};
//////////////////////////////////////////
void setup()
 { 
   //Digital Pin 2 
 attachInterrupt(0,taho, FALLING);
  ///lcd.begin(); 
 lcd.InitLCD();              // пе
 lcd.setFont(BigNumbers);    //   ре
 lcd.clrScr();               //      ки
 lcd.update();               //         нул
 delay(500); 
}
/////////////////////////////////////////////
void loop()
 { int rpm = 0;
  while(1)     
  {delay(400);
      ////lcd.setCursor(0, 1);
   lcd.setFont(BigNumbers);     // перек
   lcd.clrScr();                 //    кинул
   
  lcd.print("                ");   //     вот 
    lcd.clrScr();                  //    здесь
  lcd.print(rpm);                  // загвоздка  вывода на экран
    if(time > 0)
     { rpm_array[0] = rpm_array[1];
      rpm_array[1] = rpm_array[2];
      rpm_array[2] = 60*(1000000/(time));
      rpm = (rpm_array[0] + rpm_array[1] + rpm_array[2] ) / 3;
  }}}
/////////////////////////////////////////////
void taho()
  { time = (micros() - time_last); 
   time_last = micros();
}

 

 

el666
Offline
Зарегистрирован: 27.12.2019

вот  с 33 по 35 строке  загвоздка нужно правильно вписать код  вывода  цифр на экран

при компиляции высвечивается 33 строка

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

700р 

el666
Offline
Зарегистрирован: 27.12.2019

ну так как правильно вписать код?  

 

el666
Offline
Зарегистрирован: 27.12.2019

никто не хочет помочь? всего  одна две строки

sadman41
Offline
Зарегистрирован: 19.10.2016

Какие строки? Давай, впишу.

el666
Offline
Зарегистрирован: 27.12.2019

с  33 строки  если не затруднит))

el666
Offline
Зарегистрирован: 27.12.2019

 lcd.print("                "); 

 

это для 1602  экрана  ,а мне нужно для  5110

nik182
Offline
Зарегистрирован: 04.05.2015

Вставь delay(1500); после 34 строки и lcd.update();   после 36, сообщи что получилось. И почему LCD а не LCD5110?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

5110.print("...

b707
Offline
Зарегистрирован: 26.05.2017

el666 пишет:

никто не хочет помочь? всего  одна две строки

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

"Если вы такие умные. почему вы строем не ходите?"

 

el666
Offline
Зарегистрирован: 27.12.2019

nik182 пишет:

Вставь delay(1500); после 34 строки и lcd.update();   после 36, сообщи что получилось. И почему LCD а не LCD5110?

так было в скетче, и  он работает, я только перекинул из уфметр в тахо

el666
Offline
Зарегистрирован: 27.12.2019

вставил, но опять ошибка в 33 стоке

sketch_jun10a.ino: In function 'void loop()':
sketch_jun10a:33: error: no matching function for call to 'LCD5110::print(const char [17])'
C:\Documents and Settings\Admin\Мои документы\arduino-1.0.6\libraries\LCD5110/LCD5110_Graph.h:95: note: candidates are: void LCD5110::print(char*, int, int)
C:\Documents and Settings\Admin\Мои документы\arduino-1.0.6\libraries\LCD5110/LCD5110_Graph.h:96: note:                 void LCD5110::print(String, int, int)
sketch_jun10a:37: error: no matching function for call to 'LCD5110::print(int&)'
C:\Documents and Settings\Admin\Мои документы\arduino-1.0.6\libraries\LCD5110/LCD5110_Graph.h:95: note: candidates are: void LCD5110::print(char*, int, int)
C:\Documents and Settings\Admin\Мои документы\arduino-1.0.6\libraries\LCD5110/LCD5110_Graph.h:96: note:                 void LCD5110::print(String, int, int)
 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

el666 пишет:

никто не хочет помочь? всего  одна две строки

Что значит "никто не хочет"? Человек же сказал, что хочет

DetSimen пишет:

700р 

Какие проблемы?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

el666 пишет:

ну так как правильно вписать код?  

И ножкой топнуть!

b707
Offline
Зарегистрирован: 26.05.2017

el666 пишет:

вставил, но опять ошибка в 33 стоке

не удивительно ни разу. 

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

откройте обе графические библиотеки и сравните методы и их параметры. И меняйте вдумчиво, а не все подряд

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Видимо для LCD5110 надо вызывать lcd.print с тремя параметрами как во втором скетче - lcd.print(UV,38,19)

el666
Offline
Зарегистрирован: 27.12.2019

ЕвгенийП пишет:

el666 пишет:

никто не хочет помочь? всего  одна две строки

Что значит "никто не хочет"? Человек же сказал, что хочет

DetSimen пишет:

700р 

Какие проблемы?

мне   кажется что помощь и платная услуга ,это разные  понятия,, или я  ошибаюсь?

b707
Offline
Зарегистрирован: 26.05.2017

el666 пишет:

мне   кажется что помощь и платная услуга ,это разные  понятия,, или я  ошибаюсь?

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

el666
Offline
Зарегистрирован: 27.12.2019

b707 пишет:

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

да да ,, называются чуть по разному,, принимает другие парметры или в другом порядке..

 

а вот какие   не могу найти,,  до утра  кучу   роликов посмотрел в ютубе  так и не понял

b707
Offline
Зарегистрирован: 26.05.2017

el666 пишет:

а вот какие   не могу найти,,  до утра  кучу   роликов посмотрел в ютубе  так и не понял

вы бы еще карту Антарктиды изучили... примерно такое же отношение имеет к вашей проблеме, как ролики на ютубе...

Что вы пытались найти в видео? какие парметры поменять в двух ваших библиотеках? хм.... с вашим IQ мне все ясно...

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018
void print(char *st, int x, int y);
void print(String st, int x, int y);
el666
Offline
Зарегистрирован: 27.12.2019

Komandir пишет:

void print(char *st, int x, int y);
void print(String st, int x, int y);

это после какой строки вписать?

b707
Offline
Зарегистрирован: 26.05.2017

el666 пишет:

это после какой строки вписать?

после перевода 700 рублей.... :)

Все, отписываюсь, не могу больше смотреть на эту клоунаду

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Это описание функций LCD5110

То есть не нужны lcd.setCursor(0, 1);

Координаты (в графическом понимании, а не в символьном) указываются сразу в print !

el666
Offline
Зарегистрирован: 27.12.2019

Komandir пишет:

Это описание функций LCD5110

То есть не нужны lcd.setCursor(0, 1);

Координаты (в графическом понимании, а не в символьном) указываются сразу в print !

дав   эт я знаю  эта строка  от  1602 экрана,она  отключена

el666
Offline
Зарегистрирован: 27.12.2019

как то вот так вписать надо

void printUV(int length)
 { switch(length)
  {case 1:  lcd.print(UV,38,19); break;
    case 2:  lcd.print(UV,24,19); break;
    default:  lcd.print(UV,0,19); break;
  }
 
только  без  uv
Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

print пишут в буфер

что бы увидеть, надо после print делать lcd.update();

el666
Offline
Зарегистрирован: 27.12.2019

я думаю что вот это надо вставить

void print(int length)
 { switch(length)
  {case 1:  lcd.print(38,19); break;
    case 2:  lcd.print(24,19); break;
    default:  lcd.print(0,19); break;
  }

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018
void loop (){
  lcd.clrScr();
  lcd.print("I'm a moron", CENTER, 42);
  lcd.update();
}

Вот так попробуйте - должна быть строка на дисплее.

el666
Offline
Зарегистрирован: 27.12.2019
/////////////////////////////////////////////
void loop()
 { int rpm = 0;
  while(1)     
  {delay(400);
      ////lcd.setCursor(0, 1);
   lcd.setFont(BigNumbers);     // перк
   lcd.clrScr();                 //    кинул
   void print
   case 1:  lcd.print(38,19); break;
    case 2:  lcd.print(24,19); break;
    default:  lcd.print(0,19); break;
    
    lcd.clrScr();                  //    здесь
    delay(1500);
    lcd.update(); 
  lcd.print(rpm);                  // загвоздка  вывода на экран
    if(time > 0)
     { rpm_array[0] = rpm_array[1];
      rpm_array[1] = rpm_array[2];
      rpm_array[2] = 60*(1000000/(time));
      rpm = (rpm_array[0] + rpm_array[1] + rpm_array[2] ) / 3;
  }}}
/////////////////////////////////////////////

 

el666
Offline
Зарегистрирован: 27.12.2019

на 10 строке ошибка

 

sketch_jun10a:34: error: case label '2' not within a switch statement
sketch_jun10a:34: error: no matching function for call to 'LCD5110::print(int, int)'
C:\Documents and Settings\Admin\Мои документы\arduino-1.0.6\libraries\LCD5110/LCD5110_Graph.h:95: note: candidates are: void LCD5110::print(char*, int, int)
C:\Documents and Settings\Admin\Мои документы\arduino-1.0.6\libraries\LCD5110/LCD5110_Graph.h:96: note:                 void LCD5110::print(String, int, int)
sketch_jun10a:35: error: case label not within a switch statement
sketch_jun10a:35: error: no matching function for call to 'LCD5110::print(int, int)'
C:\Documents and Settings\Admin\Мои документы\arduino-1.0.6\libraries\LCD5110/LCD5110_Graph.h:95: note: candidates are: void LCD5110::print(char*, int, int)
C:\Documents and Settings\Admin\Мои документы\arduino-1.0.6\libraries\LCD5110/LCD5110_Graph.h:96: note:                 void LCD5110::print(String, int, int)
sketch_jun10a:40: error: no matching function for call to 'LCD5110::print(int&)'
C:\Documents and Settings\Admin\Мои документы\arduino-1.0.6\libraries\LCD5110/LCD5110_Graph.h:95: note: candidates are: void LCD5110::print(char*, int, int)
C:\Documents and Settings\Admin\Мои документы\arduino-1.0.6\libraries\LCD5110/LCD5110_Graph.h:96: note:                 void LCD5110::print(String, int, int)
 
b707
Offline
Зарегистрирован: 26.05.2017

el666 пишет:

на 10 строке ошибка

пипец :)
 
lcd.print("I'm a moron", CENTER, 42);

это точно :)

 

el666
Offline
Зарегистрирован: 27.12.2019

вот так  по центру моргает 123

void loop()
 { int rpm = 0;
  while(1)     
  {delay(400);
      
   lcd.setFont(BigNumbers);     
   lcd.clrScr();                 
   lcd.print("123", CENTER, 14);
   //lcd.print(38,19, CENTER, 42);
   lcd.update();

  //void print(int length)
  // case 1:  lcd.print(char*,38,19); break;
    //case 2:  lcd.print(24,19); break;
    //default:  lcd.print(0,19); break;
    
    lcd.clrScr();                 
    delay(1500);
    lcd.update(); 
 // lcd.print(rpm);                  // загвоздка  вывода на экран
    if(time > 0)
     { rpm_array[0] = rpm_array[1];
      rpm_array[1] = rpm_array[2];
      rpm_array[2] = 60*(1000000/(time));
      rpm = (rpm_array[0] + rpm_array[1] + rpm_array[2] ) / 3;
  }}}

 

el666
Offline
Зарегистрирован: 27.12.2019

а как вывести  показания с датчика?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

в 8 строке написать lcd.printNumI(rpm, CENTER, 14);

int rpm = 0; из второй строки перенсти в void setup()

nik182
Offline
Зарегистрирован: 04.05.2015

Вместо "123" написать rpm

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

el666 пишет:
кучу   роликов посмотрел в ютубе
Посмотри лучше в порнхабе. Пользы столько же, зато куда как веселее!

el666
Offline
Зарегистрирован: 27.12.2019

ура))) все  отлично работает , обороты показывает по центру, только моргает в сек

это не так важно,главное показывает,  но все же ,что отредактировать чтоб не моргал

большое спасибо командир , ты  настоящий  помощник))))

вот весь код

 
 
 
  


#include <LCD5110_Graph.h>         
LCD5110 lcd(8,9,10,12,11);          
extern unsigned char BigNumbers[];  

volatile float time = 0;
volatile float time_last = 0;
volatile int rpm_array[3] = {0,0,0};
//////////////////////////////////////////
void setup()
 { 
   //Digital Pin 2 
 attachInterrupt(0,taho, FALLING);
  ///lcd.begin(); 
 lcd.InitLCD();              
 lcd.setFont(BigNumbers);    
 lcd.clrScr();               
 lcd.update();               
 delay(500); 
}
/////////////////////////////////////////////
void loop()
 { int rpm = 0;
  while(1)     
  {delay(400);
      
   lcd.setFont(BigNumbers);     
   lcd.clrScr();                 
    lcd.printNumI(rpm, CENTER, 14);
    lcd.update();
    lcd.clrScr();                  
    delay(1000);
    lcd.update();                 
    if(time > 0)
     { rpm_array[0] = rpm_array[1];
      rpm_array[1] = rpm_array[2];
      rpm_array[2] = 60*(1000000/(time));
      rpm = (rpm_array[0] + rpm_array[1] + rpm_array[2] ) / 3;
  }}}
/////////////////////////////////////////////
void taho()
  { time = (micros() - time_last); 
   time_last = micros();
}

 

 

nik182
Offline
Зарегистрирован: 04.05.2015

Попробуй    lcd.clrScr(); в сетап перенести. Но тогда понабиться еще вывод чего нибудь чистить за принтом место. Или сначала строку одинакового размера сформировать и её выводить. Тогда моргать не будет.   

el666
Offline
Зарегистрирован: 27.12.2019

все   нашел)) убрал три строки 30 31 32  , ничего не моргает

el666
Offline
Зарегистрирован: 27.12.2019

всем большое спасибо

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

#include <LCD5110_Graph.h>         
LCD5110 lcd(8,9,10,12,11);          
extern unsigned char BigNumbers[];  

volatile float time = 0;
volatile float time_last = 0;
volatile int rpm_array[3] = {0,0,0};
//////////////////////////////////////////
void setup()
 { 
   //Digital Pin 2 
 attachInterrupt(0,taho, FALLING);
  ///lcd.begin(); 
 lcd.InitLCD();              
 lcd.setFont(BigNumbers);    
 lcd.clrScr();               
 lcd.update();               
 delay(500); 
}
/////////////////////////////////////////////
void loop()
{
  int rpm = 0;
  int old_rpm=1;
  while(1)     
  {
    delay(400);
    if(time > 0)
    {
      rpm_array[0] = rpm_array[1];
      rpm_array[1] = rpm_array[2];
      rpm_array[2] = 60*(1000000/(time));
      rpm = (rpm_array[0] + rpm_array[1] + rpm_array[2] ) / 3;
    }
    if (rpm!=old_rpm)
    {                 
      lcd.printNumI(rpm, CENTER, 14, 5);
      lcd.update();
      old_rpm=rpm;
    }        
  }
}
/////////////////////////////////////////////
void taho()
  { time = (micros() - time_last); 
   time_last = micros();
}