Ja sehr! Vielen dank x) .. ich werd das morgen alles mal testen und dann mal sehen. Hoff ihr helft mir dann ein weiteres mal falls Schwierigkeiten auftreten sollten.
Druckbare Version
Ja sehr! Vielen dank x) .. ich werd das morgen alles mal testen und dann mal sehen. Hoff ihr helft mir dann ein weiteres mal falls Schwierigkeiten auftreten sollten.
Aktuell ist V2.8:Zitat:
Also ich hab mir alle neuesten Versionen aus dem internet runtergeladen welche Version habe ich dann?
https://www.roboternetz.de/community...l=1#post252982
In der Datei CHANGELOG steht der Hinweis auf die Version. Ab v2.3 sind es 36kHz.
Ich meine mich zu erinnern, dass ich mal irgendwo gelesen hab das diese formulierung hier problematisch werden kann:
(PollSwitch()!=0) <-- das soll die bedingung sein das er für kurze zeit rückwärs fährt
falls diese schreibweise tatsächlich problematisch ist, was wäre besser?
denn bei meinem aktuellen programm folgt er erst der linie und dann fängt er plötzlich an sich zu dreht? kann das daran liegen? oder sind noch andere fehler in dem programm?
Denn eigendlich soll er ja einer linie folgen und wenn er wo dagegen stößt kurz rückwärtsfahren und dann eine links/rechts kurve machen und dann wieder einer linie folgen.
Kann mir bitte jemand helfen?
#include "asuro.h"
int main(void)
{
Init();
int i;
while(1)
{
if(PollSwitch()!=0)
{StatusLED(RED);
MotorDir(RWD,RWD);
MotorSpeed(120,120);
for (i=0;i<280;i++){Sleep(255);}
MotorSpeed(0,0);
MotorDir(FWD,FWD);
MotorSpeed (0,120);
for (i=0;i<280;i++){Sleep(255);}
MotorSpeed(0,0);
}
else{
int line_data[2];
LineData(line_data); // line_date[0]: linker Sensor, [1]: rechter Sensor
// schwarzer Untergrund: kleine Werte; heller Hintergrund: große Werte
FrontLED(ON); // liefert bessere bzw. konstrastreichere Werte
int limit = 45; // Dieser Vergleichswert ist an die Lichtverhältnisse anzupassen
int speed = 120;
int debug_mode = 0; // 0: aus; 1: an, ASURO sendet die Werte der Sensoren zurück
while (line_data[1] > limit)
{
if (debug_mode)
{
SerWrite("rechts\r\n", 8 );
PrintInt(line_data[1]);
SerWrite("\r\n", 2);
}
BackLED(OFF, ON);
MotorSpeed(0, speed);
LineData(line_data);
}
while (line_data[0] > limit)
{
if (debug_mode)
{
SerWrite("links\r\n", 7);
PrintInt(line_data[0]);
SerWrite("\r\n", 2);
}
BackLED(ON, OFF);
MotorSpeed(speed, 0);
LineData(line_data);
}
MotorDir(FWD, FWD);
MotorSpeed(speed, speed);
}
}
return 0;
}
Ist der Pin wo der Schalter dran angeschlossen ist vielleicht nicht vernünftig auf Masse gezogen, sodass die Pegel dort mal schwanken können?
Wäre eine erste Idee, weil auf dem ersten Blick sieht das Programm richtig aus.
Setz mal bitte deine Programme zwischen [ code] und [/ code] ins Forum (ohne das Leerzeichen).
Das sieht dann so aus
Bzw. ist es nur die Schreibweise des Befehls die Probleme macht oder der ganze Befehl?Code:Test
Weil sonst frag doch einfach den Pin wo der Taster dran angeschlossen ist direkt mit einer If-Abfrage ab.
Beispielhaft für die unzähligen Threads:
https://www.roboternetz.de/community...l=1#post530311
https://www.roboternetz.de/community...l=1#post529782
hm ich glaube ein weiteres problem ist das er doch die kurve nur dann fährt wenn ein taster gedrück ist . Oder verstehe ich da das programm falsch?
tut mir wirklich leid aber ich habe kaum programmierfähigkeit ... ich wüsste auch nicht wie ich den programmteil einbinden könnte der jeden taster mehrmals abfrägt
hier nochmal der programm code:
Code:#include "asuro.h"
int main(void)
{
Init();
int i;
while(1)
{
if(PollSwitch()!=0)
{StatusLED(RED);
MotorDir(RWD,RWD);
MotorSpeed(120,120);
for (i=0;i<280;i++){Sleep(255);}
MotorSpeed(0,0);
MotorDir(FWD,FWD);
MotorSpeed (0,120);
for (i=0;i<280;i++){Sleep(255);}
MotorSpeed(0,0);
}
else{
int line_data[2];
LineData(line_data); // line_date[0]: linker Sensor, [1]: rechter Sensor
// schwarzer Untergrund: kleine Werte; heller Hintergrund: große Werte
FrontLED(ON); // liefert bessere bzw. konstrastreichere Werte
int limit = 45; // Dieser Vergleichswert ist an die Lichtverhältnisse anzupassen
int speed = 120;
int debug_mode = 0; // 0: aus; 1: an, ASURO sendet die Werte der Sensoren zurück
while (line_data[1] > limit)
{
if (debug_mode)
{
SerWrite("rechts\r\n", 8 );
PrintInt(line_data[1]);
SerWrite("\r\n", 2);
}
BackLED(OFF, ON);
MotorSpeed(0, speed);
LineData(line_data);
}
while (line_data[0] > limit)
{
if (debug_mode)
{
SerWrite("links\r\n", 7);
PrintInt(line_data[0]);
SerWrite("\r\n", 2);
}
BackLED(ON, OFF);
MotorSpeed(speed, 0);
LineData(line_data);
}
MotorDir(FWD, FWD);
MotorSpeed(speed, speed);
}
}
return 0;
}
Wenn du so Probleme hast das fertige Programm zu verstehen, fang doch erstmal mit kleinen Schritten an. :)
Lass den Asuro erstmal nur gerade aus fahren und dann eine Kurve usw.
Gib ihm erstmal nur feste Sachen vor die er tun soll ohne auf seine Umwelt zu reagieren so das du die Befehle und deren Funktion kennen lernst. Und dann taste dich immer weiter ran. Also wenn du die Befehle drauf hast sag dem Asuro das er nach Links fahren soll wenn der linke Taster gedrückt wird. So tastest du dich Schritt für Schritt an dein eigentliches Ziel heran und lernst auch die Befehle. Es bringt ja nichts wenn du ein langes Programm hast wo du kaum was von verstehst oder :)?