Servus,
Ziro schrieb:
> Dazu sei noch gesagt, dass zwischen den Werten 0-33-66-100 der Wert
> linear steigen bzw fallen soll. Die Zeit muss eingestellt werden können,
> ähnlich ie bei delay.
Wie willst du vorgehen: interrupts oder pollen?
Hier erstmal pollen:
Du erstellst für jeden Zustand eine Variable (bool):
1 | uint8_t motor1_zustand0=0;
|
2 | uint8_t motor1_zustand33=0;
|
3 | uint8_t motor1_zustand66=0;
|
4 | uint8_t motor1_zustand100=0;
|
5 |
|
6 | uint8_t motor2_zustand0=0;
|
7 | ...
|
Du musst in der main eine "Echtzeit" programmieren. D.h. z.B. alle 10ms
soll dein Programm abgespult werden.
1 | Pseodocode:
|
2 | if(!(millis()%10)){ //10ms
|
3 |
|
4 | programm:
|
5 | if (motor1_zustand0){
|
6 | //hier deine loop, Kopfrechnen musst du selber bei 10ms Abtastzeit
|
7 | }
|
8 |
|
9 | if (motor1_zustand33){
|
10 | //hier deine loop, Kopfrechnen musst du selber bei 10ms Abtastzeit
|
11 | }
|
12 | ...
|
13 | }
|
jetzt wird alle 10ms nach den Zuständen geguckt.
Noch besser wäre ein switch case.
1 | typedef enum{
|
2 | zustand0=0, zustand33, zustand66, zustand100
|
3 | }MOTOR_ZUSTAND_t
|
4 |
|
5 | MOTOR_ZUSTAND_t MOTOR1_t,MOTOR2_t,MOTOR3_t,MOTOR4_t;
|
Und schon läuft der Rubel! :D