Skocz do zawartości

Sterownie jasnoscia diody za pomoca PWM i switcha


marc1518

Pomocna odpowiedź

Zacznę od tego, że moja przygoda z arduino zaczęła się niedawno i jestem w tym nowy, więc proszę o wyrozumiałość dla nowicjusza 🙂

Końcowym efektem mojej zabawy ma być dioda (a raczej taśma LED), która przy naciśnięciu switcha zapala się np. na 40% mocy, przy kolejnym naciśnieciu 70%, przy kolejnym 100% a po 4 naciśnięciu dioda gaśnie.

Kompletnie nie wiem jak napisać kod, aby przy kolejnym kliknięciu wartość sygnału PWM się zmieniała. Próbowałem używać warunku if ale tyle co udało mi się zrobić to zmiana pomiędzy sygnałem PWM 40 a 255 i tak w kółko.

Kod wygłada tak:

int dioda=10; // pin podpiecia diody
int button=6; // pin podpiecia buttona
int licznik;
void setup()
{
 pinMode(dioda,OUTPUT);
 pinMode(button, INPUT_PULLUP);
}
void loop()
{
if(digitalRead(button)==LOW) // gdy wcisniemy przycisk
{
 while(digitalRead(button)==LOW); //sprawia, że pomimo trzymania przycisku wcisnietego zmiana nastapi tylko raz
 {
  delay(50);
 }
 licznik++;
}
if (licznik%2==0) //gdy reszta z dzielenia przez 2 == 0
{
 analogWrite(dioda, 40);
}
else
{
 analogWrite(dioda, 250);
}
}

Kod ten znalazłem gdzieś w internetach i próbowałem go modyfikować, łączyć z innymi ale nie wyszło.

Jest tu jakiś spec, który mi pomoże?

Link do komentarza
Share on other sites

Sposób 'na pałkę', rozwinięcie Twojego kodu. Możesz też wykorzystać switch zamiast ifologii.

int maxValue = 4;
void loop() 
{ 
 if(digitalRead(button)==LOW) // gdy wcisniemy przycisk 
 { 
   while(digitalRead(button)==LOW) //sprawia, że pomimo trzymania przycisku wcisnietego zmiana nastapi tylko raz 
   { 
      delay(50); 
   } 
   licznik++;
   if(licznik >= maxValue) {
     licznik = 0;
   }
   if (licznik == 0) 
     analogWrite(dioda, 0); 
   } else if(licznik == 1) {
     analogWrite(dioda, 40); 
   }  else if(licznik == 2) {
     analogWrite(dioda, 70); 
   }  else if(licznik == 3) {
     analogWrite(dioda, 100); 
   }
 }
} 
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Jakby ktoś jeszcze potrzebował w tym pomocy, to napisałem taki kod (działa):

int dioda=10;
int button=6;
int licznik;

void setup() {
  pinMode(dioda, OUTPUT);
  pinMode(button, INPUT_PULLUP);
  analogWrite(dioda, 0);
  licznik = 0;
  Serial.begin(9600);
  Serial.print(licznik);
}

void loop() {
  if(digitalRead(button)==LOW) {
    while(digitalRead(button)==LOW) {
      delay(50);
    }
    licznik++;
    Serial.print(licznik);
    if (licznik%3==0) {
      analogWrite(dioda, 0);
    } else if (licznik%3==1) {
      analogWrite(dioda, 40);
    } else {
      analogWrite(dioda, 250);
    }
  }
}

Serial.print został użyty tylko do testu, więc można go pominąć, ale przy rozwijaniu kodu i dodawaniu nowych funkcji może się przydać.

 

Mam nadzieję, że pomogłem osobom z takim problemem! 🙂

  • Lubię! 1
Link do komentarza
Share on other sites

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