Wiesz, w tym przykładzie ( notabene to jeden z Twoich z innego forum ) klawisze działają bez zarzutu, dodam, ze mam jeszcze czwarty przycisk na pinie 3.
Zadziałało w ten sposób:
No to teraz mogę się bawić! Dziękuję Wojtku!
Kod:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#define ONE_WIRE_BUS 12
#define prze 8
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
char *k0="Akt.Temp. = ";
char *k1=" <> Temp. = ";
char *k2=" C";
char *k3=" Ustawiono!";
int temp=23;
// int nastaw = 26; // ustaw temperature
volatile int histereza=0;
void setup(void)
{
pinMode(5,INPUT_PULLUP);
pinMode(4,INPUT_PULLUP);
pinMode(6,INPUT_PULLUP);
pinMode(prze,OUTPUT);
lcd.begin(20, 4);
sensors.begin();
Serial.begin(9600);
}
int getButton(int bG, int bD, int oK)
{
if(digitalRead(bG)==LOW){delay(30);if(digitalRead(bG)==LOW)return 2;}
if(digitalRead(bD)==LOW){delay(30);if(digitalRead(bD)==LOW)return 8;}
if(digitalRead(oK)==LOW){delay(30);if(digitalRead(oK)==LOW)return 5;}
return -1;
}
// ---------------------------------------------------------------------------------
//void ekran(char *kL, int v ,char *kP="",int wiersz=1)
//{
// if(wiersz>=0)
// {
// lcd.setCursor(0,wiersz);lcd.print(" ");
// lcd.setCursor(0,wiersz);lcd.print(kL);lcd.print(v);lcd.print(kP);
// }
// else {Serial.print(kL);Serial.print(v);Serial.println(kP);}
//}
// ---------------------------------------------------------------------------------
//void ekran(char *kK,int wiersz=1)
//{
// if(wiersz>=0)
// {
// lcd.setCursor(0,wiersz);lcd.print(" ");
// lcd.setCursor(0,wiersz);lcd.print(kK);
// }
// else Serial.print(kK);
//}
// ---------------------------------------------------------------------------------
int nastawy(int v, int vmin, int vmax)
{
lcd.setCursor (16, 1);
lcd.print(v);
lcd.write(byte(223));
// ekran(k0,v,k2);
int zm=-1;
int x=-1;
while(x!=5)
{
x=getButton(5,4,6);
if(x!=zm)
{
switch(x)
{
case 2: v++;if(v>vmax)v=vmax;lcd.setCursor (16, 1);lcd.print(v);break;
case 8: v--;if(v<vmin)v=vmin;lcd.setCursor (16, 1);lcd.print(v);break;
case 5: lcd.setCursor (16, 1);lcd.print("OK");delay(2000);return v;break;
}
}
zm=x;
}
}
// ---------------------------------------------------------------------------------
void loop() {
sensors.requestTemperatures();
lcd.setCursor(0,3);
lcd.print("T=");
lcd.print(sensors.getTempCByIndex(0));
lcd.print(" ");
lcd.print("N=");
lcd.print(temp);
if (sensors.getTempCByIndex(0) < (temp+histereza)) {
digitalWrite(prze,HIGH);
} else {
histereza=-2;
digitalWrite(prze,LOW);
}{
lcd.setCursor(0,0);lcd.print("< USTAWIENIA >");
temp=nastawy(temp,0,40);
//delay(2000);
}}
Zadziałało w ten sposób:
Kod:
void setup()
{
pinMode(3,INPUT_PULLUP);
pinMode(4,INPUT_PULLUP);
pinMode(5,INPUT_PULLUP);
pinMode(6,INPUT_PULLUP);
pinMode(7,INPUT_PULLUP);
menuSetup(); // przygotowanie menu do pracy
Serial.begin(9600); // konfiguracja dla Seriala
}
Kod:
int czytaj()
{
int gora=5, lewo=7, ok=6, prawo=4, dol=3;
if(digitalRead(prawo)==LOW){delay(30);if(digitalRead(prawo)==LOW)return 0;}
if(digitalRead(gora)==LOW){delay(30);if(digitalRead(gora)==LOW)return 1;}
if(digitalRead(dol)==LOW){delay(30);if(digitalRead(dol)==LOW)return 2;}
if(digitalRead(lewo)==LOW){delay(30);if(digitalRead(lewo)==LOW)return 3;}
if(digitalRead(ok)==LOW){delay(30);if(digitalRead(ok)==LOW)return 4;}
return -1;
}
No to teraz mogę się bawić! Dziękuję Wojtku!