](*,)Zitat:
Zitat von Valen
Druckbare Version
](*,)Zitat:
Zitat von Valen
Nein, leider nicht ganz. Weil wenn K1,K2 undZitat:
Zitat von Ollowain
K3 gleichzusammen eingedruckt sind (asuro stosst gegen ein weiches objekt an auf seiner linker seite) ist das gleich an 8+16+32=56. Das ist auch grosser als 31, aber nicht nur K1. Oder zb. K1 mit K6 als störungsignal (K6 ist nicht wirklich eingedrukt aber der analog-digital converter ADC hat ein wenig falsch gemessen wegen den motorrausch) ist das auch grosser als 31: 32+1=33.
okay jetz hab ichs verstanden. Wie läuft das mit der kalibrierung der Taster?
Diesen thread habe ich gefunden durch suchen auf 'kalibrieren' im asuro abteilung:
https://www.roboternetz.de/phpBB2/ze...ht=kalibrieren
Im dritten bericht steht ein beispiel wie mann das machen kan beim orginalem lib. Die erweiterte lib had einer andere funktion fur PollSwitch, und speichert den kalibrier wert in einer bestimmte datei ("myasuro.h" wenn ich mich nicht irre) Den orginale lib ist gut genug fur anfanger mit Asuro. Den erweiterten lib ist keinen 'muss' wie du sagst. Aber es ist was besser documentiert, und hat einiger fehler im code aufgelost. Den code erweiterungen machen die code aber etwas schwieriger zu verstehen. Weil die code uber mehrere dateien verteilt ist. Ich wurde das nur emphelen wenn du die orginal lib c-code richtig lesen unt verstehen kannst.
So, ich hab mich heut endlich mal ran gemacht das mit dem Programmieren etwas zu blicken.
Geradeaus fährt er schonmal, an der Wand setzt er auch minimal zurück, aber eben nur minimal.
Die Taster Funktionieren einwandfrei. Solange man sie gedrückt hält fährt er rückwärts und sofort beim loslassen wieder vorwärts.
Jetzt wollt ich die Schleife
for(i=0;i<1000;i++){
Sleep (72);
}
ins Programm bringen und auf einmal fährt er nur noch rückwerts im Kreis.
Linkes Rad flüssig, rechtes Rad stotternd, sobald ich den Taster drück macht er dann das was er soll. (zurücksetzen für ne Zeit)
Aber warum fährt er dauernd rückwärts ??
Weiß jemand Rat, oder wie ich die Zeit des Rückwärtsfahrens mit MSleep und ohne schleife hinbekomme?
Hab schon versucht etwas in die asuro.h zu schreiben, is aber wohl nicht so einfach mit reinschreiben . :-k
Code:#include "asuro.h"
int main(void)
{
unsigned char t1, t2;
int i;
Init();
while(1)
{
t1 = PollSwitch();
t2 = PollSwitch();
if (t1 == 0 && t2 == 0)
{
MotorDir(FWD,FWD);
MotorSpeed(175,180);
BackLED(OFF,OFF);
FrontLED(ON);
}
else if( t1 && t2 && t1 == t2)
{
MotorSpeed(0,0);
StatusLED(RED);
if( t1 & 0x07 ) //Tasten links gedrückt??
{
FrontLED(OFF);
BackLED(ON,OFF);
MotorDir(RWD,RWD);
MotorSpeed(100,0); // linkes rad rückwärts
}
if( t1 & 0x38) //Tasten rechts gedrückt ??
{
FrontLED(OFF);
BackLED(OFF,ON);
MotorDir(RWD,RWD);
MotorSpeed(0,100); //rechtes Rad Rückwärts
}
***********hier hatte ich mal die Schleife drin ********************
}
return 0;
}
Wie hasst du das compiliert gekriegen. Die while-schleife braucht noch einer klammer zum ende. Die anzahl von "{" sind nicht gleich and die anzahl von "}". Auf welchem platz hast du ihn in einer alter version deiner program gesteckt?
Hachja wieso einfach wenns auch kompliziert geht :D
Sorry, aber irgendwie macht ihr das alles viel zu kompliziert^^ Erstmal zum MsSleep Hier mal eine Selbstgebaute Funktion die im Grunde genommen das Selbe macht:
Einfach die Funktion in dein Programm schreiben (weis nicht ob man das auch einfach so in die "asuro.h" schreiben kann, ich habe dies immer als zusätzliche Datei gespeichert und binde sie dann ein als "pause.h"). Also nach dem include in die nächste Zeile einCode:void pause (int zeit)
{
int t;
for (t=0; t<zeit; t++)
{
Sleep (72);
}
}
und nach dem Hauptprogramm den oben genannten code Einfügen schon kannst du einfach "pause (1000)" in dein Hauptprogramm eingeben und es wartet 1sek ohne irgendwelche Schleifen ;)Code:void Pause (int zeit);
Zu den Problem mit den Tastern:
So sollte es eigentlich funktionieren^^ Hab aber wie so oft das Problem ich kanns hier nicht testen... Sollte es nicht Funktionieren passt mit dem if und deren Klammersetzung etwas nicht und es muss ein while rein. Bin mir aber nicht ganz sicher dessen^^Code:#include "asuro.h"
void pause (int zeit);
int main(void)
{
Init();
int a;
while (1)
{
while (PollSwitch () == 0)
{
StatusLED (GREEN);
MotorDir (FWD, FWD);
MotorSpeed (150, 150);
pause (50);
}
if ((PollSwitch()==1)||(PollSwitch==2))
{
BackLed (ON,OFF);
MotorDir (RWD, RWD);
MotorSpeed (120,120);
pause (1000);
MotorDir (FWD,FWD);
MotorSpeed (120, 0);
pause (500);
MotorSpeed (0,0);
}
//Das selbe spiel mit PollSwitch==16/32 nur diesmal andersherum mit den Geschwindigkeiten und den Backleds
BackLED (OFF, OFF);
}
StatusLED (RED);
return 0;
}
void pause (int zeit)
{
int t;
for (t=0; t<zeit; t++)
{
Sleep (72);
}
}
Das Problem bei deinem Programm ist: du hast kein Sleep drinn weswegen der Prozessor nicht eine bestimmte Zeit rückwärts fährt nur eben dann wenn einer der Tasten gedrückt worden ist^^ Aber im grunde genommen sollte dein Programm auch funktionieren fällen eben nur ein paar Pausen drinn ;)
beste Grüße
the.speciali
EDIT: Init hat gefehlt, return 0...
Und stimmt das mit der While Schleife ist mir garnicht aufgefallen Valen.