Skocz do zawartości

Sterowanie 3 diodami LED z 6 wejść


Pomocna odpowiedź

Napisano

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); 
}

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

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).

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...