• 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
Skrzyżowanie z przejściami dla pieszych.
#11
(04-02-2017, 12:08)namok napisał(a): Nie ma takiej możliwości a by jednocześnie działały dwie sekwencje z użyciem delay().
W momencie wywołania delay() program "stoi w miejscu" do momentu aż minie zadany czas.
W momencie wywołania delay() nie działają przyciski czytane w pętli loop().
Możesz to zrobić z użyciem millis() ale musisz dobrze przemyśleć algorytm. Poczytaj: https://techniczny.wordpress.com/2012/04...w-arduino/
Oczywiście są biblioteki pomagające w wielowątkowości np: http://www.jarzebski.pl/arduino/bibliote...duino.html.

Hmm , dzisiaj miałem trochę czasu i próbowałem poprawić program.Coś mi to nie wychodzi. ograniczyłem więc go do dwóch sygnalizatorów (mijanka). Co w nim zmienić aby działały przyciski?Jakiś przykład proszę.

Kod:
 // Pierwszy sygnalizator
 
 int led0 = 2;// Dioda czerwona
 int led1 = 3;// Dioda pomarańczowa
 int led2 = 4;// Dioda zielona

  // Drugi sygnalizator
 
 int led3 = 7;// Dioda czerwona
 int led4 = 8;// Dioda pomarańczowa
 int led5 = 9;// Dioda zielona
   
 int switch0 = 0;    //  przycisk na pin 0
 int switch1 = 1;    //  przycisk na pin 1
 
void setup()
{
     pinMode(led0, OUTPUT);   //pin 2 jako wyjście
     pinMode(led1, OUTPUT);   //pin 3 jako wyjście
     pinMode(led2, OUTPUT);   //pin 4 jako wyjście
     pinMode(led3, OUTPUT);   //pin 7 jako wyjście
     pinMode(led4, OUTPUT);   //pin 8 jako wyjście
     pinMode(led5, OUTPUT);   //pin 9 jako wyjście

     pinMode(switch0, INPUT_PULLUP);   //pin 0 jako wejście
     pinMode(switch1, INPUT_PULLUP);   //pin 1 jako wejście
   
}
void loop()

{  
  if (digitalRead(0) == LOW) { //Jeśli przycisk wciśnięty
           
 
  digitalWrite(led0, HIGH);digitalWrite(led3,  LOW); // włącz diodę czerwoną
  digitalWrite(led1, LOW);digitalWrite(led4,  LOW);  // włącz diodę pomarańczową
  digitalWrite(led2, LOW);digitalWrite(led5, HIGH); // włącz diodę zieloną
       
  delay(5000);

  digitalWrite(led0, HIGH);digitalWrite(led3, LOW); // włącz diodę czerwoną
  digitalWrite(led1, HIGH);digitalWrite(led4, LOW);  // włącz diodę pomarańczową
  digitalWrite(led2, LOW);digitalWrite(led5, HIGH); // włącz diodę zieloną
       
  delay(2000);

  }
 
  //Miganie diod pomarańczowej i zielonej

  digitalWrite(led0, HIGH);digitalWrite(led3, LOW); // włącz diodę czerwoną
  digitalWrite(led1, HIGH);digitalWrite(led4, LOW);  // włącz diodę pomarańczową
  digitalWrite(led2, LOW);digitalWrite(led5, HIGH); // włącz diodę zieloną

  delay(500);

  digitalWrite(led0, HIGH);digitalWrite(led3, LOW); // włącz diodę czerwoną
  digitalWrite(led1, LOW);digitalWrite(led4, LOW);  // włącz diodę pomarańczową
  digitalWrite(led2, LOW);digitalWrite(led5, LOW); // włącz diodę zieloną

  delay(500);

  digitalWrite(led0, HIGH);digitalWrite(led3, LOW); // włącz diodę czerwoną
  digitalWrite(led1, HIGH);digitalWrite(led4, LOW);  // włącz diodę pomarańczową
  digitalWrite(led2, LOW);digitalWrite(led5, HIGH); // włącz diodę zieloną

  delay(500);

  digitalWrite(led0, HIGH);digitalWrite(led3, LOW); // włącz diodę czerwoną
  digitalWrite(led1, LOW);digitalWrite(led4, LOW);  // włącz diodę pomarańczową
  digitalWrite(led2, LOW);digitalWrite(led5, LOW); // włącz diodę zieloną

  delay(500);

  digitalWrite(led0, HIGH);digitalWrite(led3, LOW); // włącz diodę czerwoną
  digitalWrite(led1, HIGH);digitalWrite(led4, LOW);  // włącz diodę pomarańczową
  digitalWrite(led2, LOW);digitalWrite(led5, HIGH); // włącz diodę zieloną

  delay(500);

  digitalWrite(led0, HIGH);digitalWrite(led3, LOW); // włącz diodę czerwoną
  digitalWrite(led1, LOW);digitalWrite(led4, LOW);  // włącz diodę pomarańczową
  digitalWrite(led2, LOW);digitalWrite(led5, LOW); // włącz diodę zieloną

  delay(500);

  digitalWrite(led0, HIGH);digitalWrite(led3, LOW); // włącz diodę czerwoną
  digitalWrite(led1, HIGH);digitalWrite(led4, LOW);  // włącz diodę pomarańczową
  digitalWrite(led2, LOW);digitalWrite(led5, HIGH); // włącz diodę zieloną

  delay(500);

  digitalWrite(led0, HIGH);digitalWrite(led3, LOW); // włącz diodę czerwoną
  digitalWrite(led1, LOW);digitalWrite(led4, LOW);  // włącz diodę pomarańczową
  digitalWrite(led2, LOW);digitalWrite(led5, LOW); // włącz diodę zieloną

  delay(500);

  digitalWrite(led0, HIGH);digitalWrite(led3, LOW); // włącz diodę czerwoną
  digitalWrite(led1, HIGH);digitalWrite(led4, LOW);  // włącz diodę pomarańczową
  digitalWrite(led2, LOW);digitalWrite(led5, HIGH); // włącz diodę zieloną

  delay(500);

  digitalWrite(led0, HIGH);digitalWrite(led3, LOW); // włącz diodę czerwoną
  digitalWrite(led1, LOW);digitalWrite(led4, LOW);  // włącz diodę pomarańczową
  digitalWrite(led2, LOW);digitalWrite(led5, LOW); // włącz diodę zieloną

  delay(500);

  {
 
  if (digitalRead(1) == LOW) { //Jeśli przycisk wciśnięty

  digitalWrite(led0, LOW);digitalWrite(led3, HIGH); // włącz diodę czerwoną
  digitalWrite(led1, LOW);digitalWrite(led4, LOW);  // włącz diodę pomarańczową
  digitalWrite(led2, HIGH);digitalWrite(led5, LOW); // włącz diodę zieloną
       
  delay(5000);

  digitalWrite(led0, LOW);digitalWrite(led3, HIGH); // włącz diodę czerwoną
  digitalWrite(led1, LOW);digitalWrite(led4, HIGH);  // włącz diodę pomarańczową
  digitalWrite(led2, HIGH);digitalWrite(led5, LOW); // włącz diodę zieloną
       
  delay(2000);

  digitalWrite(led0, LOW);digitalWrite(led3, HIGH); // włącz diodę czerwoną
  digitalWrite(led1, LOW);digitalWrite(led4, HIGH);  // włącz diodę pomarańczową
  digitalWrite(led2, LOW);digitalWrite(led5, LOW); // włącz diodę zieloną
       
  delay(500);

  digitalWrite(led0, LOW);digitalWrite(led3, HIGH); // włącz diodę czerwoną
  digitalWrite(led1, LOW);digitalWrite(led4, LOW);  // włącz diodę pomarańczową
  digitalWrite(led2, LOW);digitalWrite(led5, LOW); // włącz diodę zieloną
       
  delay(500);

  digitalWrite(led0, LOW);digitalWrite(led3, HIGH); // włącz diodę czerwoną
  digitalWrite(led1, LOW);digitalWrite(led4, HIGH);  // włącz diodę pomarańczową
  digitalWrite(led2, HIGH);digitalWrite(led5, LOW); // włącz diodę zieloną
       
  delay(500);

  digitalWrite(led0, LOW);digitalWrite(led3, HIGH); // włącz diodę czerwoną
  digitalWrite(led1, LOW);digitalWrite(led4, LOW);  // włącz diodę pomarańczową
  digitalWrite(led2, LOW);digitalWrite(led5, LOW); // włącz diodę zieloną
       
  delay(500);

  digitalWrite(led0, LOW);digitalWrite(led3, HIGH); // włącz diodę czerwoną
  digitalWrite(led1, LOW);digitalWrite(led4, HIGH);  // włącz diodę pomarańczową
  digitalWrite(led2, HIGH);digitalWrite(led5, LOW); // włącz diodę zieloną
       
  delay(500);

  digitalWrite(led0, LOW);digitalWrite(led3, HIGH); // włącz diodę czerwoną
  digitalWrite(led1, LOW);digitalWrite(led4, LOW);  // włącz diodę pomarańczową
  digitalWrite(led2, LOW);digitalWrite(led5, LOW); // włącz diodę zieloną
       
  delay(500);

  digitalWrite(led0, LOW);digitalWrite(led3, HIGH); // włącz diodę czerwoną
  digitalWrite(led1, LOW);digitalWrite(led4, HIGH);  // włącz diodę pomarańczową
  digitalWrite(led2, HIGH);digitalWrite(led5, LOW); // włącz diodę zieloną
       
  delay(500);

  digitalWrite(led0, LOW);digitalWrite(led3, HIGH); // włącz diodę czerwoną
  digitalWrite(led1, LOW);digitalWrite(led4, LOW);  // włącz diodę pomarańczową
  digitalWrite(led2, LOW);digitalWrite(led5, LOW); // włącz diodę zieloną
       
  delay(500);

  digitalWrite(led0, LOW);digitalWrite(led3, HIGH); // włącz diodę czerwoną
  digitalWrite(led1, LOW);digitalWrite(led4, HIGH);  // włącz diodę pomarańczową
  digitalWrite(led2, HIGH);digitalWrite(led5, LOW); // włącz diodę zieloną
       
  delay(500);

  digitalWrite(led0, LOW);digitalWrite(led3, HIGH); // włącz diodę czerwoną
  digitalWrite(led1, LOW);digitalWrite(led4, LOW);  // włącz diodę pomarańczową
  digitalWrite(led2, LOW);digitalWrite(led5, LOW); // włącz diodę zieloną
       
  delay(500);
           
 }  
}
}  
 
Odpowiedź
#12
Jeśli nie rozumiesz jak działają przykłady z tego linku: https://techniczny.wordpress.com/2012/04...w-arduino/ to całą ta zabawa nie ma sensu.
Z użyciem delay() ten program nie ma prawa dziłać.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#13
(08-02-2017, 09:10)namok napisał(a): Jeśli nie rozumiesz jak działają przykłady z tego linku: https://techniczny.wordpress.com/2012/04...w-arduino/ to całą ta zabawa nie ma sensu.
Z użyciem delay() ten program nie ma prawa dziłać.
Tego polecania użyć
Kod:
unsigned long next_change_1;
do każdej diody czy tylko do diod migających?
 
Odpowiedź
#14
(08-02-2017, 12:20)Orion045 napisał(a): Tego polecania użyć
Kod:
unsigned long next_change_1;
do każdej diody czy tylko do diod migających?
Wydaje mi się że nierozumiesz jak działają tampe przykłady.
Jeśli uważasz że tak po napisz program na 3 diody, gdzie każda miga z innym czasem.
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
#15
(08-02-2017, 14:20)namok napisał(a):
(08-02-2017, 12:20)Orion045 napisał(a): Tego polecania użyć
Kod:
unsigned long next_change_1;
do każdej diody czy tylko do diod migających?
Wydaje mi się że nierozumiesz jak działają tampe przykłady.
Jeśli uważasz że tak po napisz program na 3 diody, gdzie każda miga z innym czasem.

Zrobiłem miganie wszystkimi 6 diodami.W moim wieku to mogę nie wszystko  rozumieć za pierwszym czy drugim razem. Diody migają w różnym rytmie.Tylko jak zrobić żeby najpierw bez migania zapaliła się np. czerwona a na drugim zielona a potem czerwona,pomarańczowa i na drugim zielna a dopiero później miganie pomarańczowej i zielonej?

Kod:
// Mruganie 6 diodami led
//Definiowanie pinów?

#define LED1 2
#define LED2 3
#define LED3 4
#define LED4 7
#define LED5 8
#define LED6 9

//Definiowanie czasu mrugania?

#define LED1delay 500
#define LED2delay 750
#define LED3delay 1000
#define LED4delay 300
#define LED5delay 600
#define LED6delay 900


//Ustawienie 0 to LOW a 1 to HIGH?

unsigned long now=0;
int led1_state=0;
int led2_state=0;
int led3_state=0;
int led4_state=0;
int led5_state=0;
int led6_state=0;


unsigned long next_change_1;
unsigned long next_change_2;
unsigned long next_change_3;
unsigned long next_change_4;
unsigned long next_change_5;
unsigned long next_change_6;

void setup() {
 
 pinMode(LED1, OUTPUT);    
 pinMode(LED2, OUTPUT);
 pinMode(LED3, OUTPUT);
 pinMode(LED4, OUTPUT);    
 pinMode(LED5, OUTPUT);
 pinMode(LED6, OUTPUT);

 next_change_1=millis()+LED1delay;
 next_change_2=millis()+LED2delay;
 next_change_3=millis()+LED3delay;
 next_change_4=millis()+LED4delay;
 next_change_5=millis()+LED5delay;
 next_change_6=millis()+LED6delay;
 
}

void loop() {
 
 now=millis();

 if( now>=next_change_1 ) // sprawdzamy czy należy zmienić stan 1. diody
 {
   next_change_1=now+LED1delay;
   led1_state=1-led1_state;
   digitalWrite(LED1, led1_state);
 }

 if( now>=next_change_2 ) // sprawdzamy czy należy zmienić stan 2. diody
 {
   next_change_2=now+LED2delay;
   led2_state=1-led2_state;
   digitalWrite(LED2, led2_state);
 }

 
 if( now>=next_change_3 ) // sprawdzamy czy należy zmienić stan 3. diody
 {
   next_change_3=now+LED3delay;
   led3_state=1-led3_state;
   digitalWrite(LED3, led3_state);
 }
if( now>=next_change_4 ) // sprawdzamy czy należy zmienić stan 4. diody
 {
   next_change_4=now+LED4delay;
   led4_state=1-led4_state;
   digitalWrite(LED4, led4_state);
 }

 if( now>=next_change_5 ) // sprawdzamy czy należy zmienić stan 5. diody
 {
   next_change_5=now+LED5delay;
   led5_state=1-led5_state;
   digitalWrite(LED5, led5_state);
 }

 
 if( now>=next_change_6 ) // sprawdzamy czy należy zmienić stan 6. diody
 {
   next_change_6=now+LED6delay;
   led6_state=1-led6_state;
   digitalWrite(LED6, led6_state);
 }
}
 
Odpowiedź
#16
(08-02-2017, 15:15)Orion045 napisał(a): Tylko jak zrobić żeby najpierw bez migania zapaliła się np. czerwona a na drugim zielona a potem czerwona,pomarańczowa i na drugim zielna a dopiero później miganie pomarańczowej i zielonej?
To teraz naucz się poprawnie pisać algorytm bo z tego co podałeś nie wszystko wynika.

Przykład dla jednego sygnalizatora bez migania:
1. zapalamy czerwoną
2. czekamy określony czas1
3. gasimy czerwoną i zapalamy pomarańczową
4. czekamy określony czas2
5. gasimy pomarańczową i zapalamy zieloną
6. czekamy określony czas3
7. skok do kroku 1.

Numer kroku trzymaj w zmiennej.
Operacje na krokach najprościej wykonywać z użyciem funkcji switch ... case której parametrem będzie numer kroku.
Dla ułatwienia najpierw zrób tak aby zmienna krok zwiększała się o 1 co 1s (z użyciem millis oczywiście) a potem wróciła do wartości 1.
Przykłady dla switch:
http://forbot.pl/blog/artykuly/programow...zmy-id7520
http://www.plociennik.info/index.php/ste...aniem-kodu
Pomagam za darmo więc szanuj mój czas.
Wklejaj tekst a nie jego zdjęcie.
Nie pisz następnego postu jak nie odpowiedziałeś na poprzedni.
Jak mądrze zadawać pytania
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości