PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Asuro Fahrt nur Rückwärts. Porgrammierfeler???



Sim Robot
30.01.2008, 19:47
Ich müchte den Asuro so Programmieren dass er wen ner gegen ein Hindernis gefahren ist wieder etwas zurückfährt und dann dereht.
#include "asuro.h"

int main(void){
int c=0;
Init();
while(1){
unsigned char b;
b=PollSwitch();
MotorDir(FWD,FWD);
MotorSpeed(120,120);
if (b>0){
MotorDir(RWD,RWD);
MotorSpeed(120,120);
c=0;
for(c=0;c<282;c++){
Sleep(255);
MotorDir(RWD,FWD);
MotorSpeed(120,120);
c=0;
for(c=0;c<282;c++){
Sleep(255);
}
}
}
MotorDir(FWD,FWD);
MotorSpeed(120,120);
}
return 0;
}


Doch der Asuro fährt von anfang ann imm Kreis. Worann ligt das??

sloti
30.01.2008, 20:03
Hi,

frag die Taster mal mehrmals ab. In dem Thread hier wurde das Thema gerade nochmal angesprochen. https://www.roboternetz.de/phpBB2/viewtopic.php?t=37603&sid=fb0791fb27748edb921ed89532fbf552

Hansi41
30.01.2008, 20:34
der code müsste so aussehen:


#include "asuro.h"

int main(void){
int c=0;
unsigned char b;
Init();
while(1){
PollSwitch();
PollSwitch();
PollSwitch();
b=PollSwitch();
MotorDir(FWD,FWD);
MotorSpeed(120,120);
if (b>0){
MotorDir(RWD,RWD);
MotorSpeed(120,120);
c=0;
for(c=0;c<282;c++){
Sleep(255);
MotorDir(RWD,FWD);
MotorSpeed(120,120);
c=0;
for(c=0;c<282;c++){
Sleep(255);
}
}
}
MotorDir(FWD,FWD);
MotorSpeed(120,120);
}
return 0;
}

so das müsste funktionieren...

Sim Robot
31.01.2008, 11:03
Ja aber wenn ich zubeispiel das Schreibe
#include "asuro.h"

int main(void){
Init();
while(1){
if(PollSwitch()==1){
StatusLED(RED);
}
else{StatusLED(GREEN);}
}
}Dannn Funktionitonit das auch genau so wie es Funktionieren soll.

Sim Robot
31.01.2008, 12:29
Habe eben das Programm von Hansi 41 bei mir getestet doch der asuro dreht immer noch durchgehend. Fals es weiter hilft ich habe den C7 ausgelötet. Das soll PollSwitch feler vermeiden(habe ich ganz häfig hie im Forum gelesen).

Hansi41
31.01.2008, 13:41
hmm, bei mir hat es funktioniert, allerdings habe ich noch meinem C7 drinnen, aber warte mal ic hhabe da was mal irgendwo geschriebén dazu, warte hier glaube ich ist es: (siehe: https://www.roboternetz.de/phpBB2/viewtopic.php?t=37613)
hallo
Betreff: warum ist C7 dann eingentlich überhaupt in der schaltung ???
also C7 speichert, wenn keiner der taster gedrückt ist den strom vom 1-m-ohm widerstand R23.
Weil aber nun aus C7 kein strom entnommen wird, erreicht dieser bald betriebspannung. Wenn aber nun einer der taster gedrückt ist, so bilden sie mit den jeweils angeschlossen widerständnen R24-R30 und mit R23 einen Spannungsteiler, sodass C7 entladen wird. Diese spannung interpretiert Pin PD3 als logische '0', wodurch ein interrupt ausgelöst werden kann[...].
So das ist so inetwa das was die im Buch "Mehr Spaß mit ASURO" schreiben.

Sim Robot
31.01.2008, 13:51
Die Beiträge kenne ich schon. Darum habe ich mich auch entschlossen den C7 ausZu löten. Aber das ist ja nicht das Thema meine Frage war Warumm mein Programm nicht Funktioniert und ich habe immer noch keine Antwort. wenn jemmand noch eine Idee Hat soll erdoch bitte damit Rausrücken.

damaltor
31.01.2008, 14:30
Doppelpost entfernt...

H3llGhost
31.01.2008, 14:36
Bei meinem Kumpel lag es daran, dass der eine Taster defekt war.
Nach dem er diesen defekt behoben hatte, funktioniert alles wieder normal.

@Sim Robot:
Schreib mal ein Programm, welches eine Verbindung zum HyperTerminal aufbaut und dann ausgibt, welcher Taster gedrückt worden ist.
Dann kannst du ganz genau nachvollziehen, ob es einen Defekt auch bei dir gibt.

ts230
31.01.2008, 15:01
@H3llGhost so ein prog lade ich morgen hoch.Vieleicht Transistoren/Dioden falschgepolt od defekt??Ich hab das problem dass wen ich MotorDir(FWD,FWD); nehme fährt er rüchwärts.einfach (RWD,RWD); einsetztn schon funkts.

H3llGhost
31.01.2008, 15:17
Das liegt daran, dass der Hersteller bei den Motoren die Markierungen falsch gesetzt hatten.
Das hatten wir bei vielen von unseren 50 ASUROs auch.

Das Programm kann ich auch hochladen ... ;)
Das haben wir ja erst kürzlich in der Schule geschrieben ...
Mir ist es egal ...
Die einzige Vorraussetzung, die mein Programm hätte, wäre dass es die Library vorraussetzt.

Sim Robot
31.01.2008, 15:35
@Sim Robot:
Schreib mal ein Programm, welches eine Verbindung zum HyperTerminal aufbaut und dann ausgibt, welcher Taster gedrückt worden ist.
Dann kannst du ganz genau nachvollziehen, ob es einen Defekt auch bei dir gibt.
Habe ich gemacht. Mein Programm Siht so aus
#include "asuro.h"

int main(void){
unsigned char t;
unsigned char w;
Init();
while(1){
t=PollSwitch();
w=PollSwitch();
if((t==w)&&(w==1)){
SerWrite("a",1);
}
else if((t==w)&&(t==2)){
SerWrite("b",1);
}
else if((t==w)&&(t==4)){
SerWrite("c",1);
}
else if((t==w)&&(t==8)){
SerWrite("d",1);
}
else if((t==w)&&(t==16)){
SerWrite("e",1);
}
else if((t==w)&&(t==32)){
SerWrite("f",1);
}
}
return 0;
}
Und im Hyperterminal Kammen genau die signale an die ankommen sollten. Nämlich a,b,c,d,e und f. Also ist kein taster Kaputt.
Übrigens wie ich oben schon gesagt habe Funktioniet der if-satz nur nicht wenn ich dahinter MotorDir oder MotorSpeed setze.

Sim Robot
01.02.2008, 10:48
Ich habe mein Programm noch einmal überschrieben. Das sieht jetzt soe aus:
#include "asuro.h"

int main(void){
int c=0;
Init();
while(1){
unsigned char b;
unsigned char a;
b=PollSwitch();
a=PollSwitch();

MotorDir(FWD,FWD);
MotorSpeed(120,120);
Sleep(100);
if ((b>0)){
MotorDir(RWD,RWD);
MotorSpeed(120,120);
for(c=0;c<282;c++){
Sleep(255);}
MotorDir(RWD,FWD);
MotorSpeed(120,120);
for(c=0;c<282;c++){
Sleep(255);
}
}
else{
MotorDir(FWD,FWD);
MotorSpeed(120,120);
}
}
return 0;
}



Der Roboter Fährt zurück und dreht wenn er irgendwo gegen fährt. aber ich muss irgendwo eine schleife eingebaut haben.denn der Asuro wieder holt den "rückwärts und dreh code" manchmal 1x so wie er soll. doch manchmal auch2 oder 3x.woran liegt das???????

radbruch
01.02.2008, 11:09
Hallo


woran liegt das???????

if((t==w)&&(w==1)) prüft ob beidesmal der selbe Code eingelesen wurde

if ((b>0)) prüft nur, ob einmal etwas größer 0 eingelesen wurde

if ((b>0) && (a==b)) wäre richtig

Gruß

mic

Sim Robot
01.02.2008, 13:13
if ((b>0) && (a==b)) wäre richtig
Danke für den tipp. Hat allerdings noch nicht richtig geklapt. Deswegen habe ich es noch etwas abgändert.Nämlich
if ((b>0)&&(a==b)&&(a==c)&&(b==c))Jetzt geht es einwandfrei \:D/ ](*,) ](*,)

radbruch
01.02.2008, 13:20
Prima.

Wenn a==b und a==c brauchst du b==c nicht mehr prüfen.

mic