01-04-2020, 16:26
Witajcie.
Napisałem sobie program do sterowania bramą (Otwieranie - STOP - ZAMYKANIE - STOP) i na teście to dobrze działało.
Podłączyłem wszystko pod bramę i teraz sama się zamyka lub otwiera (nie wiem dlaczego) i szukam przyczyny
Całość jest postawione na Kicie z ATTINY85
Attiny85
i ponieważ nie działa funkcja podciągania wejścia INPUT_PULLUP to podciągam ją opornikiem 22k do +12V
Układ zasilany z 12V przez VIN
Miał być 10k ale nie znalazłem i miałem 2k lub 22k więc wybrałem ten większy.
Ewentualnie może błąd w kodzie - dodałem linijki do Monitora portu szeregowego i testuję na UNO i nie widać błędu (stąd LED1 na 13 a w ATTINY85 na 1
Napisałem sobie program do sterowania bramą (Otwieranie - STOP - ZAMYKANIE - STOP) i na teście to dobrze działało.
Podłączyłem wszystko pod bramę i teraz sama się zamyka lub otwiera (nie wiem dlaczego) i szukam przyczyny
Całość jest postawione na Kicie z ATTINY85
Attiny85
i ponieważ nie działa funkcja podciągania wejścia INPUT_PULLUP to podciągam ją opornikiem 22k do +12V
Układ zasilany z 12V przez VIN
Miał być 10k ale nie znalazłem i miałem 2k lub 22k więc wybrałem ten większy.
Ewentualnie może błąd w kodzie - dodałem linijki do Monitora portu szeregowego i testuję na UNO i nie widać błędu (stąd LED1 na 13 a w ATTINY85 na 1
Kod:
#include <Timers.h> // https://github.com/nettigo/Timers
Timer TimerOtwierania;
Timer TimerZamykania;
Timer TimerFlash;
Timer TimerOpoznienia;
Timer TimerBlink;
Timer TimerBlink1;
Timer TimerKey;
Timer TimerALL;
int ji,ki;
long z;
byte j,k,blink_stats, blink_stats1;
byte cykl; //0-przerwa, 1-otwieranie, 2-przerwa, 3-zamykanie
#define LED0 3 //0 Zamykanie
#define LED1 13 //1 BuiltIN -
#define LED2 2 //2 Otwieranie
#define LED3 0 //3 Flash
#define KEY1 4 //4 Elmes
#define ON HIGH
#define OFF LOW
#define CZAS_OTWIERANIA 22000
#define CZAS_ZAMYKANIA 23000
#define CZAS_FLASH 25000
void setup() {
Serial.begin(38400);
Serial.println("Start programu");
pinMode(LED0, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(KEY1, INPUT_PULLUP);
digitalWrite(LED0, OFF);
digitalWrite(LED1, OFF);
digitalWrite(LED2, OFF);
digitalWrite(LED3, OFF);
blink_stats = OFF;
TimerBlink1.begin(1000);
}
// the loop routine runs over and over again forever:
void loop() {
digitalWrite(LED1, blink_stats1);
if (j==1) ji++;
if (digitalRead(KEY1) == 0) {
digitalWrite(LED1, HIGH); //OFF - dla diody wbudowanej odwrotnie
// Serial.println("FLASH - Start");
TimerFlash.begin(CZAS_FLASH);
TimerOpoznienia.begin(3000);
TimerKey.begin(1000);
TimerALL.begin(CZAS_FLASH);
blink_stats = ON;
}
else {
digitalWrite(LED1, LOW); //OFF
} // turn the LED off by making the voltage LOW
if (ji==10) {
cykl++;
// Serial.print("Cykl bramy: ");
// Serial.println(cykl);
j=0;
ji=0;
}
if (cykl==0 || cykl==2)digitalWrite(LED0, OFF); //FLASH stop
if (cykl==1 || cykl==3)digitalWrite(LED0, blink_stats); //FLASH start
if (cykl==4) cykl=0;
if (TimerOpoznienia.available()) {
TimerOtwierania.begin(CZAS_OTWIERANIA);
TimerZamykania.begin(CZAS_ZAMYKANIA);
TimerBlink.begin(1000);
TimerOpoznienia.time(STOP);
// Serial.println("Koniec opoznienia");
k=1;
}
if (k==1 && cykl==1) {
z++;
digitalWrite(LED2, ON);
digitalWrite(LED3, OFF);
if (z==1) Serial.println("Otwieranie bramy");
}
if (TimerOtwierania.available()) {
TimerOtwierania.time(STOP);
if (cykl==1) Serial.println("Koniec Otwierania");
k=0;
z=0;
}
if (cykl==2 || cykl==0) {
digitalWrite(LED2, OFF);
digitalWrite(LED3, OFF);
if (k==1) {
Serial.print("PRZERWA cykl= ");
Serial.println(cykl);
}
k=0;
z=0;
}
if (k==1 && cykl==3) {
z++;
digitalWrite(LED2, OFF);
digitalWrite(LED3, ON);
if (z==1) Serial.println("Zamykanie bramy");
}
if (TimerZamykania.available()) {
TimerZamykania.time(STOP);
if (cykl==3) Serial.println("Koniec Zamykania");
k=0;
z=0;
}
if (TimerKey.available()) {
TimerKey.time(STOP);
j=1;
}
if (TimerFlash.available()) {
TimerFlash.time(STOP);
digitalWrite(LED0, OFF); //FLASH stop
Serial.print("Koniec FLASH. Cykl: ");
Serial.println(cykl);
}
if (TimerALL.available()) {
TimerALL.time(STOP);
if (cykl==1) cykl=2;
if (cykl==3) cykl=0;
Serial.print("Automatyczna zmiana cyklu. Cykl: ");
Serial.println(cykl);
}
if (TimerBlink.available()) {
TimerBlink.restart();
blink_stats = !blink_stats;
}
if (TimerBlink1.available()) {
TimerBlink1.restart();
blink_stats1 = !blink_stats1;
if (z) Serial.print(".");
}
}