Arduino Fade PWM ohne delay()

Gast #4503345
Lesenswert?
• ▲
▼
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren