mmh habs auch grad gemerkt... -.- schaltplan hilft![]()
@liggi
Schön, dass es geht. Schade, dass du erst das funktionierende Programm gepostet hattest. Ja ja viel Wind um nichts gegeben.
@damaltor
hmmm, vertust du dich da mit den Liniensensoren T9 und T10?
Bei denen ist das so, dass die Spannung dann größer wird.
Die ODO-Sensoren T11 und T12 werden gegen Masse gezogen bei viel Licht. Damit geht die Spannung runter.
Lieber Asuro programieren als arbeiten gehen.
mmh habs auch grad gemerkt... -.- schaltplan hilft![]()
@damaltor
Zum Schaltplan vom Asuro habe ich mir schon seit langer Zeit ein Icon in der Schnellstartleiste abgelegt.
Auch ein Knopf zur ATmega8-Doku läßt sich immer gerne drücken. Was fehlt ist der Button zum gekühlten Bier. Da muss immer noch der Asuro fahren.![]()
Hey, schau mal auf die Uhr. Musst du morgen nicht zur FH? Oder wird noch gebüffelt?
Lieber Asuro programieren als arbeiten gehen.
Hallo Leute ich hab mal eine Frage:
Habt ihr irgendwelche Vorrichtungen um Fremdlich von der Odometrie abzuhallten? Und ist es sinnvoll?
mfg liggi
Lieber am Asuro rumschrauben als alles andere.
Meine Homepage
ein ausgeschnittener teil einer pralinenverpackung (diese plastik einlagen)... halbiert gibt das ne art schirm die etwas helfen kann. oder einen kleinen karton aus pappe bauen.
Hallo
Also ich hab da ein Problem mit meiner Odometrie.
Ich hab grösstenteils den Code von liggi übernommen und ein wenig verändert.
Ich poste jetzt nur mal die Funktion und die definierten Werte, sonst wird das so unübersichtlich.
Was der Code machen soll:
Der Asuro soll geradeausfahren: OK
Sollte ein Taster gedrückt werden soll er aus der Funktion springen und entsprechend reagieren: OK
Wenn er stehen bleibt soll er dies erkennen und reagieren:
Und genau das funktioniert nur teilweise. Wenn ich ihn beim Fahren mit dem Finger stoppe, passiert gar nichts. Erst wenn ich ihn ein paar Ticks mit dem Zahnrad machen lasse erkennt er, dass da was nicht stimmt und fährt zurück.
Könnt ihr euch den Code vll. mal durchgucken und mir sagen wo's hakt?
Bleibt die Schleife irgendwo hängen? Weil eigentlich sollte die ja die ganze Zeit laufen und dann auch ständig prüfen, ob der Asuro steht.
LG Nils
[/code]Code:#define TRIGGERLEVEL 600 #define PUFFER 3 #define COUNTERABFRAGE 40 #define LOW 0 #define HIGH 1 #define SPEED 120 int odometrie() { unsigned int data[2]; // für die Odometrie Daten signed int status[2] = {0, 0}; // vorheriger Status der Odometrie links und rechts signed int difference = 0; int weg = 0; // Bei jedem Wechsel der Odometrie wird weg für beide Räder erhöht. int weg_alt = 0; // Zwischenspeichern des vorherigen gefahrenen Weges int counter = 0; // Wenn counter einen bestimmten Wert (COUNTERABFRAGE) erreicht, wird weg mit weg_alt verglichen und entsprechend reagiert MotorDir(FWD,FWD); MotorSpeed(SPEED,SPEED); while(PollSwitch() == 0) { OdometrieData(data); if ((status[0] == LOW) && (data[0] < TRIGGERLEVEL)) /*Wenn linker Sensor von niedrig auf hoch wechselt*/ { status[0] = HIGH; difference++; weg++; } if ((status[0] == HIGH) && (data[0] > TRIGGERLEVEL)) /*Wenn linker Sensor von hoch auf niedrig wechselt*/ { status[0] = LOW; difference++; weg++; } if ((status[1] == LOW) && (data[1] < TRIGGERLEVEL)) /*Wenn rechter Sensor von niedrig auf hoch wechselt*/ { status[1] = HIGH; difference--; weg++; } if ((status[1] == HIGH) && (data[1] > TRIGGERLEVEL)) /*Wenn rechter Sensor von hoch auf niedrig wechselt*/ { status[1] = LOW; difference--; weg++; } if (difference < !SPEED) /*Sicherheitsabfragen*/ { difference = !SPEED; } if (difference > SPEED) { difference = SPEED; } if (difference > 0) { MotorSpeed(SPEED - difference, SPEED); /*Motoren einstellen*/ } else if (difference < 0) { MotorSpeed(SPEED, SPEED + difference); } if (SPEED - difference <= 100) { difference=0; } counter++; if (counter == COUNTERABFRAGE) { counter = 0; if (weg - PUFFER <= weg_alt) { weg_alt = 0; weg = 0; // Zurückfahren mit einer anderen Funktion } else { weg_alt = weg; } } } }
sorry damaltor,
jetzt hab ich es mit Main auf mal geschafft, frag nicht wie^^
jedenfalls wenn ich das Progin meinem AVR Studio 4 hab und F7 drücke kommt ne FehlerMeldungCode:#include <asuro.h> int main(void) { void PrintInt(int wert) { char text[16]=" "; itoa(wert,text,10); SerWrite(text,strlen(text)); } void Msleep(int dauer) { int z; for(z=0;z<dauer;z++) Sleep(36); } return 0; }
( Fehlermeldung : avr- objdump -KeinDatenträger
Es befindet sich kein Datenträger im Laufwerk. Legen Sie einen Datenträger in Laufwerk \Device\Harddisk4\DR9 ein
Abbrechen ? Wiederholen? Weiter?)
egal was ich drücke die meldung kommt immer wieder --_--![]()
obwohl ich asuro.c in Sourcefiles dirn hab und die Lib und Inc datei auch, mit libAsuro.a
und Optimation...auf 00
wenn ich die über den TaskMangaer abschiessen lasse geht alles 1A
und ne 2. Frage....wie schaffe ich es mit einem USB Transciver es mir über den HyperTerminal ausgeben zu lassen?
zeige mal deinen code her bitte.
sorry damaltor,
jetzt hab ich es mit Main auf mal geschafft, frag nicht wie^^ [== erldedigtes Problem ]
jedenfalls wenn ich das ProgCode:#include <asuro.h> int main(void) { void PrintInt(int wert) { char text[16]=" "; itoa(wert,text,10); SerWrite(text,strlen(text)); } void Msleep(int dauer) { int z; for(z=0;z<dauer;z++) Sleep(36); } return 0; }
in meinem AVR Studio 4 hab und F7 drücke kommt ne FehlerMeldung
( Fehlermeldung : avr- objdump -KeinDatenträger
Es befindet sich kein Datenträger im Laufwerk. Legen Sie einen Datenträger in Laufwerk \Device\Harddisk4\DR9 ein
Abbrechen ? Wiederholen? Weiter?)
egal was ich drücke die meldung kommt immer wieder --_-- Eh?
obwohl ich asuro.c in Sourcefiles dirn hab und die Lib und Inc datei auch, mit libAsuro.a
und Optimation...auf 00
wenn ich die über den TaskMangaer abschiessen lasse geht alles 1A
und ne 2. Frage....wie schaffe ich es mit einem USB Transciver es mir über den HyperTerminal ausgeben zu lassen?
CSS-Clan ; www.notouch.de
Mit Macht folgt große Verantwortung;1 Min was falsches im Leben machen, hat Lebenslange folgen
die fehlermeldung ist etwas suspekt. aber das scheint ein fehler im studio zu sein.
der USB transceiver kann nur mit dem ganz alten treiber von der cd oder mit dem allerneuesten von ftdi text im hyperterminal ausgeben, mit dem treiber von der arexx seite geht das NICHT. wenn du mehr infos brauchst, dann sag bescheid oder frag die suchfunktion mal, das problem ist bekannt.
Lesezeichen