der adc nimmt werte von 0 bis 1023 an, wobei 0=Masse und 1024=Referenzspannung (bei der odometrie: =VCC).
0 und 1 als ein und aus hat was mit infrarot zu tun.
Hi,
ich habe ein Problem mit der Auswertung der Odometriesensorik.
Die Sensoren gehen doch auf einen AD Wandler!? und nehmen Spannungswerte zwischen 0 und 1024 an wobe 0 [Ein] und 1 [Aus] darstellt.
Ich wollte den Asuro dazu bringen, dass er wenn er gegen ein Hinderniss prallt den Rückwärtsgang einlegt und einen vorher definierten Kurvenradius fährt. Bsp. Asuro fährt frontal auf eine Wand (also K3 und K4) aktiv. Nun ist z.B. im Program eine 90 Grad Kurve vorgesehen. Jetzt soll er sich parallel zur wand (also 90 Grad zum Aufprallwinkel) ausrichten und weiterfahren.
Leider scheitere ich schon bei der Auswertung der Sensoren.
Um die Odometrie zu Testen fährt mein Roboter einfach gerade aus.
Jetzt soll er mir bei jedem Hell-. Dunkelwechsel des linken Rades die Status LED umschalten und beim rechten Rad die FrontLED An und Aus.
Allerdings geht lediglich die StatusLED auf Rot.
Allerdings gibts es auch sonst Effekte die ich mir nicht erklären kann.Code:#include "asuro.h" // Bit 0 ( 1) -> K6 rechts außen // Bit 0 ( 2) -> K5 rechts mitte // Bit 0 ( 4) -> K4 rechts innen // Bit 0 ( 8) -> K3 links innen // Bit 0 (16) -> K2 links mitte // Bit 0 (32) -> K1 links außen int main(void) { int zaehler; //ausweichzeit nach kollision unsigned int data [2]; //Array erstellen mit 2 speicherzellen für Odometriedaten //data [0] links T11 //data [1] rechts T12 Init(); while(1) { //----------------------------------------------- if (PollSwitch() >= 1) { if(PollSwitch()==1) { if(PollSwitch()==1) { StatusLED (RED); MotorDir(RWD,RWD); MotorSpeed(0,200); for(zaehler=0; zaehler < 500; zaehler++) { Sleep(255); } }}} //----------------------------------------------- if (PollSwitch() >= 2) { if(PollSwitch()==2) { if(PollSwitch()==2) { StatusLED (YELLOW); MotorDir(RWD,RWD); MotorSpeed(0,100); for(zaehler=0; zaehler < 500; zaehler++) { Sleep(255); } }}} //----------------------------------------------- if (PollSwitch() >= 4) { if(PollSwitch()==4) { if(PollSwitch()==4) { StatusLED (GREEN); MotorDir(RWD,RWD); MotorSpeed(100,0); for(zaehler=0; zaehler < 500; zaehler++) { Sleep(255); } }}} //----------------------------------------------- if (PollSwitch() >= 8) { if(PollSwitch()==8) { if(PollSwitch()==8) { StatusLED (GREEN); MotorDir(RWD,RWD); MotorSpeed(200,0); for(zaehler=0; zaehler < 500; zaehler++) { Sleep(255); } }}} //----------------------------------------------- if (PollSwitch() >= 16) { if(PollSwitch()==16) { if(PollSwitch()==16) { StatusLED (YELLOW); MotorDir(RWD,RWD); MotorSpeed(100,0); for(zaehler=0; zaehler < 500; zaehler++) { Sleep(255); } }}} //----------------------------------------------- if (PollSwitch() >= 32) { if(PollSwitch()==32) { if(PollSwitch()==32) { StatusLED (RED); MotorDir(RWD,RWD); MotorSpeed(100,0); for(zaehler=0; zaehler < 500; zaehler++) { Sleep(255); } }}} //----------------------------------------------- else { MotorDir(FWD,FWD); MotorSpeed(100,100); StatusLED(RED); BackLED(OFF,OFF); OdometrieData(data); if(data [0] < 512){ StatusLED(YELLOW); StatusLED(OFF);} if(data [0] > 512){ StatusLED(GREEN); StatusLED(OFF);} if(data [1] < 512) FrontLED(ON); if(data [1] > 512) FrontLED(OFF); }} return 0; }
Bsp. im Programm wird die StatusLED anstat von Gelb zu Grün von Rot zu Grün gewechselt. Und plötzlich geht nix mehr. Genauso wenn ich am am Anfang des Programmes die Status LED auf Rot setze. Warum ?
Außerdem glimmen die BackLED´s immer mit. Liegt wahrscheinlich an der Verschaltung!
Und wenn jemand gerade dabei ist meine fragen zu beantworten!
Wie kann ich die AD Wandlerwerte der Odometrie per IR an das Hyperterminal senden? Ich würde einfach gerne sehen welche Werte der AD Wandler so ausgibt!
Auch wenn mir gerade noch etliche fragen einfallen belasse ich es erstmals dabei.
Ich bin jedem dankbar der mir hielft.
Gruß
Simon
der adc nimmt werte von 0 bis 1023 an, wobei 0=Masse und 1024=Referenzspannung (bei der odometrie: =VCC).
0 und 1 als ein und aus hat was mit infrarot zu tun.
ich beschäftige mich auch gerade mit den odometriesensoren und habe ein kleines programm geschrieben das mir den wert ausgeben soll. funktioniert aber nicht richtig.
gibt im hyperterminal folgendes aus:Code:#include <stdlib.h> #include "asuro.h" #define taste (!(PINC & (1<<PC4))) // Tastenabfrage #define keine_taste (PINC & (1<<PC4)) int main(void){ Init(); int a=1; MotorDir(FWD,FWD); MotorSpeed(120,120); while(a=1){ unsigned int data[2]; //Speicher bereitstellen OdometrieData(data); SerWrite(data[0],20); } }
Code:5&_X/4EBuHN1N"r'(C"dbX0/bXICRgB &_Xd;A9r h i m!\I5- '!7AFRX"=!U@Dd0\!Y@ \)xY1#gB &_uHN1N"r'(CH@t !hZ0p1 J '!7AF@HE5[*t#SUQ5"=!U@Dd0&_X/4EB@ L'@Q,[P. &_X/4E'(C"d;A9rJ;EgBxY1#[tbiL 5 `~,\%@)@tL !hZ0p-[x@/4EB \.Y@ \)xY(C"d;A9r h/4EB Y1#[tbA DI(YB'Aq)v 0(t(&_X `~, h@ LEB ,[P. Qd;A9r hHUQ'!7AFR%@)@"e!Sa@t !hZ0/4EB \.p-[x@)1B J ;EgB &_X;A9r h@(1bKF i J `~,\%@)@#SUQ, &_X/4LU 5"= %Eh8Lt !hZ0p-[x;A9r h@)@"e<t !hZ0p-[x;i %EhZ0p '!7;iAq)uHN1N"rHN1N"r'(C"d(YB'Aq)ugB &_X &_X/4EB L'@!BiLt !hZ0p-1x % J ;EEh8LH ' (C"d;A9r )@"e<D@gB &_X/0/bXICRv#[tbX0/EB \. !hZ0p-[x@)1 5"=!U@DdF:Xo@dB" '!7AF!hZ0p-[x@)1B DI(YB'Aq)B'Aq)uHN1N"!7AFR} L'@!BiL@ L'@BiL 5"h8LH : Xo@dB"I(YB'Aq)AFR}AFR}!7AFR}AFR}AFR}!7AFR
Hallo damaltor,
mit 0 und 1 meinte das min bzw. max.
Sorry ist bissl doof erklärt.
Ich habe mir gerade die ADC Werte ausgeben lassen.
Allerdings na ja ohne erfolg.
Ich habe das Programm von:
https://www.roboternetz.de/phpBB2/ze...suro+odometrie
genutzt. Also das zum Auslesen der Ordometrie.
Eigentlich sollte das Ergebniss im Hyperterminal so aussehen:
LoggingOdometers V1.0 (2006-05-21, Arexx-Henk)
(oder ähnlich)Code:Left Odometer +00154 +00154 +00156 +00177 +00183 +00201 +00204 +00207 +00198 +00186 +00169 +00160 +00158 +00167 +00178 +00184 +00198 +00206 +00198 +00183 +00172 +00157 +00149 +00156 +00161 +00179 +00190 +00204 +00206 +00201 +00189 +00182 +00162 +00155 +00158 +00168 +00179 +00187 +00202 +00206 +00200 +00186 +00175 +00157 +00152 +00152 +00160 +00176 +00184 +00196 +00201 +00203 +00194 +00185 +00171 +00163 +00147 +00159 +00163 +00184 +00195 +00206 +00207 +00203 +00192 +00184 +00161 +00159 +00150 +00161 +00169 +00183 +00197 +00204 +00207 +00200 +00191 +00179 +00158 +00155 +00155 +00158 +00176 +00179 +00194 +00207 +00203 +00190 +00178 +00183 +00198 +00206 +00206 +00197 +00183 +00170 +00151 +00159 +00157 +00172 +00179 +00193 +00205 +00204 +00195 +00184 +00171 +00159 +00145 +00157 +00159 +00182 +00189 +00199 +00201 +00202 +00191 +00182 +00165 +00160 +00147 +00159 +00168 +00185 +00199 +00206 +00206 +00201 +00190 +00182 +00163 +00152 +00155 +00163 +00177 +00185 +00201 +00204 +00205 +00196 +00183 +00171 +00155 +00154 +00150 +00167 +00171 +00184 +00199 +00206 +00201 +00190 +00179 +00159 +00156 +00143 +00163 +00171 +00188 +00200 +00206 +00201 +00190 +00169 +00186 +00199 +00206 +00200 +00193 +00177 +00171 +00146 +00151 +00153 +00173 +00183 +00195 +00200 +00201 +00195 +00186 +00174 +00156 +00150 +00148 +00169 +00179 +00195 +00205 +00206 +00204 +00195 +00180 +00170 +00152 +00150 +00153 +00164 +00186 +00197 +00206 +00204 +00200 +00188 +00177 +00166 +00147 +00154 +00155 +00175 +00176 +00197 +00203 +00205 +00190 +00180 +00159 +00156 +00142 +00156 +00169 +00182 +00199 +00205 +00203 +00195 +00184 +00160 +00158 +00150 +00162 +00173 +00182 +00199 +00204 +00205 +00192 Right Odometer +00213 +00193 +00171 +00161 +00149 +00140 +00147 +00166 +00183 +00192 +00196 +00217 +00201 +00184 +00166 +00145 +00141 +00149 +00166 +00179 +00198 +00208 +00207 +00197 +00180 +00160 +00143 +00141 +00156 +00172 +00188 +00206 +00213 +00210 +00200 +00169 +00150 +00138 +00138 +00147 +00167 +00181 +00197 +00204 +00199 +00199 +00186 +00167 +00147 +00134 +00136 +00152 +00171 +00180 +00199 +00210 +00209 +00198 +00179 +00164 +00146 +00135 +00139 +00153 +00175 +00188 +00210 +00215 +00215 +00198 +00173 +00157 +00139 +00131 +00138 +00192 +00213 +00203 +00184 +00166 +00147 +00138 +00143 +00160 +00178 +00195 +00207 +00209 +00199 +00182 +00167 +00150 +00139 +00145 +00167 +00184 +00200 +00211 +00211 +00204 +00173 +00153 +00139 +00140 +00147 +00163 +00180 +00195 +00203 +00201 +00196 +00187 +00169 +00152 +00140 +00140 +00145 +00157 +00175 +00193 +00208 +00208 +00200 +00183 +00164 +00148 +00133 +00131 +00142 +00162 +00179 +00199 +00215 +00216 +00207 +00184 +00163 +00148 +00136 +00137 +00154 +00172 +00185 +00193 +00200 +00216 +00195 +00177 +00156 +00139 +00203 +00207 +00202 +00187 +00169 +00152 +00139 +00138 +00153 +00174 +00191 +00208 +00212 +00209 +00193 +00168 +00152 +00144 +00146 +00156 +00172 +00186 +00199 +00204 +00199 +00199 +00185 +00169 +00149 +00136 +00135 +00150 +00172 +00182 +00200 +00211 +00210 +00196 +00173 +00156 +00137 +00129 +00136 +00152 +00171 +00188 +00209 +00214 +00214 +00195 +00172 +00160 +00147 +00139 +00144 +00162 +00180 +00193 +00195 +00215 +00208 +00190 +00172 +00156 +00140 +00138 +00153 +00172 +00192 +00206 +00209 +00199 +00183 +00166 +00146 +00212 +00212 +00205 +00177 +00154 +00135 +00137 +00150 +00161 +00174 +00191 +00202 +00201 Left min/max, right min/max values +00142 +00207 +00129 +00217
bei mir kommt lediglich
LoggingOdometers V1.0 (2006-05-21, Arexx-Henk)
Wenn du dir den else Teil des Programmes anschaust (ganz unten der obere Code ist irrelevant) siehst du das ich die Werte auf > bzw< 512 abfragen lasse. Aber das geht nicht.[/code]
Habe deinen beitrag mal mit dem code-button etwas übersichtlicher gemacht... =)
dein Problem bei dem Programm von Weiti ist, dass nicht die zahl gesendet wird, sondern der ascii character. die zahl 32 wird zB nicht als "3" und "2" gesendet, sondern als ascii 32. das ist das leerzeichen =)
Hi damaltor,
ich habe das Programm von Arexx-Henk benutzt https://www.roboternetz.de/phpBB2/download.php?id=11451
(ganzes Thema unter:
https://www.roboternetz.de/phpBB2/ze...suro+odometrie)
ja ich habe vorhin vergessen die Ausgabe also code zu posten
wusste aber nicht wie ichs korrigiere.
Langsam werde ich kirre es will net gehn
oh gott *rot werd* das habe ich sogar vorher in nem c tutorial gelesen, das man damit nur ascii ausgibt, und habs trotzdem falsch gemacht.
ich habe jetzt das programm aus der anderen diskusion laufen lassen und bekomme folgendes ergebnis:
folglich ist mein rechter odometer kaputt!?Code:Left min/max, right min/max values +00013 +00184 +00252 +00255 -Finished-
oder es ist ein übertragungsfehler!? Hast du es noch einmal durch laufen lassen?
mfg liggi
Lieber am Asuro rumschrauben als alles andere.
Meine Homepage
Flashe einfach nochmal den Selbsttest. Dann kannst du sehen, ob die Odometrie funzt oder nicht. Gruß farratt
woran erkenne ich denn ob der odometrie test erfolgreich war?
Hyperterminal:
im zweiten motortest hängt er sich auf, evtl weil das rad nicht ganz drann ist. (bekommt gleich nen eigenen thread)Code:-- ASURO Testing -- LED Test Line Test Switch Test Odometrie Test Motor Test TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT -- ASURO Testing -- LED Test Line Test Switch Test Odometrie Test Motor Test
Lesezeichen