PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : kollisions programm



cele93
05.02.2010, 20:30
Hallo ich suche ein kollisions programm. Da ich selber noch nich programieren kann und derzeit keine zeit habe weollt ich euch fragen ob jemadn von euch ein Programm schreiben kann.
Der Asuro soll in einem Kasten solage nach vorne bis er irgendow anstößt. Danach ein bisschen nach Hinten und nach rechts oder links lenken. Solche Programme hab ich auch schon hier gefunden aber der Lieneiensensor ist da auch noch dazu eingeschalten. Dies mlchte ich nicht haben.
Ich hoffe jemand von euch kann mir son ein Programm schreiben.

Mein zweite frage:
Gibt es ein Programm, bei welchem der Asuro die Tischkante erkennt??


Gruß Cele93

Thund3r
06.02.2010, 00:16
Hallo

Hier dein Kollisionsprogramm:


#include <asuro.h>
int main (void)
{
Init();
int p;
while(1){
MotorDir(FWD,FWD);
MotorSpeed(125,125);
if(PollSwitch()>=8 )
{
MotorDir(RWD,RWD);
MotorSpeed(125,125);
for(p=0;p<300;p++)
{Sleep(72);}

MotorDir(BREAK,RWD);
MotorSpeed(0,125);
for(p=0;p<1000;p++)
{Sleep(72);}
}
if((PollSwitch()<8 && PollSwitch()>=1))
{
MotorDir(RWD,RWD);
MotorSpeed(125,125);
for(p=0;p<300;p++)
{Sleep(72);}

MotorDir(RWD,BREAK);
MotorSpeed(125,0);
for(p=0;p<1000;p++)
{Sleep(72);}
}
}
while(1){}
return 0;
}

Das Tischkantenprogramm müsste so inetwa aussehen (nicht getestet):


#include <asuro.h>
int main (void)
{
int p;
unsigned int data[2];
Init();
FrontLED(ON);
while(1)
{
LineData(data);
if (data [0]<260 || data [1]<260) // Hier musst du bei Bedarf anpassen
{
MotorSpeed(0,0);
BackLED(ON,OFF);
for(p=0;p<200;p++)
{Sleep(72);}
BackLED(OFF,ON);
for(p=0;p<200;p++)
{Sleep(72);}
}
else
{
MotorDir(FWD,FWD);
MotorSpeed(125,125);
}
}
while(1){}
return 0;
}

Sobald der Asuro die Tischkante erkennt bleibt er stehen udn blinkt mit den LEDs.
Wenn der Asuro generell stehen bleiben auch mit "festem Untergrund" musst du die Zahlen 260 vergrößern bis es passt (versuch am besten 20er Schritte also 280 wenner immer noch so stehen bleibt 300 usw bis es klappt max 1023)

Gruß Thund3r

radbruch
06.02.2010, 00:31
Hallo


if (data [0]<260 || data [1]<260)
Sind die Werte der Liniensensoren mit der orginalen FrontLED wirklich so hoch?

Bitte verwende Code-Tags.

Gruß

mic

Thund3r
06.02.2010, 00:33
Hallo

Also bei mir waren sie in dem Bereich müssn halt angepasst werden wenns bei ihm anders ist.

Gruß Thund3r

cele93
06.02.2010, 08:22
Dein Kollisionsprogramm ist nicht schlecht aber mein Asuro benutzt immer noch den lieniensensor, zwar ohne FrontLed aber er macht es. liegt das jetzt an meinem ASURO oder hast du das rein programiert. Solche Programme ahb ich schon gefunden, deshalb such ich eins ohne diesen Lensor, oder geht das nicht??
Ich hoffe ihr könnt mir helfen.

Gruß Cele93

Ceos
06.02.2010, 09:35
wie kommst du darauf dass er die sensoren benutzt O_o ich seh keinen fetzen code der damit was zu tun hat! muss dann wohl "an deinem ausro" liegen

cele93
06.02.2010, 10:10
Also an meinem Asuro liegt es nicht!! hab es jetzt mit einem 2ten Versucht und da klappt es auch nicht. der dreht die ganze zeit im Kreis. fährt zurück und dreht dann . Dann ein bisschen vor, dann wieder das selbe.hab jemadn noch ein andres Kolisionsprogramm für mich, bei welchem der Lieneiensensor ausgeschaltet ist??

Gruß cele

Thund3r
06.02.2010, 10:19
Hallo

Also das dauernde im Kries fahren kann daran liegen dass PollSwitch()>=1 manchmal erreicht wird auch ohne das der Taster bestätigt wurde am besten du veränderst die zeile so:

Aus PollSwitch()>=1 machst du PollSwitch()>1
dann müsste es klappen.

Wie kommst du auf die Idee das der Liniensensor angeschaltet ist?! Der wird in dem Kolisionsprogramm weder aktiviert nocht verwendet.

Gruß Thund3r

josua
06.02.2010, 12:51
wenn die front led aus ist kann man normal auch garnicht erkennen ob der liniensensor benutzt wird. wie kommst du also darauf?? ich schätze mal dass thund3r recht hat mit dem pollswitch.

josua

cele93
06.02.2010, 15:47
Also ich hab das = mal weg gemacht. ist gleich besser nur manchmal acht er es noch, dass er umdreht ohne das er ein Hinderniss berührt hat. was kann man dagegen machen??
Ich dachte es sei der Liniensensor, weil es mir so vorkam, dass er nur bei dunklen stellen undrehte.

Ich hoffe ihr könnt mich noch sagen was ich tun muss.
Gruß Cele

Thund3r
06.02.2010, 15:56
Hallo

versuchs mal so:



#include <asuro.h>
int main (void)
{
Init();
int p;
while(1){
MotorDir(FWD,FWD);
MotorSpeed(125,125);
if(PollSwitch()>=8 )
{
if(PollSwitch()>=8 )
{
MotorDir(RWD,RWD);
MotorSpeed(125,125);
for(p=0;p<300;p++)
{Sleep(72);}

MotorDir(BREAK,RWD);
MotorSpeed(0,125);
for(p=0;p<1000;p++)
{Sleep(72);}
}
}
if((PollSwitch()<8 && PollSwitch()>1))
{
if((PollSwitch()<8 && PollSwitch()>1))
{
MotorDir(RWD,RWD);
MotorSpeed(125,125);
for(p=0;p<300;p++)
{Sleep(72);}

MotorDir(RWD,BREAK);
MotorSpeed(125,0);
for(p=0;p<1000;p++)
{Sleep(72);}
}
}
}
while(1){}
return 0;
}

Dann wird 2 mal abgefragt ob ein Taster auch gedrückt wurde.

PS Funktioniert das Tischkantenprogramm?

Gruß Thund3r

cele93
06.02.2010, 16:10
Also danke werde ich gleich veruschen ob es jetzt geht.
Das mit der Tischkante geht nicht. egal welche Zahl ich eingegeben ahbe der Asuro ist immer stehen geblieben. Ist egal ich hab ein anderes Tischkanten Programm gefunden.


#include "asuro.h"

#define STOP 40
int main(void)
{

unsigned int lineData[2];
unsigned char running = 1;
Init () ;
MotorDir (FWD,FWD);
MotorSpeed(180,180);
FrontLED(ON);
do {
LineData (lineData) ;
if ((lineData[0] < STOP) && (lineData[1] < STOP)) {
MotorSpeed(0,0);
BackLED(ON,ON);
running = 0;

}
} while (running);
while(1);
return(0);
}



bei diesem Programm stürt mich ,dass der Asuro nich nach hintenfährt wenn er an der tischkante ist. Auch gut wäre wenn er an der Tischkante steht, dass die Backleds blincken. wäre coll wenn das Jemand so umschreiben könnte

Gruß Cele

Thund3r
06.02.2010, 16:16
Hallo

Mit geblinke und nun wird das Programm dauerhaft ausgeführt wenn du den Asuro nachdem er ne Tischkante gefunden hat wieder auf den Tisch stellst sucht er wieder ne Tischkante:

Nich getestet:


#include "asuro.h"

#define STOP 40
int main(void)
{

unsigned int lineData[2];
unsigned char running = 1;
Init () ;
int p;
MotorDir (FWD,FWD);
FrontLED(ON);
while (1) {
LineData (lineData) ;
if ((lineData[0] < STOP) && (lineData[1] < STOP)) {
MotorSpeed(0,0);
BackLED(ON,OFF);
for(p=0;p<200;p++)
{Sleep(72);}
BackLED(OFF,ON);
for(p=0;p<200;p++)
{Sleep(72);}

}
else
{

MotorSpeed(180,180);
}

}
while(1);
return(0);
}

Gruß Thund3r