PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Habe probleme mit meinen sensoren



javaisttoll
11.02.2010, 11:29
Hallo,

ich möchte gerne eine abfage starten das mein asuro wenn er eine linie verlässt trotzdem geradeaus weiterfährt ich dachte mir das so

if(data[0]==data[1]) MotorSpeed(125,125);


aber mein asuro geht nicht in diesem befehl rein und fährt nurnoch im kreis da er die linie nicht findet

Ceos
11.02.2010, 11:51
deine lininensensoren geben unter data[0] und data[1] einen wert von 0-1023 wieder, 0 steht dabei für totale finsternis und 1023 für totale helligkeit ... der zustand dass beide sensoren exakt denselben wert haben ist schon allein technisch unwahrscheinlich

du müsstest deine if abfrage anpassen und bedenken, dass du den übergang von linie zu hintergrund/boden erst einmal ausmessen müsstest! und dann einen gewissen toleranzbereich einräumen, eine linie ist nicht immer gleich dunkel und das umgebungslicht tut sein übriges

PS: kleiner trick wenn deine sensoren empfindlich auf umgebungslicht reagieren, "differenzielles messen" ... du schaltest die frontled an, machst eine messung und du schaltest die frontled aus und machst ne messung ... da sensoren und frontled auf so ziemlich dieselbe stelle zeigen, sollte die differenz beider werte dem echten reflektionswertt des untergrund wiederspiegeln egal wieviel licht von der seite einfällt .. aber vorsicht wenn deine sensoren von der umgebung schon auf 1023 getriebe werden, können sie das zusätzliche licht der LED nicht mehr messen ;)

PPS: und noch ein tip beim programmieren, egal welche sensordaten du verwendest ... speichere sie IMMER ZUERST in eine variable und stelle dann damit berechnungen bzw. vergleiche an ... so umgehst du nebeneffekte beim abfragen der werte die dein programm bei der fehlersuche unlogisch erscheinen lassen!

javaisttoll
11.02.2010, 12:06
so ich habe mal eine neue abfrage erstellt die bei mir auch nicht geht


int d3=d1-d2;

int d4=d2-d1;

if(d3==0 || d4==0)

oder auch geht nicht

if(d3<1000 || d4<1000)

kann mir nicht erklären warum nicht zumindest da muss doch nu was passieren oder?

mize03
11.02.2010, 17:19
Hallo,

habe auch erst von einer Woche mit einem Linienprogramm angefangen und hatte ähnliche Probleme.
Zu deinem Programm ist zu sagen, dass die If-Abfrage


if(d3==0 || d4==0)

gar nicht(oder sehr sehr unwahrscheinlich) erfüllt ist da wenn d3 oder d4 gleich 0 ist herrscht absolute Dunkelheit
(und diese eigentlich nie vorhanden ist).
Und deine If-Abfrage


if(d3<1000 || d4<1000)

ist so gut wie immer erfüllt, da es eigentlich niemals so hell wird, dass d3 oder d4 größer als 1000 werden.

so ich hoffe ich konnte dir damit ein bischen helfen


Grüße mize03

javaisttoll
12.02.2010, 08:58
if(d3<1000 || d4<1000)
ist so gut wie immer erfüllt, da es eigentlich niemals so hell wird, dass d3 oder d4 größer als 1000

das dachte ich mir ja auch aber der asuro reagiert trotzdem nicht auf diese abfrage ;P sonst hätte ich ja kein problem mehr xD

Ceos
12.02.2010, 09:42
okay nochmal von vorne diesmal mit lösung ^^

wenn die LED an ist, ist der wert potentiell höher als wenn sie aus ist, also LED an, messen und in D1 speichern, dann LED aus, messen und in D2 speichern ... jetzt ziehst du D2 von D1 ab und hat den relativ zuverlässigen helligkeitswert des untergrund .... jetzt solltest du erstmal mit einem switch case konstrukt folgendes machen

switch
wenn wert < niedriger wert -> statusLED rot
wenn wert >= niedriger wert und wert <= hoher wert -> statusLED grün
wenn wert > hoher wert -> statusLED gelb

dann spielst du ein wenig mit den werten rum und probierst dich an deinen untergründen und darauf aufgebrachte testlinien bis dein asuro entsprechend anspricht ... diese schwellwerte notierst du dir dann für data[0] und data[1] da diese nie gleich sind und dann schreibst du nochmal hier ins forum

was deine abfragen angeht, du musst eigentlich nur kontrollieren, ob der wert eines sensor [b]deutlich[\b] ;) von deinem ermittelten schwellwert abweicht und dann ggensteuern ... damit er nicht so zappelt sollte die korrektur erst beendet werden, wenn der wert deutlich unter dem schwellwert liegt ... wenn du verstehst wie ich das meine ^^

javaisttoll
17.02.2010, 06:55
Vielen dank das hat mir weitergeholfen habe es geschafft und programmiere nun weiter :)