Schnutzkurt schrieb:
> Hallo Karl Heinz,
> Danke für deine Antwort!
>
> Wenn ich aber in der Schleife zb.
>
> for (int i=0; i <= 400; i++){
> md.setM1Speed(i);
> delay(300);
>
> gerade läuft und das dauert ein paar Sekunden - denn Poti verstelle
> möchte ich das er gleich zum neuen Wert Springt und diese Schleife
> abarbeitet und nicht fertig dimmt.
Tja. Da brauchst du aber eine ganz andere Systematik. Du willst dann
genau diese Schleife in erster Linie gar nicht haben.
Das musst du dann ein wenig schlauer angehen und die for-Schleife erst
mal prinzipiell dadurch ersetzen, dass du die loop() indirekt diese
Schleife machen lässt.
1 | void loop()
|
2 | {
|
3 | if( currentSpeed <= 400 ) {
|
4 | md.setM1Speed(i);
|
5 | currentSpeed++;
|
6 | delay(300);
|
7 | }
|
8 | }
|
das macht ja genau dasselbe, nur das es keine for-Schleife bietet.
WEiters musst du feststellen, ob jemand am Poti gedreht hat. Das
erreichst du mit einem Wertevergleich mit einem früheren Wert
1 | void loop()
|
2 | {
|
3 | int WertPoti = analogRead(A2);
|
4 |
|
5 | if (WertPoti != alterWertPoti) {
|
6 | // das Poti ist verstellt worden
|
7 | alterWertPoti = WertPoti;
|
8 |
|
9 | if (WertPoti ....
|
10 | ...
|
11 | }
|
12 | }
|
und jetzt musst du die beiden Dinge noch kombinieren.
Zum einen soll die MotorDrehzahl sich laufend stetig verändern (durch
die 'for'-Schleife, zum anderen soll aber bei einer Wertänderung am Poti
dieses Hochzählen sofort unterbrochen werden. Im einfachsten Fall läuft
das auf einen 'Modus' hinaus. In welchem Modus ist die
Geschwindigkeitskontrolle? Soll der Motor in einer Rampe schneller
werden, oder soll er aufs Poti hören?
1 | #define MODE_RAMPE 0
|
2 | #define MODE_POTI 1
|
3 |
|
4 |
|
5 | void loop()
|
6 | {
|
7 | if (SpeedMode == MODE_RAMPE ) {
|
8 | if( currentSpeed <= 400 ) {
|
9 | md.setM1Speed(i);
|
10 | currentSpeed++;
|
11 | delay(300);
|
12 | }
|
13 | }
|
14 |
|
15 | // mittels einer Taste die Rampenfunktion starten
|
16 | if (Taste1 gedrückt)
|
17 | SpeedMode = MODE_RAMPE;
|
18 | currentSpeed = 0;
|
19 | }
|
20 |
|
21 | // wenn am Poti gedreht wurde, dann die Rampe sofort stoppen
|
22 | // und selber das Kommando über die Speed übernehmen
|
23 | int WertPoti = analogRead(A2);
|
24 |
|
25 | if (WertPoti != alterWertPoti) {
|
26 | // das Poti ist verstellt worden
|
27 | alterWertPoti = WertPoti;
|
28 | SpeedMode = MODE_POTI; // damit die Rampenfunktion abgestellt wird
|
29 |
|
30 | if (WertPoti ....
|
31 | ...
|
32 | }
|
33 | }
|