Also wieder verzögern ist nicht nötig? Dann ist es kein Problem das a gleich bleibt an 255.
Also wieder verzögern ist nicht nötig? Dann ist es kein Problem das a gleich bleibt an 255.
Ungetestet:
So könnte ich mir die Funktion des Programms vorstellen.Code:#include <stdio.h> #include <asuro.h> #define false 0 // quick&dirty! #define true 1 int main(void) { Init(); char aC[2]; unsigned char tanzen = false; unsigned char Beschleunigung = false; int z = 0, y = 0, t = 0, gas = 0, a = 50; while( 1 ) { if (z < 8) // Tanzen? { tanzen = true; Beschleunigung = false; } else if (z < 12) // oder beschleunigen? { tanzen = false; Beschleunigung = true; } else // oder nixtun? { tanzen = false; Beschleunigung = false; } if (tanzen) // Wir tanzen den Gastanz { MotorSpeed(120,120); if(gas < 5 ) MotorDir(FWD,RWD); else if(gas < 15) MotorDir(RWD,FWD); else if(gas < 20) MotorDir(FWD,RWD); else if(gas < 30) MotorDir(FWD,FWD); else if(gas < 35) MotorDir(RWD,FWD); else if(gas < 45) MotorDir(FWD,RWD); else if(gas < 50) MotorDir(RWD,FWD); else if(gas < 60) MotorDir(RWD,RWD); else gas=0; gas=gas+1; } if(Beschleunigung) // Linker Antrieb bis 255 beschleunigen { MotorDir(FWD,FREE); MotorSpeed(a,0); a=a+5; if(a > 255) a = 255; } else // keine Beschleunigung { MotorDir(FREE,FREE); // bedeutet bremsen a=50; // und a auf Startwert setzen } utoa (z, aC, 10); // debugen SerWrite(aC, 2); SerWrite (" z\n\r", 5); for (t=0; t< 120; t++) Sleep (72); utoa (a, aC, 10); SerWrite(aC, 12); SerWrite (" a\n\r", 8); for (t=0; t< 120; t++) Sleep (72); y++; // Zähler weiterschalten if (y > 5) { z++; y=0; if (z > 15) z=0; } } return 0; }
Gruß
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Danke
Ich habe das jetzt getestet aber a ist immer 50
Lg
Hallo
Hier eine spanende Frage:
Mein Code:
Wenn ich das Programm so teste ist motorspeed auch von [0 - 8] 0 aber es steht ja nur bei [8-12]Code:if ((z > 0) && (z < 8)) B = true; if ((z > 8) && (z < 12)) tanzen = true; a = 0;
Wieso?
Wenn ich a = 0 weglase ist es von [0-8] nicht 0
Lg
Bist du sicher dass a immer 50 ist? Bei 48 Runden "tanzen" (z=0 bis z=7 jeweils y von 0 bis 5) sollten 48 mal die 50 für a am Terminal ausgegeben werden. Dann erst folgt die Beschleunigung mit 24 Runden, wieder gefolgt von 24 mal 50 in der Pause. Dann startet der Zyklus erneut.
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Das Befehl "a=0;" gehört nicht zu den if-Befehl das oben es steht. Es ist ein 'Einzelgänger'. Und macht a immer gleich an 0. Damit a=0 wird wann z>8 UND z<12 ist solltest du die befehlen danach zwischen {} klammern schreiben.Zitat von Problem
Code:if ((z > 0) && (z < 8)) B = true; if ((z > 8) && (z < 12)) { tanzen = true; a = 0; }
Ach ich bin ein .................
Ist klar wenn ich die Klammer nicht mache gilt es nur für den nächsten befehl und der ist mit ; zu ende
Ist mir schon klar
Dann werde ich weiter progen und versuchen es hinzubekommen
Danke
So das funkt jetzt
Noch eine Frage
kann es sein das er wegen a = 0 die motoren auch von [8-12] auf 0 schaltet obwohl ich oben bei if tanzen .. true MotorSpeed(120,120); angegeben habe ???Code:if ((z > 0) && (z < 8)) B = true; if ((z > 8) && (z < 12)) {tanzen = true; a = 0;}
Lg
Lesezeichen