02-03-2023, 20:54
Kod:
// Przycisk Awaryjny 4
// Przycisk w lewo 7
// Przycisk Stop 6
// Przycisk w prawo 5
// Światło Awaryjne
// światło w lewo 8
// światło stop 10
// światło w prawo 9
#define przyciskAwaryjny 4
#define przyciskLewy 5
#define przyciskStop 6
#define przyciskPrawy 7
#define Lewy 8
#define Stop 10
#define Prawy 9
byte mrugaLewy = 0, mrugaPrawy = 0, mrugaStop = 0;
unsigned long zegar = 0, zegar1 = 0, zegar2 = 0;
void setup() {
//Lewy
pinMode(Lewy, OUTPUT); //Dioda jako wyjście
digitalWrite(Lewy, LOW); //Wyłączenie diody
pinMode(przyciskLewy, INPUT_PULLUP); //Przycisk jako wejście
//Stop
pinMode(Stop, OUTPUT); //Dioda jako wyjście
digitalWrite(Stop, LOW); //Wyłączenie diody
pinMode(przyciskStop, INPUT_PULLUP); //Przycisk jako wejście
//Prawy
pinMode(Prawy, OUTPUT); //Dioda jako wyjście
digitalWrite(Prawy, LOW); //Wyłączenie diody
pinMode(przyciskPrawy, INPUT_PULLUP); //Przycisk jako wejście
//Awaryjny
pinMode(przyciskAwaryjny, INPUT_PULLUP);
}
void loop() {
zegar = millis();
// sprawdzanie stanu przycisków
if (digitalRead(przyciskLewy) == LOW) { //Jeśli przycisk wciśnięty
mrugaLewy = 1; // mruga lewy, wyłącza się prawy
mrugaPrawy = 0;
digitalWrite(Prawy, LOW); // wyłączamy prawy kierunek
}
if (digitalRead(przyciskStop) == LOW) { //Jeśli przycisk wciśnięty
digitalWrite(Stop, HIGH); // włącza się stop
mrugaStop = 0;
}
if (digitalRead(przyciskPrawy) == LOW) { //Jeśli przycisk wciśnięty
mrugaPrawy = 1; // mruga prawy, wyłącza się lewy
mrugaLewy = 0;
digitalWrite(Lewy, LOW); // lewy zaczyna od stanu ciemnego
}
if (digitalRead(przyciskAwaryjny) == LOW) { // Jeśli wciśnięty przycisk awaryjny
mrugaLewy = 1; // ma mrugać wszystko
mrugaPrawy = 1;
mrugaStop = 1;
digitalWrite(Lewy, LOW); // wszystko ma mrugać począwszy od stanu ciemnego
digitalWrite(Stop, LOW);
digitalWrite(Prawy, LOW);
}
// wyłączenie Stop po puszczeniu przycisku i gdy awaryjne wyłączone
if (!mrugaStop) { // wyłączenie pinu następuje tylko gdy Stop nie mruga
digitalWrite(Stop, LOW);
}
// zestaw czynności sterowanych zegarem 1
if (zegar - zegar1 >= 1000) { // interwał 1sek - do migania świateł
if (mrugaLewy) {digitalWrite(Lewy, !digitalRead(Lewy));} // zmiana stanu pinów na przeciwne
if (mrugaPrawy) {digitalWrite(Prawy, !digitalRead(Prawy));} // czyli mruganie :)
if (mrugaStop) {digitalWrite(Stop, !digitalRead(Stop));}
zegar1 = millis(); // wrzucenie do zegar1 aktualnego czasu od uruchomienia
}
// zestaw czynności sterowanych zegarem 2
if (zegar - zegar2 >= 10000) {
if (mrugaLewy) {mrugaLewy = 0;} // w przypadku mrugania po 10sek mruganie ma ustać
if (mrugaPrawy) {mrugaPrawy = 0;}
if (mrugaStop) {mrugaStop = 0;}
zegar2 = millis();
}
}
Druga sprawa - ilość LED. Na prawdę potrzebne jest aż tyle? Raz, że pobór prądu, a dwa - oślepienie innych użytkowników drogi. Wiem, że główna zasada to bądź widoczny, ale lampki rowerowe mają po 3 diody i dają radę.