• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
SandBox 5 - MenuBackend - strach ma wielkie oczy?
#6
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.

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! Smile
 
Odpowiedź
  


Wiadomości w tym wątku
RE: SandBox 5 - MenuBackend - strach ma wielkie oczy? - przez Lobaf - 16-02-2016, 16:05

Skocz do:


Przeglądający: 1 gości