• 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"
#5
Dziękuję Wam za wszystkie cenne podpowiedzi.

@shalvan - Tak mam rezystor w przełączniku. Wiem, że nie może wisieć w powietrzu bo może sobie coś losowo wybierać.

@adix - dziękuję za ładny kod. Masz rację, że tak łatwiej potem zmieniać wszystko. Z Twoim kodem po powrocie z trybu "party" miałem to samo: po żółtej diodzie zapalały się nie wiem dlaczego, zielona i czerwona równocześnie...

Na koniec zastosowałem połączenie kodu @adix i @shalvan używając "czyszczenia wyjść" Shalvana i zadziałało tak jak chciałem!!!

Jeszcze raz Wam dziękuję Shalvan i Adix za poświęcony mi czas. 

Oto ostateczny kod:

Kod:
#define numberOfLEDs 3
long nextFlash[3];
int ledPin[] = { 8, 9, 10}; // LED pins to use.
int ledState[3];
int guzik=1;
const int button = 11;
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(button);  // read input value
if (guzik == LOW)
  {
    traffic();
  }
  else losowe();
}


void guzik_on()
{
  guzik = digitalRead(button);  // read input value
if (guzik == LOW)
  {
    digitalWrite(8, LOW); //Wyłączenie diody RED
    digitalWrite(9, LOW); //Wyłączenie diody YELLOW
    digitalWrite(10, LOW); //Włączenie diody GREEN
    traffic();
  }
}

void guzik_off()
{
  guzik = digitalRead(button);  // read input value
if (guzik == HIGH)
  {
    digitalWrite(8, LOW); //Wyłączenie diody RED
    digitalWrite(9, LOW); //Wyłączenie diody YELLOW
    digitalWrite(10, LOW); //Włączenie diody GREEN
    losowe();
  }
}






void traffic() {
digitalWrite(ledPin[0], HIGH); //Włączenie diody RED
delay(red_time);
guzik_off();
digitalWrite(ledPin[1], HIGH); //Włączenie diody YELLOW
delay(yellow_time);
guzik_off();
digitalWrite(ledPin[0], LOW); //Wyłączenie diody RED
digitalWrite(ledPin[1], LOW); //Wyłączenie diody YELLOW
digitalWrite(ledPin[2], HIGH); //Włączenie diody GREEN
delay(green_time);
guzik_off();
digitalWrite(ledPin[2], LOW); //Wyłączenie diody GREEN
digitalWrite(ledPin[1], HIGH); //Włączenie diody YELLOW
delay(2000);
guzik_off();
digitalWrite(ledPin[1], 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
RE: Sterownik świateł drogowych plus tryb "party" - przez maksio - 22-09-2015, 22:00

Skocz do:


Przeglądający: 1 gości