05-01-2018, 19:18
Witam serdecznie,
Jestem świeżakiem odnośnie programowania. Podjąłem się napisania sterownika do rolet na pilot i odziwo działa elegancko. Mam jednak przeczucie, że kod można napisać ładniej i krócej.
1.Czy ktoś wskaże mi co można wymienić? No i wstyd mi za skok goto, ale nie wiedziałem kompletnie jak załatwić ten problem.
2.Czy realizacja czasówek jest możliwa bez użycia układu RTC?
Program realizuje:
-jazda rolety w góre i w dół ze zmianą trybu w dowolnym momencie (w góre i stop na jednym guziku, w dół i stop na drugim, przy czym gdy jedzie w jedną stronę, a wcisnie się przycisk w drugą to zmieni się automatycznie kierunek)
-ściemnianie pokoju, czyli roleta schodzi na maxa w dół i podwyższa się zostawiając z dołu "szparę ewakuacyjną" i
prześwit między listwami rolety.
Pozdrawiam
Jestem świeżakiem odnośnie programowania. Podjąłem się napisania sterownika do rolet na pilot i odziwo działa elegancko. Mam jednak przeczucie, że kod można napisać ładniej i krócej.
1.Czy ktoś wskaże mi co można wymienić? No i wstyd mi za skok goto, ale nie wiedziałem kompletnie jak załatwić ten problem.
2.Czy realizacja czasówek jest możliwa bez użycia układu RTC?
Program realizuje:
-jazda rolety w góre i w dół ze zmianą trybu w dowolnym momencie (w góre i stop na jednym guziku, w dół i stop na drugim, przy czym gdy jedzie w jedną stronę, a wcisnie się przycisk w drugą to zmieni się automatycznie kierunek)
-ściemnianie pokoju, czyli roleta schodzi na maxa w dół i podwyższa się zostawiając z dołu "szparę ewakuacyjną" i
prześwit między listwami rolety.
Kod:
#include <IRremote.h>
#define irPin 11
IRrecv irrecv(irPin);
decode_results results;
int przekaznik1 = 8;
int przekaznik2 = 9;
int sp1 = LOW;
int sp2 = LOW;
int sp3 = LOW;
unsigned long time1;
unsigned long time2;
unsigned long time3;
void setup() {
Serial.begin(9600);
pinMode(przekaznik1, OUTPUT);
pinMode(przekaznik2, OUTPUT);
digitalWrite(przekaznik1, LOW);
digitalWrite(przekaznik2, LOW);
irrecv.enableIRIn();
// put your setup code here, to run once:
}
void loop() {
time2 = millis();
if(time2-time1 > 26000)
{
digitalWrite(przekaznik1, LOW);
}
if(time2-time3 > 26000)
{
digitalWrite(przekaznik2, LOW);
}
if (irrecv.decode(&results))
{
if(results.value == 0xFF30CF)
{
sp1 = ~sp1;
digitalWrite(przekaznik2, LOW);
sp2 = LOW;
delay(350);
digitalWrite(przekaznik1, sp1);
delay(350);
time1=millis();
}
if (results.value == 0xFF18E7)
{
sp2 = ~sp2;
digitalWrite(przekaznik1, LOW);
sp1 = LOW;
delay(350);
digitalWrite(przekaznik2, sp2);
delay(350);
time3=millis();
}
program:
if (results.value == 0xFF7A85)
{
digitalWrite(przekaznik2, LOW);
delay(350);
digitalWrite(przekaznik1, HIGH);
delay(350);
sp3=HIGH;
for (int a=0; a<480; a++)
{
if (irrecv.decode(&results))
{
if (results.value == 0xFF18E7)
{
digitalWrite(przekaznik1, LOW);
delay(250);
sp3=LOW;
goto program;
}
irrecv.resume();
}
delay(50);
}
digitalWrite(przekaznik1, LOW);
delay(250);
digitalWrite(przekaznik2, sp3);
delay(6300);
digitalWrite(przekaznik2, LOW);
}
irrecv.resume();
}
}
Pozdrawiam