programrészthez segtiség kérés

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
K_JANOS
DrótVégénSzéndarab
Hozzászólások: 22
Csatlakozott: 2015. július 28. kedd, 15:20

programrészthez segtiség kérés

Hozzászólás Szerző: K_JANOS »

Tisztelt kollégák !

Az arduino progranozásba kezdö vagyok, szeretnék egy 10-zonás öntözöt késziteni.A program 90%-kát már meg irtam,egy
részletnél meg akadtam, a locsolási napok száma,hogy 1,2,3,4.5 legyen erre nem tudom a megfelelö kódot kitaláni.
Az idöt egy valósidejü órábol olvasom ki (dátumot is lehet). Probálkoztam pl. a if(ora==23&&perc==59&&masodperc==58)
{nap++;} egyelöséggel, hogy igy növeljem a napok számát. A gond ennél a megoldásnál , mivel a föprogramba van ,hogy a körülfordulásnál az 58 kevés és nem
növeli a nap számlálot vagy sok és a feltétel ujra meg lalálja és több ször növeli a nap számot. Küldöm a progit is , kérlek ,hogy segitsetek

Üdv.János

#include <LiquidCrystal_I2C.h> // arduino_uno_rev3, ATMEGA328P-PU
#include <Wire.h>
#include <EEPROM.h>

#define rtc0x68
#define i2c 0x20

LiquidCrystal_I2C lcd(0x20,16,2);

byte ora;
byte perc;
byte masodperc;
byte z1_ora_bek; // táthely foglalások a bekapcsolási és kikapcsolási idökhöz
byte z1_perc_bek;
byte z1_ora_kik;
byte z1_perc_kik;
byte z2_ora_bek;
byte z2_perc_bek;
byte z2_ora_kik;
byte z2_perc_kik;
byte z3_ora_bek;
byte z3_perc_bek;
byte z3_ora_kik;
byte z3_perc_kik;
byte z4_ora_bek;
byte z4_perc_bek;
byte z4_ora_kik;
byte z4_perc_kik;
byte z5_ora_bek;
byte z5_perc_bek;
byte z5_ora_kik;
byte z5_perc_kik;
byte z6_ora_bek;
byte z6_perc_bek;
byte z6_ora_kik;
byte z6_perc_kik;
byte z7_ora_bek;
byte z7_perc_bek;
byte z7_ora_kik;
byte z7_perc_kik;
byte z8_ora_bek;
byte z8_perc_bek;
byte z8_ora_kik;
byte z8_perc_kik;
byte z9_ora_bek;
byte z9_perc_bek;
byte z9_ora_kik;
byte z9_perc_kik;
byte z10_ora_bek;
byte z10_perc_bek;
byte z10_ora_kik;
byte z10_perc_kik;
byte z1_port=254; // pcf port 0 és 1-es zona
byte z2_port=253; // pcf port 1
byte z3_port=251;
byte z4_port=247;
byte ont_napok_szama;
byte napok_szama;
byte gomb1=1;
byte gomb2=2;
byte gomb3=3;
byte eso_senzor=4; // ATMEGA328P-PU-nak 6-os lába
byte zona10=5; // A pin számozások arduino panel kivezetés
byte zona9=6;
byte zona8=7;
byte zona7=8;
byte zona5=9;
byte zona6=11;
byte y =255; // a portra küldendö számok

void setup()
{
lcd.init();
Serial.begin(9600);
Wire.begin();
lcd.clear();
lcd.begin(16, 2);
pinMode(gomb1,INPUT);
pinMode(gomb2,INPUT);
pinMode(gomb3,INPUT);
pinMode(eso_senzor,INPUT);
pinMode(zona5,OUTPUT);
pinMode(zona6,OUTPUT);
pinMode(zona7,OUTPUT);
pinMode(zona8,OUTPUT);
pinMode(zona9,OUTPUT);
pinMode(zona10,OUTPUT);
y=255; // PCF 8574 portját H-szintre állitja ( a szelepet L-szint kapcsolja)
pcf_port(); // a pcf8574 i2c bus rutin
}

void loop() // fő program
{
Wire.beginTransmission(104); // ds 1307 104 decimális érték
Wire.write(0x00);
Wire.endTransmission(); // stop
Wire.requestFrom(104, 7);
masodperc = Wire.read();
perc = Wire.read();
ora = Wire.read();
ora=ora/16 * 10 + ora % 16; // bcd szám ,decimálisra átalakitás
perc=perc/16 * 10 + perc % 16;
masodperc=masodperc/16 * 10 + masodperc % 16;
if(ora==23&&perc==59&&masodperc==59) {napok_szama++;} // FIGYELEM !!! rossz a rutin a napok száma ha meg haladja a locsolási napok számát nem fog öntözni !
if(napok_szama==5) {napok_szama=1;}
if(digitalRead(eso_senzor)==0&&ont_napok_szama==napok_szama) // akkor locsol, ha az esőszenzor=0-val és a be állitot locsolási napok meg egyeznek az órábol képzet
{ // ?
bekapcs_kikapcs_figyeles(); // napok számával
}
fokepernyo(); // a fő programba rakni ? és az LCD nem villogna .
eeprom_olvas();
if(digitalRead(1)==0)
{
beallitas();
delay(1000);
}
}

void fokepernyo()
{
lcd.clear();
lcd.setCursor(5, 0); // 0-lás sor 5-ös karakterhely
lcd.write(239); // az ö-betü kódja
lcd.print("nt");
lcd.write(239);
lcd.print("z");
lcd.write(239);
lcd.setCursor(4, 1); // 1-gyes sor 4-e karakter hely
lcd.print(ora);
lcd.print(":");
if(perc<10) {lcd.print("0");}
lcd.print(perc);
lcd.print(":");
if(masodperc<10) {lcd.print("0");}
lcd.print(masodperc);
delay(1000); // a brékelésen sokat segitet ! igy nyugott az lcd
}

void beallitas()
{
lcd.clear(); // öntözisi napok száma
lcd.setCursor(5,0);
lcd.write(239);
lcd.print("nt");
lcd.write(239);
lcd.print("zes");
lcd.setCursor(5,1);
lcd.print("naponta");
lcd.setCursor(3,1);
lcd.print(ont_napok_szama);
delay(1000);
while(digitalRead(1)==1)
{
if(digitalRead(2)==0)
{
ont_napok_szama++;
EEPROM.write(40,ont_napok_szama);
lcd.setCursor(3,1);
lcd.print(ont_napok_szama);
delay(500);
}
if (ont_napok_szama==5)
{
ont_napok_szama=1;
}
if(digitalRead(3)==0)
{
ont_napok_szama--;
EEPROM.write(40,ont_napok_szama);
lcd.setCursor(3,1);
lcd.print(ont_napok_szama);
delay(500);
}
if (ont_napok_szama==0)
{
ont_napok_szama=1;
}
} //------------------------------------------------------------------------------------------------------------------}


lcd.clear(); // szelepteszt 1-es zona
lcd.setCursor(2, 0);
lcd.print("szelep");
lcd.setCursor(9,0);
lcd.print("teszt");
lcd.setCursor(5, 1);
lcd.print("z1");
lcd.setCursor(9, 1);
lcd.print("ki");
delay(500);
while(digitalRead(1)==1)
{
if(digitalRead(2)==0) {lcd.setCursor(9, 1);lcd.print("be");y=z1_port;pcf_port();delay(500);} // a 2-es gomb bekapcsolja a szelepet
if(digitalRead(3)==0) {lcd.setCursor(9, 1);lcd.print("ki");pcf_port_ki();delay(500);} // a 3-as gomb kikapcsolja
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
pcf_port_ki();
lcd.setCursor(9, 1);
lcd.print("ki");
lcd.setCursor(5, 1); // szelepteszt 2-es zona
lcd.print("z2");
delay(500);
while(digitalRead(1)==1)
{
if(digitalRead(2)==0) {lcd.setCursor(9, 1);lcd.print("be");y=z2_port;pcf_port();delay(500);} // a 2-es gomb bekapcsolja a szelepet
if(digitalRead(3)==0) {lcd.setCursor(9, 1);lcd.print("ki");pcf_port_ki();delay(500);} // a 3-as gomb kikapcsolja
}
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
pcf_port_ki();
lcd.setCursor(9, 1);
lcd.print("ki");
lcd.setCursor(5, 1); // szelepteszt 3-as zona
lcd.print("z3");
delay(500);
while(digitalRead(1)==1)
{
if(digitalRead(2)==0) {lcd.setCursor(9, 1);lcd.print("be");y=z3_port;pcf_port();delay(500);} // a 2-es gomb bekapcsolja a szelepet
if(digitalRead(3)==0) {lcd.setCursor(9, 1);lcd.print("ki");pcf_port_ki();delay(500);} // a 3-as gomb kikapcsolja
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
pcf_port_ki();
lcd.setCursor(9, 1);
lcd.print("ki");
lcd.setCursor(5, 1); // szelepteszt 4-as zona
lcd.print("z4");
delay(500);
while(digitalRead(1)==1)
{
if(digitalRead(2)==0) {lcd.setCursor(9, 1);lcd.print("be");y=z4_port;pcf_port();delay(500);} // a 2-es gomb bekapcsolja a szelepet
if(digitalRead(3)==0) {lcd.setCursor(9, 1);lcd.print("ki");pcf_port_ki();delay(500);} // a 3-as gomb kikapcsolja
}
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
pcf_port_ki();
lcd.setCursor(9, 1);
lcd.print("ki");
lcd.setCursor(5, 1); // szelepteszt 5-as zona
lcd.print("z5");
delay(500);
while(digitalRead(1)==1)
{
if(digitalRead(2)==0) {lcd.setCursor(9, 1);lcd.print("be");digitalWrite(zona5,HIGH);delay(500);} // a 2-es gomb bekapcsolja a szelepet
if(digitalRead(3)==0) {lcd.setCursor(9, 1);lcd.print("ki");digitalWrite(zona5,LOW);delay(500);} // a 3-as gomb kikapcsolja
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
pcf_port_ki();
lcd.setCursor(9, 1);
lcd.print("ki");
lcd.setCursor(5, 1); // szelepteszt 6-as zona
lcd.print("z6");
delay(500);
while(digitalRead(1)==1)
{
if(digitalRead(2)==0) {lcd.setCursor(9, 1);lcd.print("be");digitalWrite(zona6,HIGH);delay(500);} // a 2-es gomb bekapcsolja a szelepet
if(digitalRead(3)==0) {lcd.setCursor(9, 1);lcd.print("ki");digitalWrite(zona6,LOW);delay(500);} // a 3-as gomb kikapcsolja
}

//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
pcf_port_ki();
lcd.setCursor(9, 1);
lcd.print("ki");
lcd.setCursor(5, 1); // szelepteszt 7-as zona
lcd.print("z7");
delay(500);
while(digitalRead(1)==1)
{
if(digitalRead(2)==0) {lcd.setCursor(9, 1);lcd.print("be");digitalWrite(zona7,HIGH);delay(500);} // a 2-es gomb bekapcsolja a szelepet
if(digitalRead(3)==0) {lcd.setCursor(9, 1);lcd.print("ki");digitalWrite(zona7,LOW);delay(500);} // a 3-as gomb kikapcsolja
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
pcf_port_ki();
lcd.setCursor(9, 1);
lcd.print("ki");
lcd.setCursor(5, 1); // szelepteszt 8-as zona
lcd.print("z8");
delay(500);
while(digitalRead(1)==1)
{
if(digitalRead(2)==0) {lcd.setCursor(9, 1);lcd.print("be");digitalWrite(zona8,HIGH);delay(500);} // a 2-es gomb bekapcsolja a szelepet
if(digitalRead(3)==0) {lcd.setCursor(9, 1);lcd.print("ki");digitalWrite(zona8,LOW);delay(500);} // a 3-as gomb kikapcsolja
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
pcf_port_ki();
lcd.setCursor(9, 1);
lcd.print("ki");
lcd.setCursor(5, 1); // szelepteszt 9-as zona
lcd.print("z9");
delay(500);
while(digitalRead(1)==1)
{
if(digitalRead(2)==0) {lcd.setCursor(9, 1);lcd.print("be");digitalWrite(zona9,HIGH);delay(500);} // a 2-es gomb bekapcsolja a szelepet
if(digitalRead(3)==0) {lcd.setCursor(9, 1);lcd.print("ki");digitalWrite(zona9,LOW);delay(500);} // a 3-as gomb kikapcsolja
} //---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
pcf_port_ki();
lcd.setCursor(9, 1);
lcd.print("ki");
lcd.setCursor(5, 1); // szelepteszt 10-as zona
lcd.print("z10");
delay(500);
while(digitalRead(1)==1)
{
if(digitalRead(2)==0) {lcd.setCursor(9, 1);lcd.print("be");digitalWrite(zona10,HIGH);delay(500);} // a 2-es gomb bekapcsolja a szelepet
if(digitalRead(3)==0) {lcd.setCursor(9, 1);lcd.print("ki");digitalWrite(zona10,LOW);delay(500);} // a 3-as gomb kikapcsolja
}
digitalWrite(zona10,LOW);
lcd.setCursor(9, 1);
lcd.print("ki");


lcdbe(); //------------------------------------------------------------------------------------------------------------------------------------------
lcd.print("z1"); // 1-es zona
delay(1000);
while(digitalRead(1)==1) // a zona bekapcsolási idejének be állitása
{
lcd.setCursor(5, 1);
if(z1_ora_bek<10) {lcd.print("0");}
lcd.print(z1_ora_bek); // a bekapcsolási óra adat regisztere
lcd.print(":");
delay(500);
if(digitalRead(2)==0) { z1_ora_bek++; EEPROM.write(0,z1_ora_bek);delay(500);} // a 2-es gomb az óra ki-bekapcsolás állitás

if(z1_ora_bek==24) {z1_ora_bek=0;}

lcd.setCursor(8, 1);
if(z1_perc_bek<10) {lcd.print("0");}
lcd.print(z1_perc_bek);
delay(500);
if(digitalRead(3)==0) {z1_perc_bek++; EEPROM.write(1,z1_perc_bek); delay(500);} // 3-as gomb a perc ki-bekapcsolás állitás

if(z1_perc_bek==60) {z1_perc_bek=0; delay(500);}
}
lcdki();
lcd.print("z1");
delay(1000);
while(digitalRead(1)==1) // a zona kikapcsolási idejének be állitása
{
lcd.setCursor(5, 1);
if(z1_ora_kik<10) {lcd.print("0");}
lcd.print(z1_ora_kik);
lcd.print(":");
delay(500);
if(digitalRead(2)==0) {z1_ora_kik++; EEPROM.write(2,z1_ora_kik); delay(500); }
if(z1_ora_kik==24) { z1_ora_kik=0; }
lcd. setCursor(8, 1);
if(z1_perc_kik<10) { lcd.print("0");}
lcd.print(z1_perc_kik);
if(digitalRead(3)==0) {z1_perc_kik++; EEPROM.write(3,z1_perc_kik); delay(500);}
if(z1_perc_kik==60) {z1_perc_kik=0;}
}
lcdbe(); //----------------------------------------------------------------------------------------------------------------------------------------------------------------
lcd.print("z2"); // 2-es zona
delay(1000);
while(digitalRead(1)==1) // a zona bekapcsolási idejének be állitása
{
lcd.setCursor(5, 1);
if(z2_ora_bek<10) {lcd.print("0");}
lcd.print(z2_ora_bek); // a bekapcsolási óra adat regisztere
lcd.print(":");
delay(500);
if(digitalRead(2)==0) { z2_ora_bek++; EEPROM.write(4,z2_ora_bek);delay(500);} // a 2-es gomb az óra ki-bekapcsolás állitás

if(z2_ora_bek==24) {z2_ora_bek=0;}

lcd.setCursor(8, 1);
if(z2_perc_bek<10) {lcd.print("0");}
lcd.print(z2_perc_bek);
delay(500);
if(digitalRead(3)==0) {z2_perc_bek++; EEPROM.write(5,z2_perc_bek); delay(500);} // 3-as gomb a perc ki-bekapcsolás állitás

if(z2_perc_bek==60) {z2_perc_bek=0; delay(500);}
}
lcdki();
lcd.print("z2");
delay(1000);
while(digitalRead(1)==1) // a zona kikapcsolási idejének be állitása
{
lcd.setCursor(5, 1);
if(z2_ora_kik<10) {lcd.print("0");}
lcd.print(z2_ora_kik);
lcd.print(":");
delay(500);
if(digitalRead(2)==0) {z2_ora_kik++; EEPROM.write(6,z2_ora_kik); delay(500); }
if(z2_ora_kik==24) { z2_ora_kik=0; }
lcd. setCursor(8, 1);
if(z2_perc_kik<10) { lcd.print("0");}
lcd.print(z2_perc_kik);
if(digitalRead(3)==0) {z2_perc_kik++; EEPROM.write(7,z2_perc_kik); delay(500);}
if(z2_perc_kik==60) {z2_perc_kik=0;}
}

lcdbe(); //----------------------------------------------------------------------------------------------------------------------------------------------------------------
lcd.print("z3"); // 3-es zona
delay(1000);
while(digitalRead(1)==1) // a zona bekapcsolási idejének be állitása
{
lcd.setCursor(5, 1);
if(z3_ora_bek<10) {lcd.print("0");}
lcd.print(z3_ora_bek); // a bekapcsolási óra adat regisztere
lcd.print(":");
delay(500);
if(digitalRead(2)==0) { z3_ora_bek++; EEPROM.write(8,z3_ora_bek);delay(500);} // a 2-es gomb az óra ki-bekapcsolás állitás

if(z3_ora_bek==24) {z3_ora_bek=0;}

lcd.setCursor(8, 1);
if(z3_perc_bek<10) {lcd.print("0");}
lcd.print(z3_perc_bek);
delay(500);
if(digitalRead(3)==0) {z3_perc_bek++; EEPROM.write(9,z3_perc_bek); delay(500);} // 3-as gomb a perc ki-bekapcsolás állitás

if(z3_perc_bek==60) {z3_perc_bek=0; delay(500);}
}
lcdki();
lcd.print("z3");
delay(1000);
while(digitalRead(1)==1) // a zona kikapcsolási idejének be állitása
{
lcd.setCursor(5, 1);
if(z3_ora_kik<10) {lcd.print("0");}
lcd.print(z3_ora_kik);
lcd.print(":");
delay(500);
if(digitalRead(2)==0) {z3_ora_kik++; EEPROM.write(10,z3_ora_kik); delay(500); }
if(z3_ora_kik==24) { z3_ora_kik=0; }
lcd. setCursor(8, 1);
if(z3_perc_kik<10) { lcd.print("0");}
lcd.print(z3_perc_kik);
if(digitalRead(3)==0) {z3_perc_kik++; EEPROM.write(11,z3_perc_kik); delay(500);}
if(z3_perc_kik==60) {z3_perc_kik=0;}
}
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

lcdbe();
lcd.print("z4"); // 4-es zona
delay(1000);
while(digitalRead(1)==1) // a zona bekapcsolási idejének be állitása
{
lcd.setCursor(5, 1);
if(z4_ora_bek<10) {lcd.print("0");}
lcd.print(z4_ora_bek); // a bekapcsolási óra adat regisztere
lcd.print(":");
delay(500);
if(digitalRead(2)==0) { z4_ora_bek++; EEPROM.write(12,z4_ora_bek);delay(500);} // a 2-es gomb az óra ki-bekapcsolás állitás

if(z4_ora_bek==24) {z4_ora_bek=0;}

lcd.setCursor(8, 1);
if(z4_perc_bek<10) {lcd.print("0");}
lcd.print(z4_perc_bek);
delay(500);
if(digitalRead(3)==0) {z4_perc_bek++; EEPROM.write(13,z4_perc_bek); delay(500);} // 3-as gomb a perc ki-bekapcsolás állitás

if(z4_perc_bek==60) {z4_perc_bek=0; delay(500);}
}
lcdki();
lcd.print("z4");
delay(1000);
while(digitalRead(1)==1) // a zona kikapcsolási idejének be állitása
{
lcd.setCursor(5, 1);
if(z4_ora_kik<10) {lcd.print("0");}
lcd.print(z4_ora_kik);
lcd.print(":");
delay(500);
if(digitalRead(2)==0) {z4_ora_kik++; EEPROM.write(14,z4_ora_kik); delay(500); }
if(z4_ora_kik==24) { z4_ora_kik=0; }
lcd. setCursor(8, 1);
if(z4_perc_kik<10) { lcd.print("0");}
lcd.print(z4_perc_kik);
if(digitalRead(3)==0) {z4_perc_kik++; EEPROM.write(15,z4_perc_kik); delay(500);}
if(z4_perc_kik==60) {z4_perc_kik=0;}
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
lcdbe(); // 5-es zona
lcd.print("z5");
delay(1000);
while(digitalRead(1)==1) // a zona bekapcsolási idejének be állitása
{
lcd.setCursor(5, 1);
if(z5_ora_bek<10) {lcd.print("0");}
lcd.print(z5_ora_bek); // a bekapcsolási óra adat regisztere
lcd.print(":");
delay(500);
if(digitalRead(2)==0) { z5_ora_bek++; EEPROM.write(16,z5_ora_bek);delay(500);} // a 2-es gomb az óra ki-bekapcsolás állitás

if(z5_ora_bek==24) {z5_ora_bek=0;}

lcd.setCursor(8, 1);
if(z5_perc_bek<10) {lcd.print("0");}
lcd.print(z5_perc_bek);
delay(500);
if(digitalRead(3)==0) {z5_perc_bek++; EEPROM.write(17,z5_perc_bek); delay(500);} // 3-as gomb a perc ki-bekapcsolás állitás

if(z5_perc_bek==60) {z5_perc_bek=0; delay(500);}
}
lcdki();
lcd.print("z5");
delay(1000);
while(digitalRead(1)==1) // a zona kikapcsolási idejének be állitása
{
lcd.setCursor(5, 1);
if(z5_ora_kik<10) {lcd.print("0");}
lcd.print(z5_ora_kik);
lcd.print(":");
delay(500);
if(digitalRead(2)==0) {z5_ora_kik++; EEPROM.write(18,z5_ora_kik); delay(500); }
if(z5_ora_kik==24) { z5_ora_kik=0; }
lcd. setCursor(8, 1);
if(z5_perc_kik<10) { lcd.print("0");}
lcd.print(z5_perc_kik);
if(digitalRead(3)==0) {z5_perc_kik++; EEPROM.write(19,z5_perc_kik); delay(500);}
if(z5_perc_kik==60) {z5_perc_kik=0;}
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
lcdbe(); // 6-es zona
lcd.print("z6");
delay(1000);
while(digitalRead(1)==1) // a zona bekapcsolási idejének be állitása
{
lcd.setCursor(5, 1);
if(z6_ora_bek<10) {lcd.print("0");}
lcd.print(z6_ora_bek); // a bekapcsolási óra adat regisztere
lcd.print(":");
delay(500);
if(digitalRead(2)==0) { z6_ora_bek++; EEPROM.write(20,z6_ora_bek);delay(500);} // a 2-es gomb az óra ki-bekapcsolás állitás

if(z6_ora_bek==24) {z6_ora_bek=0;}

lcd.setCursor(8, 1);
if(z6_perc_bek<10) {lcd.print("0");}
lcd.print(z6_perc_bek);
delay(500);
if(digitalRead(3)==0) {z6_perc_bek++; EEPROM.write(21,z6_perc_bek); delay(500);} // 3-as gomb a perc ki-bekapcsolás állitás

if(z6_perc_bek==60) {z6_perc_bek=0; delay(500);}
}
lcdki();
lcd.print("z6");
delay(1000);
while(digitalRead(1)==1) // a zona kikapcsolási idejének be állitása
{
lcd.setCursor(5, 1);
if(z6_ora_kik<10) {lcd.print("0");}
lcd.print(z6_ora_kik);
lcd.print(":");
delay(500);
if(digitalRead(2)==0) {z6_ora_kik++; EEPROM.write(22,z6_ora_kik); delay(500); }
if(z6_ora_kik==24) { z6_ora_kik=0; }
lcd. setCursor(8, 1);
if(z6_perc_kik<10) { lcd.print("0");}
lcd.print(z6_perc_kik);
if(digitalRead(3)==0) {z6_perc_kik++; EEPROM.write(23,z6_perc_kik); delay(500);}
if(z6_perc_kik==60) {z6_perc_kik=0;}
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
lcdbe(); // 7-es zona
lcd.print("z7");
delay(1000);
while(digitalRead(1)==1) // a zona bekapcsolási idejének be állitása
{
lcd.setCursor(5, 1);
if(z7_ora_bek<10) {lcd.print("0");}
lcd.print(z7_ora_bek); // a bekapcsolási óra adat regisztere
lcd.print(":");
delay(500);
if(digitalRead(2)==0) { z7_ora_bek++; EEPROM.write(24,z7_ora_bek);delay(500);} // a 2-es gomb az óra ki-bekapcsolás állitás

if(z7_ora_bek==24) {z7_ora_bek=0;}

lcd.setCursor(8, 1);
if(z7_perc_bek<10) {lcd.print("0");}
lcd.print(z7_perc_bek);
delay(500);
if(digitalRead(3)==0) {z7_perc_bek++; EEPROM.write(25,z7_perc_bek); delay(500);} // 3-as gomb a perc ki-bekapcsolás állitás

if(z7_perc_bek==60) {z7_perc_bek=0; delay(500);}
}
lcdki();
lcd.print("z7");
delay(1000);
while(digitalRead(1)==1) // a zona kikapcsolási idejének be állitása
{
lcd.setCursor(5, 1);
if(z7_ora_kik<10) {lcd.print("0");}
lcd.print(z7_ora_kik);
lcd.print(":");
delay(500);
if(digitalRead(2)==0) {z7_ora_kik++; EEPROM.write(26,z7_ora_kik); delay(500); }
if(z7_ora_kik==24) { z7_ora_kik=0; }
lcd. setCursor(8, 1);
if(z7_perc_kik<10) { lcd.print("0");}
lcd.print(z7_perc_kik);
if(digitalRead(3)==0) {z7_perc_kik++; EEPROM.write(27,z7_perc_kik); delay(500);}
if(z7_perc_kik==60) {z7_perc_kik=0;}
}

//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
lcdbe(); // 8-es zona
lcd.print("z8");
delay(1000);
while(digitalRead(1)==1) // a zona bekapcsolási idejének be állitása
{
lcd.setCursor(5, 1);
if(z8_ora_bek<10) {lcd.print("0");}
lcd.print(z8_ora_bek); // a bekapcsolási óra adat regisztere
lcd.print(":");
delay(500);
if(digitalRead(2)==0) { z8_ora_bek++; EEPROM.write(28,z8_ora_bek);delay(500);} // a 2-es gomb az óra ki-bekapcsolás állitás

if(z8_ora_bek==24) {z8_ora_bek=0;}

lcd.setCursor(8, 1);
if(z8_perc_bek<10) {lcd.print("0");}
lcd.print(z8_perc_bek);
delay(500);
if(digitalRead(3)==0) {z8_perc_bek++; EEPROM.write(29,z8_perc_bek); delay(500);} // 3-as gomb a perc ki-bekapcsolás állitás

if(z8_perc_bek==60) {z8_perc_bek=0; delay(500);}
}
lcdki();
lcd.print("z8");
delay(1000);
while(digitalRead(1)==1) // a zona kikapcsolási idejének be állitása
{
lcd.setCursor(5, 1);
if(z8_ora_kik<10) {lcd.print("0");}
lcd.print(z8_ora_kik);
lcd.print(":");
delay(500);
if(digitalRead(2)==0) {z8_ora_kik++; EEPROM.write(30,z8_ora_kik); delay(500); }
if(z8_ora_kik==24) { z8_ora_kik=0; }
lcd. setCursor(8, 1);
if(z8_perc_kik<10) { lcd.print("0");}
lcd.print(z8_perc_kik);
if(digitalRead(3)==0) {z8_perc_kik++; EEPROM.write(31,z8_perc_kik); delay(500);}
if(z8_perc_kik==60) {z8_perc_kik=0;}
}

//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
lcdbe(); // 9-es zona
lcd.print("z9");
delay(1000);
while(digitalRead(1)==1) // a zona bekapcsolási idejének be állitása
{
lcd.setCursor(5, 1);
if(z9_ora_bek<10) {lcd.print("0");}
lcd.print(z9_ora_bek); // a bekapcsolási óra adat regisztere
lcd.print(":");
delay(500);
if(digitalRead(2)==0) { z9_ora_bek++; EEPROM.write(32,z9_ora_bek);delay(500);} // a 2-es gomb az óra ki-bekapcsolás állitás

if(z9_ora_bek==24) {z9_ora_bek=0;}

lcd.setCursor(8, 1);
if(z9_perc_bek<10) {lcd.print("0");}
lcd.print(z9_perc_bek);
delay(500);
if(digitalRead(3)==0) {z9_perc_bek++; EEPROM.write(33,z9_perc_bek); delay(500);} // 3-as gomb a perc ki-bekapcsolás állitás

if(z9_perc_bek==60) {z9_perc_bek=0; delay(500);}
}
lcdki();
lcd.print("z9");
delay(1000);
while(digitalRead(1)==1) // a zona kikapcsolási idejének be állitása
{
lcd.setCursor(5, 1);
if(z9_ora_kik<10) {lcd.print("0");}
lcd.print(z9_ora_kik);
lcd.print(":");
delay(500);
if(digitalRead(2)==0) {z9_ora_kik++; EEPROM.write(34,z9_ora_kik); delay(500); }
if(z9_ora_kik==24) { z9_ora_kik=0; }
lcd. setCursor(8, 1);
if(z9_perc_kik<10) { lcd.print("0");}
lcd.print(z9_perc_kik);
if(digitalRead(3)==0) {z9_perc_kik++; EEPROM.write(35,z9_perc_kik); delay(500);}
if(z9_perc_kik==60) {z9_perc_kik=0;}
}

//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
lcdbe(); // 10-es zona
lcd.print("z10");
delay(1000);
while(digitalRead(1)==1) // a zona bekapcsolási idejének be állitása
{
lcd.setCursor(5, 1);
if(z10_ora_bek<10) {lcd.print("0");}
lcd.print(z10_ora_bek); // a bekapcsolási óra adat regisztere
lcd.print(":");
delay(500);
if(digitalRead(2)==0) { z10_ora_bek++; EEPROM.write(36,z10_ora_bek);delay(500);} // a 2-es gomb az óra ki-bekapcsolás állitás

if(z10_ora_bek==24) {z10_ora_bek=0;}

lcd.setCursor(8, 1);
if(z10_perc_bek<10) {lcd.print("0");}
lcd.print(z10_perc_bek);
delay(500);
if(digitalRead(3)==0) {z10_perc_bek++; EEPROM.write(37,z10_perc_bek); delay(500);} // 3-as gomb a perc ki-bekapcsolás állitás

if(z10_perc_bek==60) {z10_perc_bek=0; delay(500);}
}
lcdki();
lcd.print("z10");
delay(1000);
while(digitalRead(1)==1) // a zona kikapcsolási idejének be állitása
{
lcd.setCursor(5, 1);
if(z10_ora_kik<10) {lcd.print("0");}
lcd.print(z10_ora_kik);
lcd.print(":");
delay(500);
if(digitalRead(2)==0) {z10_ora_kik++; EEPROM.write(38,z10_ora_kik); delay(500); }
if(z10_ora_kik==24) { z10_ora_kik=0; }
lcd. setCursor(8, 1);
if(z10_perc_kik<10) { lcd.print("0");}
lcd.print(z10_perc_kik);
if(digitalRead(3)==0) {z10_perc_kik++; EEPROM.write(39,z10_perc_kik); delay(500);}
if(z10_perc_kik==60) {z10_perc_kik=0;}
}


}

void lcdbe()
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("bekapcsol");
lcd.write(225); // 225 az á-betü karakterkód
lcd.print("s");
lcd.setCursor(12, 0);
}

void lcdki()
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("kikapcsol");
lcd.write(225); // 225 az á-betü karakterkód
lcd.print("s");
lcd.setCursor(12, 0);
}

void bekapcs_kikapcs_figyeles() // esöszenzort ide rakni?
{
if(z1_ora_bek==ora&&z1_perc_bek==perc) {y=z1_port; pcf_port();delay(500); } // zona1 bekapcsolása , P0-portot(pcf8574 ic)L-szintre állitja
if(z1_ora_kik==ora&&z1_perc_kik==perc) {pcf_port_ki();delay(500); } // az idökülömbségig locsól , 255D-vel minden portot H-szintre kapcsol,az optotriak kikapcsol
if(z2_ora_bek==ora&&z2_perc_bek==perc) {y=z2_port; pcf_port();delay(500);}
if(z2_ora_kik==ora&&z2_perc_kik==perc) {pcf_port_ki();delay(500);}
if(z3_ora_bek==ora&&z3_perc_bek==perc) {y=z3_port; pcf_port();delay(500);}
if(z3_ora_kik==ora&&z3_perc_kik==perc) {pcf_port_ki();delay(500);}
if(z4_ora_bek==ora&&z4_perc_bek==perc) {y=z4_port; pcf_port();delay(500);}
if(z4_ora_kik==ora&&z4_perc_kik==perc) {pcf_port_ki();delay(500);}
if(z5_ora_bek==ora&&z5_perc_bek==perc) {digitalWrite(zona5,HIGH);delay(500);}
if(z5_ora_kik==ora&&z5_perc_kik==perc) {digitalWrite(zona5,LOW);delay(500);}
if(z6_ora_bek==ora&&z6_perc_bek==perc) {digitalWrite(zona6,HIGH);delay(500);}
if(z6_ora_kik==ora&&z6_perc_kik==perc) {digitalWrite(zona6,LOW);delay(500);}
if(z7_ora_bek==ora&&z7_perc_bek==perc) {digitalWrite(zona7,HIGH);delay(500);}
if(z7_ora_kik==ora&&z7_perc_kik==perc) {digitalWrite(zona7,LOW);delay(500);}
if(z8_ora_bek==ora&&z8_perc_bek==perc) {digitalWrite(zona8,HIGH);delay(500);}
if(z8_ora_kik==ora&&z8_perc_kik==perc) {digitalWrite(zona8,LOW);delay(500);}
if(z9_ora_bek==ora&&z9_perc_bek==perc) {digitalWrite(zona9,HIGH);delay(500);}
if(z9_ora_kik==ora&&z9_perc_kik==perc) {digitalWrite(zona9,LOW);delay(500);}
if(z10_ora_bek==ora&&z10_perc_bek==perc) {digitalWrite(zona10,HIGH);delay(500);}
if(z10_ora_kik==ora&&z10_perc_kik==perc) {digitalWrite(zona10,LOW);delay(500);}
}

void eeprom_olvas()
{
z1_ora_bek=EEPROM.read(0);
z1_perc_bek=EEPROM.read(1);
z1_ora_kik=EEPROM.read(2);
z1_perc_kik=EEPROM.read(3);
z2_ora_bek=EEPROM.read(4);
z2_perc_bek=EEPROM.read(5);
z2_ora_kik=EEPROM.read(6);
z2_perc_kik=EEPROM.read(7);
z3_ora_bek=EEPROM.read(8);
z3_perc_bek=EEPROM.read(9);
z3_ora_kik=EEPROM.read(10);
z3_perc_kik=EEPROM.read(11);
z4_ora_bek=EEPROM.read(12);
z4_perc_bek=EEPROM.read(13);
z4_ora_kik=EEPROM.read(14);
z4_perc_kik=EEPROM.read(15);
z5_ora_bek=EEPROM.read(16);
z5_perc_bek=EEPROM.read(17);
z5_ora_kik=EEPROM.read(18);
z5_perc_kik=EEPROM.read(19);
z6_ora_bek=EEPROM.read(20);
z6_perc_bek=EEPROM.read(21);
z6_ora_kik=EEPROM.read(22);
z6_perc_kik=EEPROM.read(23);
z7_ora_bek=EEPROM.read(24);
z7_perc_bek=EEPROM.read(25);
z7_ora_kik=EEPROM.read(26);
z7_perc_kik=EEPROM.read(27);
z8_ora_bek=EEPROM.read(28);
z8_perc_bek=EEPROM.read(29);
z8_ora_kik=EEPROM.read(30);
z8_perc_kik=EEPROM.read(31);
z9_ora_bek=EEPROM.read(32);
z9_perc_bek=EEPROM.read(33);
z9_ora_kik=EEPROM.read(34);
z9_perc_kik=EEPROM.read(35);
z10_ora_bek=EEPROM.read(36);
z10_perc_bek=EEPROM.read(37);
z10_ora_kik=EEPROM.read(38);
z10_perc_kik=EEPROM.read(39);
ont_napok_szama=EEPROM.read(40);
}

void pcf_port() {Wire.beginTransmission(33); Wire.write(y);Wire.endTransmission();} // a pcf8574 i2c bus rutin
void pcf_port_ki() {Wire.beginTransmission(33); Wire.write(255);Wire.endTransmission();}
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: programrészthez segtiség kérés

Hozzászólás Szerző: kapu48 »

Ehhez a programhoz nem tudok hozzá szólni!??? (Vagy jót, vagy semmit!)

Talán ideteszek egy ki ollózott részletet az egyik hasonló projectemből.
A timer kezelésére. Hogy lássad az elvet.
A lényeg, hogy változást figyelek, és csak akkor kezdem meg annak feldolgozását.

Kód: Egész kijelölése

// Időzítés structura
struct SdateTime {
 uint8_t  set;        // érvényes?
 uint8_t  active;     // Az éppen aktiv érték:    |
 uint16_t year;       // Év                   | 1 |
 uint8_t  month;      // Hó                   | 2 |
 uint8_t  date;       // Nap                  | 3 |
 uint8_t  hour;       // Óra                  | 4 |
 uint8_t  minute;     // Perc                 | 5 |
 uint8_t  second;     // Másodperc            | 6 |
};

#define MAXTIMES    4

// Időzítéseknek tömbök
//SdateTime dateTimeT;
SdateTime startTimings[MAXTIMES];   // Be kapcsolás időpont
SdateTime  stopTimings[MAXTIMES];   // Ki kapcsolás időpont

DateTime now;
static uint8_t prevSecond = 0;
static uint8_t prevMinute = 0; 
static uint8_t prevDate = 0; 

String dtS, tmS;

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

/**    RTC!    Dátum idő kirakás a felső sorba.      */
    //Keep this as short as possible. Possibly avoid using function calls
//...
  now = rtc.now(); //get the current date-time         
    // formátum: 2015.12.31. 23:59:59
  if(prevSecond != (now.second())) timePrint(); 
}

//------------------------------------------ timePrint() --------------------------------------------
// Dátum Idő frissítése az GLCD Y0-ás sorban  prevMinute = 0; 
void timePrint(void){
    Tft.setTextColor(WHITE);
    Tft.setTextSize(2);
    prevSecond = now.second();

    startTimings[0].second = prevSecond;
    if( prevMinute == (now.minute())){
      if(startTimings[0].second < 10) {tmS = " ";}else{tmS = "";}
      tmS.concat(startTimings[0].second);
      Tft.setCursor(18 * 12, 0);
      Tft.fillRect(18 * 12, 0, 12 * 2, 16, menuk[currentMenu].boxColor[0]);
      Tft.print(tmS);

    } else {
      prevMinute = now.minute();

      startTimings[0].hour = (now.hour());
      startTimings[0].minute = (now.minute());

      if(startTimings[0].hour < 10) {tmS = " ";}else{tmS = "";}
      tmS.concat(startTimings[0].hour);
      tmS += ':';
      if(startTimings[0].minute < 10) {tmS += " ";}
      tmS.concat(startTimings[0].minute);
      tmS += ':';
      if(startTimings[0].second < 10) {tmS += " ";}
      tmS.concat(startTimings[0].second);

      Tft.setCursor(12 * 12, 0);
      Tft.fillRect(12 * 12, 0, 12 * 8, 16, menuk[currentMenu].boxColor[0]);
      Tft.print(tmS);

      //time13 = tmS;                     //    "22:10";
      //time13.substring(0, 5);

      if( prevDate != (now.date())){
        prevDate = now.date();
        //print only when there is a change in date
        startTimings[0].year = (now.year());
        startTimings[0].month = (now.month());
        startTimings[0].date = prevDate;
        dtS = String(startTimings[0].year);
        //dtS.concat(now.year());
        dtS += '.';
        if(startTimings[0].month < 10) {dtS += " ";}
        dtS.concat(startTimings[0].month);
        dtS += '.';
        if(startTimings[0].date < 10) {dtS += " ";}
        dtS.concat(startTimings[0].date);
        dtS += ".";
        Tft.setCursor(0, 0);
        Tft.fillRect(0, 0, 12 * 12, 16, menuk[currentMenu].boxColor[0]);
        Tft.print(dtS);

        //date13 =  dtS;                //    "12.12. ";
        //date13.substring(5);
        /*
        Tft.setCursor(0, 0);
        Tft.fillRect(0, 0, 12 * 12, 16, menuk[currentMenu].boxColor[0]);
        Tft.print(date13);
        Tft.print(time13);
        */
      }
    }
    //rtc.clearINTStatus();   // RTC-nek megszakítás újra engedélyezés
}

Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: programrészthez segtiség kérés

Hozzászólás Szerző: Robert »

A tömbös kezelés nagyon átláthatóvá tenné a programot.
Valahogyan kicsit nehezen követhető....

Én időváltozásnál nézném. Amit nem látok:
- periódikus ki/be hol állítódik?
- talajnedvességet ill esik e az eső?
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: programrészthez segtiség kérés

Hozzászólás Szerző: Robert »

Mit kell tudnia a programnak?
- téli/tavaszi/nyári program
- őszi/tavaszi időállítás
- zónánként napi/heti program
- grafikus programszervezés a locsolásra
- ha nem locsolódik (nem nedveseik a talaj) mi a hibakezelés?
- ha áramszünet volt és nem locsolt - mi történik?
- EEPROM irreális adat - mi a hibakezelés?

User error/LED visszajelzés van e?
Nyomógombra csipogó visszajelzés?
K_JANOS
DrótVégénSzéndarab
Hozzászólások: 22
Csatlakozott: 2015. július 28. kedd, 15:20

Re: programrészlethez segitiség kérés

Hozzászólás Szerző: K_JANOS »

Bocs , a téma cimem nagyon rossz helyesirással sikerült(rosszul láttam) . Köszönöm ,hogy válaszoltatok. A programnak nem kell tudni tavaszi meg öszi
idöállitást . Az eső érzékelöt fetételként be tudom rakni. A problémám az ,hogy a föprogiba olyan utasitásokat használni amivel a be állitot napokon
(1,2,3-vagy 5) locsoljon. A locsolási napok be állitása a gombokkal meg oldott. Az ont_napok_szama nevü regiszter tárolja. A tömbösitésnél nem tudom konkrétan mire gondoltok. A kritikát és tanitást szivessen veszem , de lehet hogy ez a "szög" egyszerü progi jobban átlátható mintha rövidebb és tömörebb lenne.
K_JANOS
DrótVégénSzéndarab
Hozzászólások: 22
Csatlakozott: 2015. július 28. kedd, 15:20

Re: programrészlethez segitség kérés

Hozzászólás Szerző: K_JANOS »

Robert ! az idö vátozást a if(ora==23&&perc==59&&masodperc==58) { nap++;} utasitással probáltam figyelni és a napok számát növelni. De a bevezetömbe emlitet jelenség volt.
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: programrészthez segtiség kérés

Hozzászólás Szerző: kapu48 »

Sajnos nagyon átláthatatlan a programod!!

Ezért talán előbb végezdel a Robi által javasolt tömbösítést!
Itt van rá 1 példa:

Kód: Egész kijelölése

//#include <LiquidCrystal_I2C.h> // arduino_uno_rev3, ATMEGA328P-PU
#include <Wire.h>
#include <EEPROM.h>

//#define rtc0x68
//#define i2c 0x20



byte ora;
byte perc;
byte masodperc;

struct Sz { // struct Z
byte ora_bek; // táthely foglalások a bekapcsolási és kikapcsolási idökhöz
byte perc_bek;
byte ora_kik;
byte perc_kik;
};

#define MAX_Z   10
// Z_ tömb 10 Sz
Sz Z_[MAX_Z];

void setup() {
  // put your setup code here, to run once:


}

void loop() {
  // put your main code here, to run repeatedly:

}

void eeprom_olvas(void){
 for(byte j = 0; j < MAX_Z; j++){
    Z_[j].ora_bek = EEPROM.read(j*4); // táthely foglalások a bekapcsolási és kikapcsolási idökhöz
    Z_[j].perc_bek = EEPROM.read(j*4+1);
    Z_[j].ora_kik = EEPROM.read(j*4+2);
    Z_[j].perc_kik = EEPROM.read(j*4+3);  
 }    
}

A programod első 14 - 50 és 772 - 812.. sorának, tömbösítet változata
Avatar
Robert
Elektronbűvölő
Hozzászólások: 10213
Csatlakozott: 2005. december 9. péntek, 7:00

Re: programrészthez segtiség kérés

Hozzászólás Szerző: Robert »

Kód: Egész kijelölése

If ((nap == 12) && (honap == 1)) {
mit tegyek;
}
Vagy

Kód: Egész kijelölése

if (nap == 12) {
   if (honap == 1) {
     mit tegyek;
  }
}
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: programrészthez segtiség kérés

Hozzászólás Szerző: kapu48 »

Esetleg bővebben itt:
http://lidi.uw.hu/krc/index.html#Tartalom

Strukturák és Tömbök!
Avatar
csegebiga
Chipgyilok
Hozzászólások: 288
Csatlakozott: 2015. március 27. péntek, 21:27

Re: programrészthez segtiség kérés

Hozzászólás Szerző: csegebiga »

az a rengeteg sorminta, amit gyártottál, eléggé nehezen áttekinthető

egy kis módszertani ajánló
ami a rendszer indulásakor be kell, hogy álljon, tedd a setupba
(pl eeprom olvasását minden loopban meg kell ejteni?)
(hol van az az eeprom olvasás jelenleg? régen lefutott a fél program, mire egyáltalán értékeket kap az összes zóna be- és kikapcsolási változója!)

ami a loop() ban ciklusonként 1x fut le, azt tedd a loopba (pl alap lcd kezelés)
ami minimális változtatással soxor futna le, azt tegyed (paraméterezett) függvénybe,
vagy tömbösítsd,mint az előttem szólók ajánlották.
vagy a kettő kombinációjába.
(szokd meg, hogy nem globális változóval paraméterezel (amit az y-nal csinálsz a PCF 8574 vezérlésénél), hanem a függvény argumentumával)

átláthatóbb lesz,
tudni fogod, hogy melyik rész nem dolgozik,
könnyebben javítható,
mi is többet tudunk segíteni.

kérdéseim:
az rtc chipedben a következő beolvasható byte a hét napjának sorszáma lenne (1-7)
miért nem azt használod a napváltások ellenőrzésére? (ha régiNap<>rtcNap akkor napok_szama++; és a végén régiNap=rtcNap beállításával várni a köv.napot)

a beállítás rutinod így működik rendesen?
biztos?
prellegő gombok pillanatnyi értékét azonnal eepromba írod, és utána korrigálod a határértéknél?
és utána ez már nem kerül be az eepromba?

azért én írnék egy olyan rutint, ami kiiratja az eeprom tartalmát pl a lcdre legalább az első 40 byte-ot,
csak az érdekesség kedvéért valami ilyen formában
zonaszám ora_bek:perc_bek ora_kik:perc_kik

ezekután felhőtlen optimizmus exact vizsgálatokat végezni az itt megadott értékekkel
pl óra==24 feltétel helyett, ami csak az óra=24 nél élesedik. az óra>23 feltétel az óra= 25nél is riaszt

hogy lépkedek végig a beállítandó funkciók között?
az 1. gombot (set?), ha elengedem, kilép a beállításokból, nem? hiszen a while(set megnyomva) feltételek nem teljesülnek sehol
vagyis hogyan lépek át a 10. zóna kikapcsolási idejéhez, ha csak azt akarom megváltoztatni??

rendszer szintű kérdés:
hol tárolod le, hogy hanyadik napon tart az öntözésed? hogyan véded ki az akár 7napos "aszályt"
minden zónában ugyanannyi naponta kell öntözni? nem kell lekezelni, letárolni, hogy ebben a zónában 2, míg abban 3 naponta kell csak locsolni?
10 byte eeprom és 20byte változóterület kell hozzá, meg egy kis varázslat a kibekapcsolásnál
zonaszám ora_bek:perc_bek ora_kik:perc_kik =>hánynaponta

félreértés ne essék, nem ledorongolni akartalak, csak megmutatni, hogy a ctrl+c ctrl+v legózásnál van járhatóbb út is.
pl a http://www.tavir.hu/60nap tanfolyam szerintem sok érdekes dolgot tud még néked mondani :)
ne add fel a csüggedésedet, lesz ebből még szájharmoika!
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: programrészthez segtiség kérés

Hozzászólás Szerző: kapu48 »

És a rengeteg "delay(500);-delay(1000);" az LCD írások után???

Minek az oda? Dobáld ki!
Csak borzasztó lassúvá tesszi a programod!
Ezért maradsz le még 1 perces esemény kezeléséröl is.

Persze ehez meg kel oldani, hogy csak akkor irjuk az LCDt ha változás van, és csak azt a területett ami változik!
K_JANOS
DrótVégénSzéndarab
Hozzászólások: 22
Csatlakozott: 2015. július 28. kedd, 15:20

Re: programrészlethez segitség kérés

Hozzászólás Szerző: K_JANOS »

Tisztelt Robert,Kapu48,Csegebiga köszönöm az idöt amit rámszántatok.

Csegebiga: az eeprom olvasásba igazadvan , magam is rájöhettem volna hogy a setupba van a helye.
Az lcd kezelés is ha külön rutinba van nem jobban átlátható ? A egyszerü utasitások
halmazát meg azért használom mert ASM-be van egy minimális gyakorlatom.A paraméterezett függvényt és a globális
változót még meg kell tanunlnom .
Amikor az rtc-met állitotam ,egy nullást ovastam ki,csütörtökön vagy pénteken és csodálkoztam ,hogy holvan a napok
sorszáma.A régiNap<>rtcNap utasitásnál a <> összehasolitó operátort az arduino 1.0.5-r2 verziója nem ismeri,a
forditó hibátir.Arduino programozási kézikönyvbe sem szerepel! Probálkoztam a != nem egyelő oprátorral, nem
sikerült,nem tudom az régiNap=napok_szama utasitást hovátennéd? A beállitási rutin jól müködik, nem korrigálok és
az eepromba csak egyszer irom.Az ora==24 nincs a programomba.Ha az 1-es gombot elengedem pont akkor marad az
aktuális beállitásba mivel a fetétel akkor teljesül.A zonákon csak végiglehet menni pl.a 8-as ra nem lehet egyböl
rámenni. Nem tárolom be holtart az öntözés,a gondom hogy nem tudom a locsolási napo számát figyelni és csak a be-
állitot napokon locsoltatni. Minden zonába ugyanazon a napon kell locsolni. Aszályt nem védem ki,azért locsolok.
A tamfolyam az jó ötlet,várom a hozzászolásod .Köszi az eddigieket.

Robert: Az if fetételt értem, de ahoz túlrövid ,hogy valamit kitaláljak belölle.

Kapu48: A rutin nagyon jó,lyet szeretnék a locsolási napokhoz is . Átrágom magam rajta és használom !köszönöm a
könyvet, a C-nyelv miben külömbözik az aduinotol?
K_JANOS
DrótVégénSzéndarab
Hozzászólások: 22
Csatlakozott: 2015. július 28. kedd, 15:20

Re: programrészlethez segitség kérés

Hozzászólás Szerző: K_JANOS »

Kapu48: a föképernyös rutinba ha nem volt 1s-késleltetés a lcd "brékelt" Az 1-perces eseményekröl nem maradadok le , de 1s-röl igen.
K_JANOS
DrótVégénSzéndarab
Hozzászólások: 22
Csatlakozott: 2015. július 28. kedd, 15:20

Re: programrészthez segtiség kérés

Hozzászólás Szerző: K_JANOS »

kapu48: igy jobb lenne a lcd rutin? A kod be illesztés nem sikerül, hogy csináljan?

void fokepernyo()


{
lcd.clear();
lcd.setCursor(5, 0); // 0-lás sor 5-ös karakterhely
lcd.write(239); // az ö-betü kódja
lcd.print("nt");
lcd.write(239);
lcd.print("z");
lcd.write(239); // 1-gyes sor 4-e karakter hely
lcd.setCursor(4, 1);
if(ora>r_ora) {
lcd.print(ora);
lcd.print(":");
ora=r_ora;
}
if(perc>r_perc) {
if(perc<10) {lcd.print("0");}
lcd.print(perc);
lcd.print(":");
perc=r_perc;
}
if(masodperc<10) {lcd.print("0");}
lcd.print(masodperc);
delay(50); // az 50ms kell! külömben 1000-ren kever a másodperc
}
Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3375
Csatlakozott: 2008. augusztus 29. péntek, 6:00

Re: programrészthez segtiség kérés

Hozzászólás Szerző: kapu48 »

Szerintem valahogy igy:

Kód: Egész kijelölése

#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <EEPROM.h>

#define rtc0x68
#define i2c 0x20

LiquidCrystal_I2C lcd(0x20,16,2);

byte ora;
byte r_ora = 0; // Régi ora
byte perc; 
byte r_perc; // Régi perc
byte masodperc; 
byte r_masodperc = 0; // Régi Másodperc


void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}

void fokepernyo(){
  lcd.clear(); 
  lcd.setCursor(5, 0); // 0-lás sor 5-ös karakterhely
  lcd.write(239); // az ö-betü kódja
  lcd.print("nt");
  lcd.write(239);
  lcd.print("z");
  lcd.write(239); // 1-gyes sor 4-e karakter hely
  lcd.setCursor(4, 1);
  if(ora>r_ora) { 
    lcd.print(ora);
    lcd.print(":");
    r_ora=ora;
  }
  if(perc>r_perc) {
    if(perc<10) {lcd.print("0");}
    lcd.print(perc);
    lcd.print(":");
    r_perc=perc;
  }
  if(masodperc>r_masodperc) {  
    if(masodperc<10) {lcd.print("0");}
    lcd.print(masodperc);

    r_masodperc=masodperc;
  }
}
Nállam grafikus LCD, +Touch, 4 lapos görgethető menü, kb. 2000 sor. És egyetlen delay() nincsen!

(Kód be illesztésnél használd fent a 'Code' gombot!)
Válasz küldése