13-06-2016, 21:44
Kod:
//#include <ShiftRegLCD123.h>
//ShiftRegLCD123 lcd( 7, 6, SRLCD123);
#include <Wire.h>
#include "RTClib.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Addr, En, Rw, Rs, d4, d5, d6, d7, backlightpin, polarity
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress Termo1 = { 0x28, 0x6E, 0xC0, 0x03, 0x00, 0x00, 0x80, 0xE8 };
DeviceAddress Termo2 = { 0x28, 0x7D, 0xC8, 0x03, 0x00, 0x00, 0x80, 0xD4 };
RTC_DS1307 rtc;
int rok ;
byte miesiac ;
byte dzien ;
byte godzina ;
byte minuta ;
byte sekunda ;
long pm ;
long zm ;
byte Lcd = 2;
int POM[10];
byte x = 0 ;
long Pm = 0 ;
byte Srednia = 0 ;
byte LPG = 0 ;
byte s = 0 ;
void setup () {
lcd.begin(20,4);
lcd.backlight();
lcd.clear();
sensors.begin();
sensors.setResolution(Termo1, 12);
sensors.setResolution(Termo2, 12);
Serial.begin(9600);
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
rtc.adjust(DateTime(2016, 5, 6, 18, 15, 0));
}
}
void loop () {
sensors.requestTemperatures();
long cm = millis();
if ( cm - zm > 10000 ){
Lcd ++ ;lcd.clear();zm = cm;
if (Lcd > 1)Lcd = 1;
}
DateTime now = rtc.now();
rok = now.year(),DEC;
miesiac = now.month(),DEC;
dzien = now.day(),DEC;
godzina = now.hour(),DEC;
minuta = now.minute(),DEC;
sekunda = now.second(),DEC;
if ( cm - pm >= 500 ){
int pom = analogRead(A0)/4;
POM[x] = pom ;
x = x + 1 ;
pm = cm ;
}
if ( x > 9 ){
Srednia = (POM[0]+POM[1]+POM[2]+POM[3]+POM[4]+
POM[5]+POM[6]+POM[7]+POM[8]+POM[9])/10 ;
x = 0;}
LPG = map( Srednia,42,232,0,100 ); // podstaw za 2 pierwsze zmienne dla 0 min odczyt z czujnika
switch(Lcd){
case 1:
lcd.setCursor(5, 0);
lcd.print(zero(dzien));
lcd.print('/');
lcd.print(zero(miesiac));
lcd.print("/");
lcd.print(rok);
lcd.print(" ");
lcd.setCursor(6, 1);
lcd.print(zero(godzina));
lcd.print(":");
lcd.print(zero(minuta));
lcd.print(":");
lcd.print(zero(sekunda));
lcd.print(" ");
lcd.setCursor(0, 2);
lcd.print("LPG PALIWO");
lcd.setCursor(16, 2);
lcd.print(sto(LPG));
lcd.print('%');
lcd.setCursor(0, 3);
lcd.print('E');
lcd.setCursor(19, 3);
lcd.print('F');
s = map(LPG,0,100,1,19);
for ( int i = 1 ; i < s ; i++){
lcd.setCursor(i, 3);
lcd.print((char)255);
}
break;
}
}
int zero(int number) {
if (number < 10){lcd.print('0');}
return number;}
int sto(int number) {
if (number < 100){lcd.print(' ');}
if (number < 10){lcd.print(' ');}
return number;}
Termometry wywaliłem bo nie umiem ogarnąć tematu. Zrobiłem sobie pod nowy ekran. Nie umiem aby do końca wywalić przełączania ekranów i co jakiś czas ekran przygasa jakby miał się przełączyć. finalnie raczej zostaje tak jak jest.
Mogę prosić jedynie o wyczyszczenie programu z tego przełączania ekranów do końca?