• 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
Pomoc w poznaniu języka - liczniki/pętle
#1
Witam wszystkich Arduinowców.
Jestem nowy, zielony (totalnie zielony) z programowania.
Korzystam z UNO i NANO.
Na razie korzystam z gotowych projektów i programów - które czasami próbuje łączyć - nie zawsze wychodzi...
Do rzeczy.
Chciałbym zrobić układ sterujący wykorzystujący PWM.
Konkretnie chodzi o pętle/liczniki. Układ miałby pracować w cyklu:
wyjścia PWM 1, PWM 2, PWM 3 (oczywiście wartości będą większe)
0,0,0
1,0,0
2,0,0
3,0,0
2,0,0
1,0,0
0,1,0
1,1,0
2,1,0
3,1,0
2,1,0
1,1,0
0,2,0
itd
Czy możecie naprowadzić mnie na trop?
Pozdrawiam.
 
Odpowiedź
#2
proponuję szukać pod hasłem analogWrite()
 
Odpowiedź
#3
Fragment kodu:

31 void loop() { //pętla główna programu
32 for (int i = 0; i < 16; i++) //pętla wykonywana 16
33 {
34 analogWrite(PWM1, i); //nastawa wypełnienia PWM1
35 delay(time); //opóźnienie
36 }
37 for (int i = 16; i > 0; i--) //pętla wykonywana 16 razy
38 {
39 analogWrite(PWM1, i); //nastawa wypełnienia PWM1
40 delay(time); //opóźnienie
41 }


Kod zwiększa a potem zmniejsza mi wartość PWM1. TU jest ok.

I chodzi mi o to, żeby po każdym wykonaniu tej pętli (zwiekszenia i zmiejszenia współczynnika) zwiększało zawartość zmiennej (j) sterującej wyjściem analogWrite(PWM2, j) o jeden, ALE po dojściu do wartości 16 wykonywało odejmowanie (zmniejszanie wartości wypełnienia PWM2) do zera - ale co jeden w każdym zwiekszeniu i zmiejszeniu współczynnika analogWrite(PWM1, i).
I żeby ta sama zależność występowała w analogWrite(PWM3, k) w stosunku do analogWrite(PWM2, j).
Jaki będzie kod i gdzie go wkleić?

Miłego wieczoru.
 
Odpowiedź
#4
(24-03-2022, 21:45)trafo1 napisał(a): Przeanalizuj działanie np. czegoś takiego:
Kod:
void loop() {
  static int j;
  static int increment = 1;
 
  if (j == 0) {increment = 1;}
  else if (j == 16) {increment = -1;}
 
  j = j + increment;
}

Taka pętla będzie liczyć od 0 do 16 i od 16 do 0 w nieskończonym cyklu.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości