-
-
Asuro fährt nicht geradeaus
Hallo erstmal .
Ich bin ganz neu, und steige erstmal langsam ein. Mein Asuro ist seit ein paar Tagen fertig. hat alles auf Anhieb geklappt. Sämtliche Selbsttest wunderbar durchlaufen.
Und mit dem Programmieren---halt rumgespielt, und langsam erste Sachen verstanden.
Wenn er jetzt aber mit der Odometrie geradeaus fahren soll, macht er das nicht.
Motoren laufen, Odometriesensoren funktionieren bei´m Selbstest auch.
Kann man vieleicht den Speicher au null setzen. Sorry für meine dumme Frage, aber wie gesagt --ganz neu hier.
Gruß frank
-
Erfahrener Benutzer
Roboter-Spezialist
Hallo
Welchen Speicher genau willse den auf null setzen?
Und was versprichst du dir davon?
Am besten du postest deinen Quellcode dann kann man dir am besten helfen.
Gruß Thund3r
-
Dachte den Speicher, wo er den Lichtwert speichert, Oder ist das Quatsch.
Und was ist mein Quellcode und wie komm ich da drann?
-
Erfahrener Benutzer
Roboter-Spezialist
Hallo
Also ein Quelltext ist zB
#include <asuro.h>
int main (void)
{
while(1)
{
MotorDir(FWD,FWD);
MotorSpeed(125,125);
}
return 0;
}
Und den von deinem Programm würd ich gerne mal sehen.
--
Jedesmal wenn du im Programm sagst dass der neue odometrie wert eingelesen wird verändert sich ja dieser .
...
while(1)
{
int a,b;
OdometrieData(data);
data[0] =a;
data[1] =b;
}
...
a ist dann zB im ersten Schleifendurchlauf 550 und b 856
im 2ten durchkauf ändert sich dann aber der wert das zB a = 976 und b=467 ist usw. So brauchst du nichts zu löschen weil sich der wert permanent ändert(in jedem durchlauf)
Gruß Thund3r
-
OK hier ist der Quelcode. den hab ich so im Netz gefunden, und beim ersten versuch hats ja auch geklappt.
#include "asuro.h"
// Schwellwert fr die Hell/Dunkel-Unterscheidung
// Eventuell muss damit etwas variiert werden
#define TRIGGERLEVEL 600
#define HYSTERESIS 10
#define LOW 0
#define HIGH 1
int main(void)
{
unsigned int data[2];
signed int status[2]={0,0};
signed int difference=0;
Init();
MotorDir(FWD, FWD);
while(1) {
// Helligkeitswerte der Lichtschranken auslesen
OdometrieData(data);
// Wechsel linker Sensor von niedrig auf hoch?
if ((status[0]==LOW) && (data[0]>TRIGGERLEVEL+HYSTERESIS)) {
status[0]=HIGH;
difference++;
}
// Wechsel linker Sensor von hoch auf niedrig?
if ((status[0]==HIGH) && (data[0]<TRIGGERLEVEL-HYSTERESIS)) {
status[0]=LOW;
difference++;
}
// Wechsel rechter Sensor von niedrig auf hoch?
if ((status[1]==LOW) && (data[1]>TRIGGERLEVEL+HYSTERESIS)) {
status[1]=HIGH;
difference--;
}
// Wechsel rechter Sensor von hoch auf niedrig?
if ((status[1]==HIGH) && (data[1]<TRIGGERLEVEL-HYSTERESIS)) {
status[1]=LOW;
difference--;
}
// zur Sicherheit: verhindern, dass der Differenzz�ler
// den erlaubten Wertebereich verl�st
if (difference<-255) difference=-255;
if (difference>255) difference=255;
// Status-LED noch entsprechend der erkannten Segmente
// aufleuchten lassen, grn fr links, rot fr rechts
StatusLED(status[0]+status[1]*2);
// Z�ldifferenz passend auf die Motoren verteilen
if (difference>0) MotorSpeed(255-difference,255);
else MotorSpeed(255,255+difference);
}
return 0;
}
-
Erfahrener Benutzer
Roboter-Spezialist
Hallo
Auf den ersten Blick nicht so einfach...
Funktioniert denn dieser Quellcode nicht so wie gewünscht?
Und wo möchtest du welche Änderung vornehmen ( das mit dem löschen )
Gruß Thund3r
-
Also:
Beim ersten Versuch hats wunderbar gklappt-- lief einwanfrei geradeaus.
Dann hatte ich zwischendurch ein paar andere Programme geflascht, und als ich den Geradeaus wieder vorführen wollt-----geht´s nicht mehr. fährt nur noch im Kreis. Aber wie gesagt beim selbsttest fuknzt alles.
Gruß frank
-
Erfahrener Benutzer
Roboter-Spezialist
Hallo
Nein ich meinte das Programm wo du mir den Quellcode gezeigt hast das Programm hat beim ersten flashen funktioniert und dann nicht mehr?
Hast du auch gespeichert und dann "make" gemacht?
Gruß Thund3r
-
Genau, nach dem ersten flaschen hat´s funktioniert. dann hab ich den Text gespeichert. Und später gings nicht mehr. Hab noch ein anders Programm ausprobiert, nennt sich"geradeausfahren und speichern". ging aich beim ersten versuch- jetzt aber auch nicht mehr. Fährt immer im Kreis, und der wird immer enger.
Bei anderen Programmen, wo die Odometrie nicht zu sagen hatt läuft er aber gerade--na ja fast gerade.
gruß Frank
-
Erfahrener Benutzer
Roboter-Spezialist
Hallo
Deck mal die Odometriesensoren mit Pappe oder so ab.
( http://www.asurowiki.de/pmwiki/uploa...n/mod_odo2.jpg )
Und speicher den Quellcode, mach "make" und flash das Programm erneut dann müsste es eig. auf jeden Fall klappen. Schau auch mal ob bei den Odometriesensoren kein Wackelkontakt vorliegt.
Gruß Thund3r
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen