• 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
Sterownik świateł drogowych plus tryb "party"
#1
Witam, 
Zaczynam dopiero przygodę z arduino i proszę o wyrozumiałość. Wszystkiego uczę się z internetu i składam programowe klocki w jeden projekt: Sterownik świateł drogowych, czyli 3 diody (czerwona, żółta, zielona). Dodatkowo PIN na input (guzik), który pozwala przełączyć w tryb "party", czyli wszystkie światła włączają się w losowych odstępach czasu na losowy okres czasu.
Coś mam nie tak w programie gdyż kiedy zmienię stan guzika z trybu "party" na tryb świateł drogowych często program nie idzie pokolei wg schematu: czerwona, czerwona i żółta, zielona, żółta, czerwona, czerwona i żółta, itd... tylko z diody żółtej potrafi przejść na czerwoną i zieloną równocześnie... 
Może to coś oczywistego a ja tego nie widzę? Jakieś śmieci w pamięci? Proszę o pomoc dobrzy ludzie Smile

P.S. 
Zrobiłem przejścia świateł drogowych na delay, nie przeszkadza mi to, że guzik będzie czytany dopiero po zmienie światła. Wiem, że można to robić jakoś na mills, ale przerosło mnie to.
Kod:
#define numberOfLEDs 3
long nextFlash[3];
int ledPin[] = { 8, 9, 10}; // LED pins to use.
int ledState[3];
int guzik = 0;

int red_time = 4000; //4000
int yellow_time = 2000; //2000
int green_time = 4000; //4000
void setup() {
 pinMode(8, OUTPUT); //Konfiguracja pinu 8 jako wyjście RED
 pinMode(9, OUTPUT); //Konfiguracja pinu 9 jako wyjście YELLOW
 pinMode(10, OUTPUT); //Konfiguracja pinu 10 jako wyjście GREEN
 pinMode(11, INPUT); //Konfiguracja pinu 11 jako guzik



}
void loop()
{
 guzik = digitalRead(11);  // read input value
 if (guzik == LOW)
   {
     traffic();
   }
   else losowe();
}


void guzik_on()
{
   guzik = digitalRead(11);  // read input value
 if (guzik == LOW)
   {
     traffic();
   }
}

void guzik_off()
{
   guzik = digitalRead(11);  // read input value
 if (guzik == HIGH)
   {
     losowe();
   }
}





 
void traffic() {
 digitalWrite(8, HIGH); //Włączenie diody RED
 delay(red_time);
 guzik_off();
 digitalWrite(9, HIGH); //Włączenie diody YELLOW
 delay(yellow_time);
 guzik_off();
 digitalWrite(8, LOW); //Wyłączenie diody RED
 digitalWrite(9, LOW); //Wyłączenie diody YELLOW
 digitalWrite(10, HIGH); //Włączenie diody GREEN
 delay(green_time);
 guzik_off();
 digitalWrite(10, LOW); //Wyłączenie diody GREEN
 digitalWrite(9, HIGH); //Włączenie diody YELLOW
 delay(2000);
 guzik_off();
 digitalWrite(9, LOW); //Wyłączenie diody YELLOW
}

void losowe()
{

 for (int i = 0; i < numberOfLEDs; i++) {
   pinMode(ledPin[i], OUTPUT);
   ledState[i] = LOW;
   digitalWrite(ledPin[i], LOW); // all LEDs off
   nextFlash[i] = millis() + random(20, 300);
 }

 while (true) {
   for (int i = 0; i < numberOfLEDs; i++) {
     if (millis() > nextFlash[i]) {
       if (ledState[i] == LOW) ledState[i] = HIGH; else ledState[i] = LOW;
       digitalWrite(ledPin[i], ledState[i]);
       nextFlash[i] = millis() + random(20, 300) ; // next toggle random time
       guzik_on();
     }
   }
 }
}
 
Odpowiedź
  


Wiadomości w tym wątku
Sterownik świateł drogowych plus tryb "party" - przez maksio - 22-09-2015, 15:29

Skocz do:


Przeglądający: 1 gości