• 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"
#3
(22-09-2015, 17:40)shalvan napisał(a): tak sobie czytam ten kod i pierwsze co przychodzi mi na myśl to:

1) Czy masz rezystory pull down do guzika? Zawsze należy o nich pamiętać żeby pin nie "wisiał luźno w powietrzu" a mikrokontroler wiedział że LOW to faktycznie LOW a nie jakiś stan nieustalony.

2) Nie widzę też nic związanego z debounce a wystarczyło by dodać:

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

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


Na tę chwilę to tyle 

Wiem że istnieją inne możliwości debounce ale zawsze lepiej zacząć do łatwiejszych Tongue

Tak mi jeszcze przyszło do głowy że przy każdej zmianie stanów guzika możesz "Czyścić" wyjśćia

Kod:
void guzik_on()
{
  guzik = digitalRead(11);  // read input value
if (guzik == LOW)
delay(100);
  {
     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(11);  // read input value
if (guzik == HIGH)
delay(100)
  {
     digitalWrite(8, LOW); //Wyłączenie diody RED
     digitalWrite(9, LOW); //Wyłączenie diody YELLOW
     digitalWrite(10, LOW); //Włączenie diody GREEN
    losowe();
  }
}

zle gadasz ja mam sposub programowy i nie czeba nic dodawac

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
pinMode(11, OUTPUT);
digitalWrite(8, LOW);



}
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();
     }
   }
}
}
to kod z poprawionym drganiem zestyków sprawdzę jak ci to działa a ty opisz dokładnie jak chciałeś by to działało.
 
Odpowiedź
  


Wiadomości w tym wątku
RE: Sterownik świateł drogowych plus tryb "party" - przez adix - 22-09-2015, 19:46

Skocz do:


Przeglądający: 2 gości