• 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
Sterowanie włącz wyłącz na 2 kanały prośba o porade
#1
Witam mam oto taki prosty program

void setup() {
  pinMode(10, OUTPUT); //Dioda czerwona
  pinMode(9, OUTPUT); //Dioda żółta
  pinMode(8, OUTPUT); //Dioda zielona
  pinMode(11, OUTPUT); //dioda biala
 
  pinMode(7, INPUT_PULLUP); //Przycisk
  pinMode(6, INPUT_PULLUP); //przycisk2
 
  digitalWrite(10, LOW); //Wyłączenie diod
  digitalWrite(9, LOW);
  digitalWrite(8, LOW);
  digitalWrite(11, LOW);
}
 
void loop()

{
  digitalWrite(10, LOW); //Czerwona                                                       
  digitalWrite(11, LOW); //Czerwona
  digitalWrite(9, LOW); //Czerwona
  digitalWrite(8, LOW); //Czerwona
  
  delay(1000); //Zatrzymujemy program przed wejsciem do pętli na 1 sekunde
  while (digitalRead(7) == HIGH) {} //Czekaj na wciśnięcie przycisku
  digitalWrite(11, HIGH); //Czerwona
  delay(1000); //Zatrzymujemy program przed wejsciem do pętli na 1 sekunde
  while (digitalRead(7) == HIGH) {} //Czekaj na wciśnięcie przycisku
 

}

załącza i wyłącza 1 diode 1 tym samym przyciskiem

Chciałbym do programu dodac 2 diode i 2 przycisk niezależnie załączane przypisac do 1 przycisku włącz wyłącz 1 diode
do 2 przycisku włącz wyłącz 2 diode.

Prosze o pomoc czego mi brakuje co mam dodac do programu by dodac 2gi przycisk do sterowania ??
Kombinowałem powielic program pozamieniac wyjscia ale zawsze jest jedna dioda zalezna od 2giej.

Dodam tez taki program działa tylko nie podtrzymuje swiecenia diody jak dodac zeby dioda swieciała stale a nie mrugała i szło ją wyłączać ? ?

void setup() {
pinMode(10, OUTPUT); //Dioda czerwona
pinMode(9, OUTPUT); //Dioda żółta
pinMode(8, OUTPUT); //Dioda zielona
pinMode(11, OUTPUT); //DIODA BIALA

pinMode(7, INPUT_PULLUP); //Przycisk
pinMode(6, INPUT_PULLUP); //P2
pinMode(5, INPUT_PULLUP); //P3
pinMode(4, INPUT_PULLUP); //P4

digitalWrite(10, LOW); //Wyłączenie diod
digitalWrite(9, LOW);
digitalWrite(8, LOW);
digitalWrite(11, LOW);
}

void loop() {

while (digitalRead(7) == LOW) { //Jeśli przycisk jest wciśnięty
digitalWrite(11, HIGH); //Czerwona wyłącz
delay(300);
digitalWrite(11, LOW); //Czerwona włącz
delay(300);
}

while (digitalRead(6) == LOW) { //Jeśli przycisk jest wciśnięty
digitalWrite(10, HIGH); //Czerwona wyłącz
delay(300);
digitalWrite(10, LOW); //Czerwona włącz
delay(300);
}

while (digitalRead(5) == LOW) { //Jeśli przycisk jest wciśnięty
digitalWrite(9, HIGH); //Czerwona wyłącz
delay(300);
digitalWrite(9, LOW); //Czerwona włącz
delay(300);
}

while (digitalRead(4) == LOW) { //Jeśli przycisk jest wciśnięty
digitalWrite(8, HIGH); //Czerwona wyłącz
delay(300);
digitalWrite(8, LOW); //Czerwona włącz
delay(300);}

}
 
Odpowiedź
#2
Używając delay możesz stworzyć tylko jedną linię czynności w programie następujących po sobie. Jak chcesz mieć namiastkę pracy równoległej to zapoznaj się z millis(). Każdą czynność uzależniasz wtedy od tego kiedy wydarzyła się poprzednia, program nie jest zatrzymywany w delay, a po prostu ignoruje czynności, których jeszcze nie powinien wykonać. Po kodzie widać jednak, że nie masz o tym pojęcia, zacznij więc kurs Arduino od początku: https://forbot.pl/blog/kursy.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#3
Czy ktos juz ci pomogl z tym projektem?
 
Odpowiedź
#4
Jaki projekt? To jest zakres kursu Arduino, jest link do kursu, to są postawy, siedzisz w kursie aż zrozumiesz, przerabiasz zagadnienia z kursu od góry do dołu, z prawej do lewej i potem na odwrót, a na koniec wszystko od nowa z millis.

Idea millis jest bardzo prosta, zamiast zatrzymywać działanie programu na 300ms pomijasz wykonywanie danej czynności przez 300ms.
Jak użyjesz kilka razy krótkich delay to kod będzie jakoś działał i to jest pokazywane w przykładowych programach robiących 1 czy 2 rzeczy, jak program zaczyna się rozbudowywać to tak się nie da, bo głównie będzie stał w delay, nawet średnio skomplikowany, a takie czasy zaczną trwać powyżej 10s i tyle musisz trzymać jakiś przycisk by jego wciśnięcie zostało zauważone. Z millis taki program sprawia wrażenie jakby działał na uC pracującym mln x szybciej, a to nie różnica MHz tylko programisty.
Nie bierzesz się za budowę szopy, jak nie wiesz jak trzymać młotek i w którą stronę trzymać gwoździa.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości