Arduino Fade PWM ohne delay()

Gast #4503345
Hallo zusammen. Ich habe folgendes Problem. Ich möchte mit zwei Binären 
Eingängen am Arduino einen PWM Ausgang langsam steigen bzw. fallen 
lassen. Da in diesem Programm später noch Teile hinzukommen die parallel 
laufen sollen, muss ich ohne "delay()" arbeiten. Je größer die Differenz 
desto schneller soll er zu dem Ausgangswert fahren, bzw. umgekehrt.

Bit1|Bit0
   0|0    = PWM Ausgang 0
   0|1    = PWM Ausgang 64
   1|0    = PWM Ausgang 128
   1|1    = PWM Ausgang 255
Bis jetzt arbeite ich erstmal nur mit Bit 0.
Das Problem was ich jetzt erst noch habe ist, dass der Duty-Cycle immer 
Stark springt und nicht bei dem Wert weiter macht wo er gerade steht. 
Wenn Bit 0=1 fährt er nach 64, wenn danach Bit0=0 springt er nach Null.
1
unsigned int pos = 0;    // variable to store the servo position
2
int direction = 0;
3

4

5
bool Rev_Bit0; //Eingang für Auflösung der Drehgeschwindigkeit
6
bool Rev_Bit1;
7

8
#define runEvery(t) for (static typeof(t) _lasttime;(typeof(t))((typeof(t))millis() - _lasttime) > (t);_lasttime += (t))
9

10

11
void setup() 
12
{ 
13
TCCR1B = TCCR1B & 0b11111000 | 0x01; // Setzt Timer1 (Pin 9 und 10) auf 31300Hz 
14
pinMode(8, INPUT); // Initialisiere Eingang 7 und 8 als Eingang
15
pinMode(7, INPUT);
16

17
} 
18

19

20
void loop() 
21
{ 
22

23
    Rev_Bit0 = digitalRead(8); //Lese kontinuierlich Eingänge und schreibe in Variable
24
    Rev_Bit1 = digitalRead(7);
25

26
        if (Rev_Bit0 == true){
27
          runEvery(50) //run every 50 milliseconds
28
          {
29
            if(pos < 64 )  
30
            {                                  
31
            pos = pos + 1;
32
            } 
33
            } 
34
           analogWrite(9,pos); 
35
          } 
36
  
37
            if (Rev_Bit0 == false){
38
              runEvery(50) //run every 50 milliseconds
39
              {
40
                if(pos > 0)     
41
                {                                
42
                  pos = pos - 1;
43
                }  
44
              } 
45
             analogWrite(9,pos); 
46
            }
47
  
48
}

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.