Forum: Mikrocontroller und Digitale Elektronik ASURO spezielle Linienverfolgung logigproblem


von Christian Teicht (Gast)


Angehängte Dateien:

Lesenswert?

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.

:
von Uwe (Gast)


Lesenswert?

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

von Christian Teicht (Gast)


Lesenswert?

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

von Stefan B. (stefan) Benutzerseite


Angehängte Dateien:

Lesenswert?

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.

von Christian Teicht (Gast)


Lesenswert?

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

von Christian Teicht (Gast)


Lesenswert?

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

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.