Mam problem dotyczący wyświetlania zmiennej float, ponieważ lcd zamiast wyświetlać cały zaokrągla go do dwóch miejsc po przecinku.
#include <LiquidCrystal.h>
#include <EEPROM.h>
LiquidCrystal lcd(2, 3, 4, 5, 6, 7); // deklaracja wyświetlacza
float h = 0; //godzina
unsigned long change; // czas zmiany
unsigned long now; //teraz
int m;
int s;
float kwh;
float zl;
void setup() {
lcd.begin(16, 2); // wyświetlacz
lcd.setCursor (0, 0);
pinMode (12,INPUT);
pinMode (11,INPUT);
EEPROM.get(0, h);
change = millis()+60000;
}
void loop() {
now = millis(); //czas teraz
if(now >= change) //liczenie czasu
{
h = h+0.0165;
change = now+change;
}
if(digitalRead(12) == HIGH) //przycisk do menu
{
delay(200);
m = m+1;
lcd.clear();
}
switch(m) //menu
{
case 0:
{
lcd.setCursor (0, 0);
lcd.print("Godziny: ");
lcd.setCursor (0, 1);
lcd.print(h);
break;
}
case 1:
{
kwh = h*0.1;
lcd.setCursor (0, 0);
lcd.print("kWh");
lcd.setCursor (0, 1);
lcd.print(kwh);
break;
}
case 2:
{
zl = kwh*0.6;
lcd.setCursor (0, 0);
lcd.print("Zl");
lcd.setCursor (0, 1);
lcd.print(zl);
break;
}
case 3:
{
lcd.print("Czy chcesz usunąć pliki");
lcd.setCursor (0, 1);
for(int i = 0; i<10; i--)
{
delay(20);
if(digitalRead(12)== HIGH )
{
m = 0;
delay(200);
break;
}
if(digitalRead(11)== HIGH )
{
for (int i = 0; i<10; i++)
{
EEPROM.write(i, 0);
m = 0;
}
lcd.print("Usunieto pliki");
delay(2000);
break;
}
}
lcd.clear();
break;
}
}
if(digitalRead(11) == HIGH)
{
for (int i = 0; i<10; i++)
{
EEPROM.write(i, 0);
}
lcd.clear();
delay(500);
EEPROM.put(0, h);
lcd.print("Zapisano pliki");
delay(5000);
lcd.clear();
}
}