Signale für hell/dunkel sind kalr, habe ich mit doc asuro getestet.
Dennoh auch wenn nur der rechte sensor hd[1] einen Wert von kleiner
gleich 23 aufweißt wird die while(h==1) schleife einmal durchlafuen,
dabei ist es auf grund der logig nicht möglich (für h=1 müssen beide
sensoren werte kleiner gleich 23 haben) haben sie aber SICHER nicht.
Kann mir jmd helfen?
Warum durchläuft der ASURO (AtMega8 prozessor) die schleife dennoch
einmal?
Mfg
c code ist im anhang.
Hi!
Überlege mal diesen Konstrukt und frage dich was h für einen Wert
bekommt
wenn hd[1]>23 ist
if (hd[0]>23)
{
h=0;
}
if (hd[1]>23)
{
h=0;
}
Viel Erfolg, Uwe
Ja null eben,
solls ja auch,wenn der Asuro über eine schwarze querlinie fährt,
soll er solange in dieser Schleife ausgehalten sein, dass er für die
Überquerung den Counter nur einmal erhöht.
allerdings geht der Asuro ebenfalls in diese Schleife,
wenn er nur mit dem rechten Liniensensor dessen Wert in hd[1]
gespeichert wird über eine dunkle linie fährt, dannach verlässt er die
schelfie weil aus der nächsten auslesung ja eindeutig hervorgeht dass
eine der beiden sensoren nciht auf einer schwarzen linie sein kann,
dadurch wird h =0 und die schleife wird unterbrochen. Das Problem ist
aber, dass h erst garnicht eins werden kann, solange nicht beide werte
des arrays kleiner als 23 sind.
Wenn der Asuro mit dem rechten liniensensor auf der schwarzen linie
steht & mit dem linken aufm weißem untergrund ist hd[0]=33 und hd[1]=17
somit darf es nciht sein, dass h=1 ist und dann darf die schleife
garnicht durchlaufen, passiert aber trotzdem?
Mfg
Ich habe Probleme mit deiner Beschreibung, ich sehe nur den Code und
eine Symptombeschreibung aber keine Aufgabe.
Den Code im Anhang habe ich so umgeschrieben, dass ich ihn verstehe und
dass der Asuro so arbeitet, wie ich meine, dass es seine Aufgabe ist:
Schwarze Linie suchen, versuchen draufzubleiben und stoppen, wenn die
Linie 2 mal verlassen wurde.
Achtung: Der Code hat noch keinen Compiler, Simulator, Hardware gesehen.
vielen dank, für die viele mühe und den guten & überishctlichen code :)
Ohh entschuldige, habe in der eile vergessen die eigentlich aufgabe des
programmes zu erläutern.
zuerst habe ich ein programm geschrieben, mit dem der asuto blinker
einer hellen led erkennen und zählen kann.
dieses kommt dann vor dieses programm.
der asuro wird später als eine art polizei auf einer selbstentworfenen
rennbahn tätig sein.
durch das auslösen einer lichtschranke, durch die man mit einem kleinen
fergestuerten auto fährt registriert ein seperater microcontroller der
auf der strecke verbaut ist wo man gerade rumfährt (rundkurs).
und gibt einen blinkcode an den asuro weiter ( 1 mal blinken zwei mal
blinken etc.)
der asuro folgt einer schwarzen linie,
an vorgesehenen punkten (auf denen eine schwarze querlinie über die
eigentliche linie geht) soll der asuro stehn bleiben um eine
straßensperre zu machen.
die sensoren des asuro sind so angeordnet :
o--o o = sensor;
die linie ist so schmal, dass sie beide normalen linienverfolgung nur
unter einem der beiden sensoren sein kann.
kommt allerdings soewtas:
|
----- liegt die querlinie unter beidne sensoren,
|
erst dann dürfte der asuro beide werte als dunkel erkennen.
kommt er allerings mit dem rechten sensor auf eine dunkle linie und
steht mit dem linken auf weißem papier, meint er dennoch eine schwarze
querlinie zu erkennen, was ja eigentlich garnicht möglich ist.
liebe grüße
habe jetzt einfach noch eine art absicherung reingemacht, die ein
falsches erkennen verhindern sollte..
werd ich nacherd mla ausprobieren..
nur dass sich hier keiner mehr die mühe macht den ganzen code durch zu
werkeln :D
liebe grüße christian
Ah, diese Beschreibung macht dein Vorhaben wesentlich klarer!
In dem "alten" Code hatte ich angenommen, dass der Asuro auf der
Fahrlinie so lange einen eingeschlagenen Kurs fortsetzt, wie beide
Sensoren "schwarz" melden. D.h. die Fahrlinie müsste dafür so breit
sein, dass dies möglich ist. Und wenn der Asuro 2x von der Linie runter
ist, soll er anhalten.
Gemäß deiner Beschreibung sollen beide Sensoren auf der Fahrlinie nie
gleichzeitig "schwarz" sehen, d.h. die Fahrlinie muss schmal sein und
der Asuro fährt quasi einen kleinen Schlingerkurs um ständig auf der
Fahrlinie zu bleiben.
Zum Code... lange, sinnvolle Variablennamen und Kommentare kosten keinen
Speicherplatz auf dem µC. Warum sich die Arbeit mit kryptischen Namen
schwer machen, wenn man aussagekräftige Namen benutzen kann?