• 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
kolejne warunki w void loop
#1
Witam Wszystkich,

Potrzebuje pomocy przy dopisaniu kolejnego warunku, gdzie go dopisać? Oczywiście w sekcji void loop()

Jeżeli w kodzie chciałabym dołożyć kolejne przyciski to zostanie wywołany kolejny kod, gdzie go umieścić, np dla int przyciskTESTPin = 4;  if(digitalRead(przyciskTESTPin) == HIGH) oraz to co chcę aby się wykonało lub coś wyłączyło.

Gdzie w moim kodzie umieścić



int ledCzerwonaPin = 12;
int ledZoltaPin = 10;
int ledZielonaPin = 8;
int przyciskPin = 2;
int licznik;
int opoznienie1 = 7000;
int opoznienie2 = 900;
int opoznienie3 = 3500;
int opoznienie4 = 100;

void setup() {
  pinMode(ledCzerwonaPin, OUTPUT);
  pinMode(ledZoltaPin, OUTPUT);
  pinMode(ledZielonaPin, OUTPUT);
 
  pinMode(przyciskPin, INPUT);
}

void loop() {
  if(digitalRead(przyciskPin) == HIGH)
  {
    for(int licznik=0;;licznik=licznik+1)
    {
      digitalWrite(ledCzerwonaPin, HIGH);
      delay(opoznienie1);
      digitalWrite(ledCzerwonaPin, LOW);   
      delay(opoznienie4);
      digitalWrite(ledZoltaPin, HIGH);
      delay(opoznienie2);
      digitalWrite(ledZoltaPin, LOW);   
      delay(opoznienie4);
      digitalWrite(ledZielonaPin, HIGH);
      delay(opoznienie3);
      digitalWrite(ledZielonaPin, LOW);   
      delay(opoznienie4);
    }
 
  }
[url=https://forum.arduinopolska.pl/][/url]
 
Odpowiedź
#2
Między dolnymi klarmami tam gdzie się się kończy kod tego pierwszego warunku...
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#3
Jeżeli mam kilka takich , nieznacznie różniących się bloków kodu uruchamianych z różnych przycisków. Kolejne naciśnięcia innego przycisku działają tylko po zresetowaniu arduino. W jaki sposób programowo mogę zresetować arduino dodając po tym ifie, jeżeli jest naciśnięty przycisk to najpierw zresetuj.
W jaki sposób zastosować tu przerwania?

if(digitalRead(przyciskPin) == HIGH)
  {
    for(int licznik=0;;licznik=licznik+1)
    {
      digitalWrite(ledCzerwonaPin, HIGH);
      delay(opoznienie1);
      digitalWrite(ledCzerwonaPin, LOW);   
      delay(opoznienie4);
      digitalWrite(ledZoltaPin, HIGH);
      delay(opoznienie2);
      digitalWrite(ledZoltaPin, LOW);   
      delay(opoznienie4);
      digitalWrite(ledZielonaPin, HIGH);
      delay(opoznienie3);
      digitalWrite(ledZielonaPin, LOW);   
      delay(opoznienie4);
    }
 
  }

if(digitalRead(przycisKPin) == HIGH)
  {
    for(int licznik=0;;licznik=licznik+1)
    {
      digitalWrite(ledCzerwonaPin, HIGH);
      delay(opoznienie1);
      digitalWrite(ledCzerwonaPin, LOW);   
      delay(opoznienie4);
      digitalWrite(ledZoltaPin, HIGH);
      delay(opoznienie2);
      digitalWrite(ledZoltaPin, LOW);   
      delay(opoznienie4);
      digitalWrite(ledZielonaPin, HIGH);
      delay(opoznienie3);
      digitalWrite(ledZielonaPin, LOW);   
      delay(opoznienie4);
    }
 
  }


 
  }
 
Odpowiedź
#4
A kurczak dopiero teraz zauważyłem masz funkcje for i ona blokuje. Po prostu program działa tak jak pisałeś jeszcze tyle tyle delay-ów..

Pozbądź się funkcji "for" czymś innym... i pozbądź się delay nie blokuj mikrokontrolera
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#5
w jaki sposób wstawić mogę np while, proszę pomóż mi
 
Odpowiedź
#6
nie zmienić na coś inne ale wywalić, ten for to pętla która nigdy się nie kończy również mogło by być for(;Wink

Zmień sposób myślenia utwórz zmienną "X"

void loop() {
if(digitalRead(przyciskPin) == HIGH){
x=1;
}
if(digitalRead(przyciskPin1) == HIGH){
x=2;
}
if(digitalRead(przyciskPin2) == HIGH){
x=3;
}

/// case albo if

switch( x )
{
case 1:
digitalWrite(ledCzerwonaPin, HIGH);
delay(opoznienie1);
digitalWrite(ledCzerwonaPin, LOW);
delay(opoznienie4);
digitalWrite(ledZoltaPin, HIGH);
delay(opoznienie2);
digitalWrite(ledZoltaPin, LOW);
delay(opoznienie4);
digitalWrite(ledZielonaPin, HIGH);
delay(opoznienie3);
digitalWrite(ledZielonaPin, LOW);
delay(opoznienie4);
break;
case 2:
digitalWrite(ledCzerwonaPin, HIGH);
delay(opoznienie1);
digitalWrite(ledCzerwonaPin, LOW);
delay(opoznienie4);
digitalWrite(ledZoltaPin, HIGH);
delay(opoznienie2);
digitalWrite(ledZoltaPin, LOW);
delay(opoznienie4);
digitalWrite(ledZielonaPin, HIGH);
delay(opoznienie3);
digitalWrite(ledZielonaPin, LOW);
delay(opoznienie4);
break;
case 3:
digitalWrite(ledCzerwonaPin, HIGH);
delay(opoznienie1);
digitalWrite(ledCzerwonaPin, LOW);
delay(opoznienie4);
digitalWrite(ledZoltaPin, HIGH);
delay(opoznienie2);
digitalWrite(ledZoltaPin, LOW);
delay(opoznienie4);
digitalWrite(ledZielonaPin, HIGH);
delay(opoznienie3);
digitalWrite(ledZielonaPin, LOW);
delay(opoznienie4);
break;
}
}

I zmień delay na millis... bo zmiany przycisku zauwazy dopiero jak bedzie przycisk nacisniety powyzej 12s
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości