Skocz do zawartości

Sterowanie 3 diodami LED z 6 wejść


sskorpion

Pomocna odpowiedź

Proszę o pomoc w napisaniu mojego pierwszego programu ArduinoUno.

Chcę z pomocą 2 wejść sterować 1 wyjściem (zaświecanie diody LED)

Potrzebne są 3 takie układy wyjść/wejść w jednym mikrokontrolerze.

Nie wiem jak się za to zabrać.

Zamieszczam rysunek stanów na wejściach.

Za pomoc z góry dziękuję.

Wypociłem coś takiego, działa. Ale jak to zrobić żeby były trzy niezależne od siebie wyjścia.

#define dioda1 3
#define sw1 9
#define sw2 10
int wypelnienie = 255;
int zmiana = 30;

void setup() {
pinMode(dioda1, OUTPUT);//Konfiguracja pinu jako wyjścia
pinMode(sw1, INPUT_PULLUP);//Konfiguracja pinu jako wejścia
pinMode(sw2, INPUT_PULLUP);//Konfiguracja pinu jako wejścia
}

void loop() {
  if (digitalRead(sw1) == LOW) {
      digitalWrite(dioda1, HIGH);
} else {
      digitalWrite(dioda1, LOW);
}

if (digitalRead(sw2) == LOW) {
      puls();
} else {
      digitalWrite(dioda1, LOW);
}}

void puls() {
analogWrite(dioda1, wypelnienie);

if (wypelnienie > 0) { 
wypelnienie = wypelnienie - zmiana; 
} else {
wypelnienie = 255; 
}
 delay(50); 
}
Link do komentarza
Share on other sites

w momencie wysterowania wszystkich diód spada częstotliwość pulsowania.

Jakieś pomysły żeby nie było tego efektu?

#define dioda1 6
#define dioda2 9
#define dioda3 10
#define dioda4 11
#define sw1 2
#define sw2 3
#define sw3 4
#define sw4 5
#define sw5 7
#define sw6 8
#define sw7 12
#define sw8 13
int wypelnienie1 = 255;
int wypelnienie2 = 255;
int wypelnienie3 = 255;
int wypelnienie4 = 255;
int zmiana = 20;

void setup() {
pinMode(dioda1, OUTPUT);//Konfiguracja pinu jako wyjścia
pinMode(dioda2, OUTPUT);//Konfiguracja pinu jako wyjścia 
pinMode(dioda3, OUTPUT);//Konfiguracja pinu jako wyjścia 
pinMode(dioda4, OUTPUT);//Konfiguracja pinu jako wyjścia 
pinMode(sw1, INPUT_PULLUP);//Konfiguracja pinu jako wejścia 
pinMode(sw2, INPUT_PULLUP);//Konfiguracja pinu jako wejścia 
pinMode(sw3, INPUT_PULLUP);//Konfiguracja pinu jako wejścia
pinMode(sw4, INPUT_PULLUP);//Konfiguracja pinu jako wejścia
pinMode(sw5, INPUT_PULLUP);//Konfiguracja pinu jako wejścia
pinMode(sw6, INPUT_PULLUP);//Konfiguracja pinu jako wejścia
pinMode(sw7, INPUT_PULLUP);//Konfiguracja pinu jako wejścia
pinMode(sw8, INPUT_PULLUP);//Konfiguracja pinu jako wejścia
digitalWrite(dioda1, LOW); //Wyłączenie diody
digitalWrite(dioda2, LOW); //Wyłączenie diody
digitalWrite(dioda3, LOW); //Wyłączenie diody
digitalWrite(dioda4, LOW); //Wyłączenie diody
}

void loop() {
    if (digitalRead(sw1) == LOW) {
    digitalWrite(dioda1, HIGH);
}    else {
    digitalWrite(dioda1, LOW);
}
    if (digitalRead(sw2) == LOW) {
    analogWrite(dioda1, wypelnienie1);
    if (wypelnienie1 > 0) { 
    wypelnienie1 = wypelnienie1 - zmiana; 
}   else {
   wypelnienie1 = 255; 
}
   delay(20);
}   else {

}
   if (digitalRead(sw3) == LOW) {
   digitalWrite(dioda2, HIGH);
}   else {
   digitalWrite(dioda2, LOW);
}
   if (digitalRead(sw4) == LOW) {
   analogWrite(dioda2, wypelnienie2);
   if (wypelnienie2 > 0) { 
   wypelnienie2 = wypelnienie2 - zmiana; 
}   else {
   wypelnienie2 = 255; 
}
   delay(10);
}   else {
}
   if (digitalRead(sw5) == LOW) {
   digitalWrite(dioda3, HIGH);
}   else {
   digitalWrite(dioda3, LOW);
}
   if (digitalRead(sw6) == LOW) {
   analogWrite(dioda3, wypelnienie3);
   if (wypelnienie3 > 0) { 
   wypelnienie3 = wypelnienie3 - zmiana; 
}   else {
   wypelnienie3 = 255; 
}
   delay(20);
}   else {
}
   if (digitalRead(sw7) == LOW) {
   digitalWrite(dioda4, HIGH);
}   else {
   digitalWrite(dioda4, LOW);
}
   if (digitalRead(sw8) == LOW) {
   analogWrite(dioda4, wypelnienie4);
   if (wypelnienie4 > 0) { 
   wypelnienie4 = wypelnienie4 - zmiana; 
}   else {
   wypelnienie4 = 255; 
}
   delay(20);
}   else {
}
}

__________

Komentarz dodany przez: Nawyk

Na przyszłość używaj proszę znaczników [ Code ] do wklejania kodu - poprawiłem

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Przy prawie każdej diodzie masz delay, który blokuje pracę procesora na jakiś czas, stąd pojawiają się Twoje problemy.

Możesz to rozwiązać używając timerów zamiast delay, albo ustawiając jeden delay, zamiast wielu, w kluczowym momencie działania programu (np. na końcu).

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.