PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ASURO für Robotereinsteiger



Bremer
20.07.2005, 21:09
Moin,
Ich habe zwar schon zwei kleine Roboter gebaut, zähle mich aber noch zu den Robotereinsteigern. Auch ich habe einen ASURO und möchet mit dem einiges ausprobieren. Mein ASURO kann schon eine Linie erkennen und ihr folgen und auch Hindernissen ausweichen.
Ich möchte mit der Erweiterungsplatine eine Objekterkennung per Infrarot realisieren. Im Moment hab ich noch ein paar kleine Probleme mit der Software. Ich Programmiere ASURO in C. Ich möchte einen Timer programmierenweiß aber nicht wie. Vielleicht kann mir da jemand helfen.
Wer auch einen ASURO besitzt und mehr damit machen möchte: Schreibt was das Zeug hält, dann können wir die Sache gemeinsam angehen.

mfG Sebastian

stochri
20.07.2005, 22:02
Hey,
Du kannst ja bei dem kleinen Wettbwerb mitmachen. Wenn Du schon so weit bist, sollte das Problem einer Linie zu folgen und einen Gegenstand zurückzuschieben, kein Problem sein.

Gruss,
stochri

stochri
20.07.2005, 23:02
Mein ASURO kann schon eine Linie erkennen und ihr folgen und auch Hindernissen ausweichen.

Mich würde mal interssieren, wie Du das gemacht hast. Es wäre nett, wenn Du Code posten könntest und das Verfahren beschreibst, dann haben alle etwas davon.

Gruss,
stochri

Bremer
21.07.2005, 13:28
Moin,
was für ein Wettbewerb und vor allem wo? Das mit dem Linie verfolgen steht auch im Bedienerhandbuch drinne. Ich habe das Programm nur noch ein bischen abgewandelt ud wollte es anschließend noch mit dem Ausweichprogramm kombinieren, sodass ASURO der Linie folgen kann und bei Kollision einem Hinderniss ausweicht. Zusätzlich soll er später mal IR-Augen bekommen. Leider habe ich noch ein paar Probleme mit der Software, da ich das noch nicht lange mache. C-Code zum Linienfolgen hängt an. Bei dem Ausweichprogramm fehlen noch die Timer für das Rückwärtsfahren.

mfG Sebastian

izaseba
21.07.2005, 19:41
Hallo Bremer,
wenn Du irgendwas mit Timern machen willst, gibt es
1. eine ganz einfache Lösung, hier in Forum nach der erweiterten Asuro Bibliothek zu suchen, Weja hat dort eine Zeitfunktion eingefügt.
2. eine etwas schwierigere Lösung hier http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Die_Timer.2FCounter_des_AVR
Dabei lernst Du auch was über die Timer des AVRs

Gruß Sebastian

stochri
21.07.2005, 23:59
@Bremer:
Welcher Wettbewerb ? Na der hier, passt ja optimal zu Deiner Programmierefahrung: https://www.roboternetz.de/phpBB2/viewtopic.php?t=10806



Das mit dem Linie verfolgen steht auch im Bedienerhandbuch drinne. Ich habe das Programm nur noch ein bischen abgewandelt ud wollte es anschließend noch mit dem Ausweichprogramm kombinieren, sodass ASURO der Linie folgen kann und bei Kollision einem Hinderniss ausweicht.


Welches Verfahren benutzt Du um die Stelle zu erkennen, bei der der ASURO ausweichen muss ?

Gruss,
stochri

Bremer
22.07.2005, 08:57
Moin,
ja ich mir das mal durchgelesen und finde, dass das ne ganz schön knifflige Aufgabe ist. Das mit dem positionieren bekommt man wohl mit den Radencodern hin. Die Reflexlixhtschranken von meinem ASURO wollen allerdings nicht so recht. Hab schon alles verucht und auch alle Widerstände ausgetauscht aber da kommt kein Signal an. Versteh ich nicht.
Um zu erkennen ob der "Schatz" weg ist und wo er denn geblieben ist fällt mir spontan nur Ultraschall ein.
Und zu deiner Frage welches Verfahren ich benutze: Ich habe außer den Kollisionstastern leider keine weiteren Sensoren, was heißt, ASURO muss erst mit etwas kollidieren umes zu bemerken. Dem Programm habe ich dann gesagt, wenn du keine Kollision bemerkst (while (PollSwitch()==0)
folge der Linie, ansonsten weiche aus. Leider hängt er dann immer in der ausweichschleife fest. Also nach einer Kollision fährt er dann die ganze Zeit Rückwärts, weil kein Befehl kommt das zu beenden. Da muss ich mir noch was ausdenken. Naja mal schaun.

mfG Sebastian

Andun
22.07.2005, 13:22
Bau da doch einfach ein break; an die richtige stelle. Musst halt irgendwie festlegen, wann er aufhören soll.

Bremer
22.07.2005, 15:09
Moin,
ich habe das mitlerweile hinbekommen mit der Rückwärtsfahrt. Ich habe einfach einen timer eingebaut und die neue asuro.h benutzt. Jetzt funktioniert alles besten. Nun muss ich nur noch Linienfolgeprogramm mit einarbeiten und schon kanns losgehen. anbei noch der Code für das Ausweichen.

mfG Sebastian

Bremer
22.07.2005, 15:09
#include "asuro.h"

int main(void)
{
Init();
while(1)
{
if(PollSwitch()>=1)
{
StatusLED(RED);
MotorDir(RWD,RWD);
if(PollSwitch()>=7)
{
MotorSpeed(100,200);
BackLED(ON,OFF);
Msleep(1000);
}
else
{
MotorSpeed(200,100);
BackLED(OFF,ON);
Msleep(1000);
}
}
else
{
Msleep(100);
StatusLED(GREEN);
MotorDir(FWD,FWD);
MotorSpeed(200,180);
BackLED(ON,ON);
}
}
}

Bremer
24.07.2005, 21:55
Moin, ich habe ein kleines Problem. Ich habe mein Programm einer Linie zu folgen mit einem Programm zum erkennen und ausweichen von Hindernissen kombiniert. Der ASURO folgt der Linie wie er soll aber sobald er ein Hindernis berührt fährt er die programmierte Zeit zurück und bleibt dann stehen und das Programm zum Linie folgen läuft nicht wieder an. Ich habe schon vieles versucht, muss aber zugeben, dass ich nicht viel Erfahrung mit C habe. Was habe ich vergessen ? Wer kann mir helfen ? Und Danke an stochri für deine Bemühungen.

mfG Sebastian

Bremer
24.07.2005, 21:57
Der Code für mein kleines Programm:
#include "asuro.h"

/************************************************** *************************
* *
* Dieses Programm ist für den ASURO Roboter *
* *
* Linie verfolgen, Hindernisse erkennen und ihnen ausweichen *
* *
************************************************** *************************/


/************************************************** *************************
* *
* Mit diesem Programm soll der ASURO Roboter mit Hilfe seines Linien- *
* sensors eine dunkle Linie erkennen und ihr folgen können. Außerdem *
* soll er mit seinen Kollisionstastern Hindernisse bemerken und ihnen *
* ausweichen und anschließend wieder einer Linie zu folgen. *
************************************************** *************************/


/************************************************** *************************
*
* unsigned int data[2]; = Speicher für Liniensensor reservieren
*
* data[0] = linker Sensor, data[1] = rechter Sensor
*
* Das Rückwärtsfahren des Roboters geschieht Zeitgesteuert, da keine
* weitere Sensorik vorhanden ist.
*
* Autor: Sebastian Reiff ,2005
*
************************************************** **************************/

int main(void)
{
unsigned int data[2];
Init();
FrontLED(ON);
MotorDir(FWD,FWD);
while(1)
{
LineData(data);
if(data[0]>data[1])
{
MotorSpeed(200,80);
}
else
{
MotorSpeed(80,200);
}
if(PollSwitch()>=1)
{
StatusLED(RED);
MotorDir(RWD,RWD);
if(PollSwitch()>=7)
{
MotorSpeed(100,200);
Msleep(1000);
MotorDir(OFF,OFF);
}
else
{
MotorSpeed(200,100);
Msleep(1000);
MotorDir(OFF,OFF);
}
}
}
return 0;
}

izaseba
24.07.2005, 23:22
Hallo Bremer,


if(PollSwitch()>=1)
{
StatusLED(RED);
MotorDir(RWD,RWD);
if(PollSwitch()>=7)

Ich habe Dein Programm kurz überflogen, und denke, das ist der Fehler:
Da hast Du eine Runde Klammer vergessen bzw. irgendwo weiter unten gesetzt, wenn es keinen error beim kompilieren gab.
Außerdem sollte man bei mehrfach abfragen immer if, else if, else benutzen.

Sauberer ist es auch anstatt den ganzen if abfragen einen switch zu benutzen.

Ich hoffe, ich hab mich klar ausgedrückt.
Gruß Sebastian

linux_80
24.07.2005, 23:37
Gefunden, \:D/
in der while-schleife wird nirgends die Motorrichtung auf FWD gestellt, die ist vor der Schleife !
Der letzte Befehl ist immer:
MotorDir(OFF,OFF)

waste
24.07.2005, 23:42
@Bremer

Sehe ich das richtig, dass du rückwärtsfahrend auch die Linienverfolgung einsetzen willst?
Ich glaube das geht nicht beim Asuro.

Gruss Waste

Bremer
25.07.2005, 08:51
Moin,
erstmal danke für die schnellen Antworten. Ich habe die Motoren in der while-Schleife wieder auf FWD gestellt und ASURO fährt jetzt nach dem Ausweichen wieder der Linie nach, die er findet. Ein paar feinheiten mit der Status LED stimmen noch nicht aber das krieg ich schon hin. Danke @ linux, du hast mir echt geholfen. Ich wusste, dass ich eine Kleinigkeit übersehen hatte.
@waste: nein, ASURO soll beim Rückwärtsfahren keine Linie verfolgen, sondern die programmierte Zeit zurück fahren und dann wieder vorwärts um eine neue Linie zu Suchen und ihr zu folgen. Ich habe für ASURO einen kleinen Parcours angefertigt. *g*

mfG Sebastian

Bremer
25.07.2005, 08:54
@ izaseba,

was ist ein switch ? ist das eine bedingung wie if, else ?
Ich habe darüber nichts gefunden.

mfG Sebastian

izaseba
25.07.2005, 18:23
Hallo, ja es ist eine Bedingung, und zwar wenn man eine Variable auf mehrere Zustände abfragen will z.B.

switch (Bedingung) {

case fall1 :
Anweisungen;
break;

case fall2 :
Anweisungen;
break;

case fall3 :
Anweisungen;
break;

default wenn nichts zutraf;
Anweisungen;
break;
}

default ist nicht unbedingt nötig,
Ist lesbarer als viele if else if ´s
Das hat aber nichts mit Deinem Programm zu tun, ich habe nur nicht genau hingeguckt...

Aber vielleicht, kannst Du das für irgendwas brauchen.

Gruß Sebastian

Bremer
26.07.2005, 11:02
Moin,
die Switchbedingung kann man auf jeden fall mal für irgendwas brauchen also erstmal Danke für die Erklärung. ich will ja auch noch andere Programme schreiben, nur im Moment scheitere ich schon an der Sprache. Ist halt alles noch ein bischen neu für mich. Aber wenn ich überlege, dass ich den ASURO erst seit ner Woche habe und er jetzt schon Linien verfolgt und Hindernissen ausweicht, denke ich, dass ich fortschritte mache. Mein nächstes Ziel ist der ASURO Wettbewerb.

mfG Sebastian

Bremer
26.07.2005, 11:04
übrigens das Programm läuft mitlerweile. ASURO verfolgt Linien, weicht Hindernissen aus und sucht sich dann wieder neue Linien. Sieht lustig aus *g*

mfG Sebastian

stochri
26.07.2005, 17:45
übrigens das Programm läuft mitlerweile. ASURO verfolgt Linien, weicht Hindernissen aus und sucht sich dann wieder neue Linien. Sieht lustig aus *g*

Na dann bist Du ja auf dem besten Weg. Bis Sonntag 20 Uhr läuft der Wettbwerb 1.2 noch. Dann dürfen die Forumsleser über den Gewinner entscheiden.

Gruss,
stochri

Bremer
26.07.2005, 17:53
hui, dann muss ich mich aber ranhalten. Kannst du mir noch einmal eine genaue Beschreibung der Aufgabe geben ? Danke.

mfG Sebastian

stochri
26.07.2005, 22:03
Die Beschreibung findest Du hier:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=10806&sid=6a576cd6dd722286e31aeed50733ef35
gleich ganz oben.

Gruss,
stochri

Bremer
27.07.2005, 08:26
Moin,
Ich weiß nicht ob ich das schaffe, da meine ODOs leider immer noch nicht funktionieren. Die werde ich schon brauchen um die Wegstrecke zu erfassen, um zur Anfangsposition zurückzukehren. Weißt du was das sein kann ? Von der Odometrie bekomme ich einfach keine Daten. Beim ASURO Selbsttest funktionieren die Sensoren auch schon nicht. Ich habe schon alles durchgemessen und auch schon sämtliche Widerstände getauscht.

mfG Sebastian

stochri
27.07.2005, 18:23
Hallo Bremer,
folgender Vorschlag:
Schreibe ein kleines Programm, welches die Lichtwerte der Odometriesensoren auf die serielle Schnittstelle ausgibt ( In der weja-lib findest Du die printInt-Funktion ).
Dreh die Räder ein wenig und poste die Werte im Forum.
Sind die IR-Leds an den Rädern richtig rum eingelötet ? Überprüfe die Werte der Odometriesensoren mit ein- und ausgeschalteten IR-Dioden.
Ändere die Umgebungshelligkeit und schau Dir die Werte an. Die Odometriesensoren sind empfindlich auf Umgebungshelligkeit und funktinieren bei direkter Sonneneinstrahlung meistens nicht mehr.
Falls Dich das stört, baue Schutzkappen über die Radsensoren.
Wenn Du das Ausleseprogramm geschrieben hast, kannst Du es hier im Forum posten, dann können es Leute mit ähnlichen Problemen auch verwenden.

Gruss,
stochri

izaseba
27.07.2005, 18:25
Ich hatte bei meinem Asuro das Problem, daß ich an einer der IR-Dioden eine Kaltlötstelle eingebaut habe.
Ist ein böser Fehler an der Stelle, weil sie in Reihe liegen und dann keine von den beiden funktioniert. Vielleicht hast Du auch sowas...

Gruß Sebastian

Bremer
28.07.2005, 18:33
Moin,
ich ahbe ein kleines Programm geschrieben, mit dem man feststellen kann, ob und welcher Odometriesensor funktioniert und welcher nicht.

Man muss dazu die Räder und die Encoderscheiben abbauen und ein Terminalprogramm starten. Wennman jetzt vor einen der Sensoren ein weißes Blatt hält, steht im Terminalprogrammfenster immer wieder,vor welcher Seite man das Blatt hält. Bei mir habe ich festgestellt, dass selbst bei ausgeschalteten IR-Dioden immer nur rechts kommt. Ich erkläre mir das so: Weißes Blatt Papier vor dem Sensor heißt gleich Nullsignal am Eingang, wie man in der Doku lesen kann. Also heißt ein defekter Transistor oder eine defekte IR-Diode auch Nullsignal. Da mein rechter Sensor immer null ist egal was anliegt, denke ich, dass entweder Diode oder Transistor kaputt sind. Mit meinem ASURO hatte ich bis jetzt eh nicht viel Glück. Der linke Motor hat einen Lagerschaden und das schon von anfang an. Sieht nach einem Herstellungsfehler aus. Muss ich bei Gelegenheit mal austauschen, sonst fährt mein ASURO bei Geradeausfahrt immer nur Linkskurven *g*. Wenn ihr Fragen zum Programm habt oder etwas damit nicht stimmt, lasst es mich wissen.

mfG Sebastian



#include "asuro.h"

/************************************************** *************************
* *
* Dieses Programm ist für den ASURO Roboter *
* *
* Odometriedaten über die Infrarotschnittstelle auslesen *
* *
************************************************** *************************/


/************************************************** *************************
* *
* Mit diesem Programm sollen die Werte der Odometriesensoren ausgelesen *
* werden und über die IR-Schnittstelle an den Computer übergeben werden, *
* damit man eventuelle Fehler oder ein Nichtfunktionieren der Sensoren *
* erkennen und beheben kann. Vor dem aus lesen müssen die Räder und die *
* Encoderscheiben entfernt werden. Außerdem muss das Windows Terminal- *
* programm gestartet werden. Das Terminalprogramm sollte immer nur die *
* Seite anzeigen, vor der ein weißes Blatt Papier gehalten wird. *
* *
************************************************** *************************/


/************************************************** *************************
*
* unsigned int data[2]; = Speicher für Odometriesensoren reservieren
*
* data[0] = linker Sensor (T11), data[1] = rechter Sensor (T12)
*
* Autor: Sebastian Reiff ,2005
*
************************************************** **************************/

int main(void)
{
unsigned int data[2];
Init();
while(1)
{
data[0]=0;
data[1]=0;
OdometrieData(data);
if(data[0]>data[1])
{
SerWrite("links",5);
Msleep(200);
}
else
{
SerWrite("rechts",6);
Msleep(200);
}
}
return 0;
}

izaseba
28.07.2005, 18:51
Hallo Bremer,
in meinen Augen wäre es besser, wenn Du Dir die gemessenen Werte auf den Terminal schickst, und zwar beide abwechselnd mit einer dicken sleep Schleife zwischen,
Wenn Du dann mit einer Taschenlampe auf die Transistoren leuchtest kannst Du besser prüfen, woran es liegt.

Gruß Sebastian

Bremer
28.07.2005, 19:28
Moin,
ja das war auch meine erste Idee. Leider weiß ich nicht, wie ich an die Daten rankomme. Ich habe zwar meinen Speicherbereich data[1] und data[2] aber ich weiß nicht, wie ich an die Zahlenwerte komme, die dahinter stecken. Kann mir da jemand helfen ? So gut kenne ich mich noch nicht damit aus.

mfG Sebastian

izaseba
28.07.2005, 19:40
Hallo Bremer,

bevor Du die Werte von data[1] und data[2] an den UART schickst, mußt Du sie noch über itoa schicken.
Suche hier in forum danach.Diese Funktion wandelt ein integerwert in ASCII zeichen um.
Ich suche gleich na einem passendem Code.

Gruß Sebastian

izaseba
28.07.2005, 20:31
Hallo Bremer,
Code hab ich nicht gefunden, aber schnell was zusammengetippt:



#include <stdlib.h>
#include <string.h>
#include "asuro.h"
int main(void) {
Init();
int data[2];
char buffer[10];


while(1) {
OdometrieData(data);
itoa(data[0],buffer,10);
SerWrite(buffer,strlen(buffer));
SerWrite("\n",1);
}

return 0;
}


Bau Dir eine Schleife noch dazu, die auch das rechte Rad abfragt, und vielleicht eine Pause zwischen.

Gruß Sebastian

P.S.

Wenn ich an meinem linkem Rad drehe (mit der Odoscheibe drauf bekomme ich werte zwischen 350-750 je nachdem ob schwarz oder weiß vor den Sensoren ist.

izaseba
28.07.2005, 20:46
nochmal was,
Ich glaube das wurde hier schon irgendwo in Forum behandelt, aber ich erkläre es Dir nochmal.
Die ausgelesenen Werte liegen zwar schön in int vor, aber Terminal braucht ASCII Zeichen um sie anzuzeigen.
Deswegen muß man die int Zahl in ein String umwandeln, und das macht hier die itoa Funktion.

Gruß Sebastian

EDIT:
Ich sehe es gerade....
Ich glaub ich habe zu wenig mit Wejas erweiterten Bibliothek gearbeitet :-b

Dort ist die Funktion PrintInt drin, die genau das selbe macht, also zum Vergleich, für später
Wejas Bibliothek benutzen.

Bremer
28.07.2005, 21:11
Moin,
ertsmal Danke für den Code. Ich habe auch ein kleines Programm geschrieben, dass hat mir immer Werte um die 29000 rausgegeben.
Die Werte haben sich zwar verändert, wenn man die Sensoren betätigt hat aber damit konnte man nicht viel anfangen. In den Code, den Du geschickt hast, habe ich noch eine zweite Schleife eingebaut. ich bekomme damit immer den Wert 1023, egal was ich mache mit den Sensoren. Ich bin immer noch der Meinung, dass meine rechte Reflexlichtschranke einen weg hat. Ich muss die maldurch messen.
Anbei der Code für das Programm.

mfG Sebastian




/************************************************** *************************
* *
* Dieses Programm ist für den ASURO Roboter *
* *
* Odometriedaten über die Terminalprogramm auslesen *
* *
************************************************** *************************/


/************************************************** *************************
* *
* Mit diesem Programm sollen die Werte der Odometriesensoren ausgelesen *
* werden und über die IR-Schnittstelle an den Computer übergeben werden, *
* damit man eventuelle Fehler oder ein Nichtfunktionieren der Sensoren *
* erkennen und beheben kann. Vor dem aus lesen müssen die Räder und die *
* Encoderscheiben entfernt werden. Außerdem muss das Windows Terminal- *
* programm gestartet werden. Das Terminalprogramm zeigt abwechselnd die *
* Werte von der linken und der rechten Seite an. *
* *
************************************************** *************************/


/************************************************** *************************
*
* unsigned int data[2]; = Speicher für Odometriesensoren reservieren
*
* data[0] = linker Sensor (T11), data[1] = rechter Sensor (T12)
*
* Autor: Sebastian Reiff ,2005
*
************************************************** **************************/

#include <stdlib.h>
#include <string.h>
#include "asuro.h"

int main(void) {
Init();
int data[2];
char buffer[10];


while(1) {
OdometrieData(data);
itoa(data[0],buffer,10);
SerWrite(buffer,strlen(buffer));
SerWrite("\n",1);
Msleep(500);
itoa(data[1],buffer,10);
SerWrite(buffer,strlen(buffer));
SerWrite("\n",1);
}

return 0;
}

izaseba
28.07.2005, 21:30
29000 ??? Das ist etwas viel für einen 10 bit ADC

1023 ist schon besser,
aber das bedeutet das an ADC0 und ADC1 5 V anliegt...
Hast Du da etwa eine Brücke eingebastelt ?
Selbst wenn die Phototransistoren platt wären dürfte en keine 1023 geben, weil da ein widerstand von 4,7 K gegen VCC liegt.

Mess mal ADC0 und ADC1 gegen VCC hast Du da 4,7k oder 0 ?

oder bin ich da auf dem falschem Weg ?

Gruß Sebastian

Bremer
28.07.2005, 21:38
Moin,
ja ich weiß normalerweise kann das nicht stimmen. Das neue Programm zeigt die ganze Zeit den den Wert 1023, egal was ich mit den Sensoren mache. Ich messe die Sensoren morgen durch für heute habe ich keine Lust mehr. Ich mach das morgen früh und stelle die Werte ins Forum.

mfG Sebastian

Bremer
29.07.2005, 09:30
Moin,
ich habe meine Dioden und Transistoren mal durchgemessen und festgestellt, dass an einer Diode 2,8V abfallen. Bischen viel, wie ich fande. Also habe ich sie gegen eine andere aus einer alten Computermaus ausgetauscht und schon gings. Jetzt funktionieren meine ODOs wieder. Wenn kein Transistor betätigt ist, bekomme ich jetzt Werte von 960,welche dann kleiner werden, wenn ich einen oder beide betätige.
Auch im Selbsttest zeigt meine Status LED jetzt Rot und Grün an, wenn ich ein weißes Blatt vor den Jeweiligen Sensor halte. Also wars nur die Diode.

mfG Sebastian

stochri
29.07.2005, 22:29
Hallo Bremer,
die Schwelle bei der 10Bit Wandlung sollte so ca. bei 600 liegen. D.h. Werte größer 600 gelten als logisch 1 und Werte kleiner als 600 als logisch 0.
Waren jetzt eigentlich die Dioden oder die Fototransistoren kaputt ?
Ich glaube, Du hast da was verwechselt.
Normalerweise sollten die Odometriesensoren immer noch auf Tageslicht reagieren, wenn die Beleuchtungsdioden kaputt sind.

Gruss,
stochri

Bremer
30.07.2005, 17:36
Moin,
ich habe die rechte IR-Diode ausgetauscht und schon ging alles wieder. Also muss es doch diese Diode gewesen sein oder nicht ? Ich habe die Tests mit den ODOs immer im leicht abgedunkelten Raum gemacht ohne Tageslicht. Aber dann kommt das doch hin mit den Werten, die waren ja von beiden Sensoren.

mfG Sebastian

Bremer
12.08.2005, 20:31
Moin,
ich habe ein kleines Problem. Ich möchte meine ASURO eine definierte Strecke fahren lassen. Dazu möchte ich die Radencoder benutzen. Hierzu habe ich mir gedacht, dass ich die Hell-Dunkelübergänge erfasse und durch eine for-Schleife zählen lasse um daraus eine Strecke vorzugeben. Leider reichen meine immer noch bescheidenen Programmierkenntnisse nicht aus, um diese Aufgabe zu lösen. Kann mir jemand helfen ? Oder hat jemand eine bessere Idee das Problem zu lösen ? Danke.

mfG Sebastian

izaseba
12.08.2005, 20:46
Hi Bremer,
Willst Du das selber schreiben, oder lieber was fertiges benutzen ?

Suche im Forum nach der erweiterten Asuro Bibliothek!
Dort findest Du schon fertige Routinen!
Dein Problem hatten hier schon ein paar Leute, und haben es für Dich, naja für uns alle
gelöst.

Gruß Sebastian

Bremer
12.08.2005, 22:00
Moin,
die erweiterte ASURO bibliothek habe ich schon. Ich finde nur keinen Ansatz, mit dem ich anfangen kann. So einekleine Vorlage wäre nciht verkehrt.

mfG Sebastian

izaseba
12.08.2005, 22:05
Hmm , ich könnte Dir ein Beispiel posten, aber suche nach dem Beitrag von Weja , wo die Bibliothek zum erstem Mal vorgestellt wurde, dort ist so ein Programm, eine Strecke fahren, umdrehen Strecke wieder zurück

Gruß Sebastian

Bremer
14.08.2005, 13:11
Moin,
ja ich habe mir das ganze nochmal ein bischen angeschaut. ein Programm zum Strecke fahren habe ich nicht gefunde, also habe ich versucht, selber eins zu schreiben. Funzt allerdings nciht. Warum weiß ich nicht.Ich habe den Code mal angehängt. Vielleicht fällt es jemandem sofot ins Auge. Wenn ja, gebt mir bitte Bescheide. Danke.

mfG Sebastian



int main(void)
{
Init();
while(1)
{
SIGNAL (SIG_ADC);
Encoder_Init();
FrontLED(ON);
StatusLED(GREEN);
MotorDir(FWD,FWD);
MotorSpeed(160,160);
if(PollSwitch()>1)
{
StatusLED(RED);
Encoder_Start();
FrontLED(OFF);
MotorDir(RWD,RWD);
if(PollSwitch()>=7)
{
Encoder_Set(0,0);
do
{
MotorSpeed(100,200);
}
while(encoder(LEFT)<10);
}
else
{
do
{
MotorSpeed(200,100);
}
while(encoder(RIGHT)<10);
}
Encoder_Stop();
Msleep(500);
}
}
return 0;
}

Andun
14.08.2005, 14:44
Also auf Anhieb würde sagen, dass das SIGNAL (SIG_ADC); weg sollte. Braucht man eigentlich nicht, wenn du die richtige Lib verwendest. Also das hab ich bei mir noch nie gebraucht.

Andun

Bremer
14.08.2005, 16:05
Moin,
OK dara hat es aber nciht gelegen. Immer, wenn ich das Programm kompiliere sagt er mir als Fehlercode, dass die beiden (encoder(RIGHT bzw. LEFT)<10); keine Funktionen seien. Wie kann ich denn sonst ncoh auf die Werte zugreifen ?

mfG Sebastian

Andun
14.08.2005, 17:02
Achso. Ja, jetzt versteh ich dein Problem.

Es heißt nicht encoder(left) sonder encoder[left]. Das 1. ist ne Funktion, das 2. ein Array. Und ein Array brauchen wir.

Dann sollte es auch gehen und du kannst das SIGNAL am Anfach auch weglassen.

Andun

Bremer
14.08.2005, 18:16
Moin,
ich danke dir ich probiere es aus, wenn ich wieder etwas Zeit habe.

mfG Sebastian