hier mein bisheriger Code .... soll 2 Fotowiderstände ein messen
Sensor 1 soll bei Impuls (z.b < 50 ) eine Stoppuhr starten
welche mit Impuls von Sensor 2 wieder gestoppt wird
Gesetz dem Fall der gemessene Zeitwert würde dann 20 Sek betragen
möchte ich das dieser wert durch 2 geteilt wird
und sobald das Signal an Sensor 1 wieder anliegt soll mir einem delay von dann logischerweise 10 sek. eine Aktion ausgelöst werden
hier mal nen bild ^^ vill. versteht man es dann besser
und hier mein bisheriger Code der zu 99% einem Code von jurs hier aus dem Forum entspricht
float sensorPin1 = A0;
float sensorPin2 = A5; //Pin, an den der LDR angeschlossen ist
float sensorWert1 = 0;
float sensorWert2 = 0; //in dieser Variable wird der ausgelesene
int MausKlick = 13; //Wert zwischen gespeichert.
int time = 0;
void setup() {
Serial.begin(9600); //Serielle Verbindung initialisieren
pinMode (MausKlick,OUTPUT);
}
void loop() {
sensorWert1 = analogRead(sensorPin2);
sensorWert2 = analogRead(sensorPin1); // Wert auslesen
Serial.println(sensorWert1);
Serial.println(sensorWert2); // Über Serial senden
delay(50); // delay() bestimmt wie oft in der Sekunde
digitalWrite (MausKlick,LOW);
while (analogRead(sensorPin1)<13) ;
Serial.println("Warten-1");
unsigned long time=micros();
Serial.println("Warten-2");
while (analogRead(sensorPin2)<3) ;
Serial.println("Warten-3");
time=(micros()-time)/2;
Serial.println("Warten-zeit gerechnet");
Serial.println("Wieder Warten-1");
while (analogRead(sensorPin1)<13) ;
delayMicroseconds(time);
digitalWrite (MausKlick,HIGH);
Serial.println("MausKlick");
}
Ich denke das Problem ist so komplex das ich es echt super fände wenn man sich über Skype verständigen könnte um der Sache schneller auf den Grund zu gehen
sschultewolter:
Aber deine Sensoren werten in der Zeit auch nicht aus.
Eigentlich schon. Es ist halt busy waiting. Er bleibt solange stehen bis die Bedingung eintritt. Solange man sonst nichts macht geht das im Prinzip.
So genau habe ich es aber auch wieder nicht durchgedacht...
Ich würde aber auch eher die loop ständig laufen lassen und mit Statusvariablen bestimmen welche Bedingungen zu welchem Zeitpunkt abgefragt werden. Ist flexibler.
sschultewolter:
War das nicht gerade noch ein anderer Sketch?
ja ich hab erst das Falsche sketch kopiert .... das ist nur mein sketch für die zuordnung der werte im belichtetem und unbelichtetem zustand =)
int sensorPin1 = A0;
int sensorPin2 = A5; //Pin, an den der LDR angeschlossen ist
int sensorWert1 = 0;
int sensorWert2 = 0; //in dieser Variable wird der ausgelesene
int MausKlick = 13; //Wert zwischen gespeichert.
void setup() {
Serial.begin(9600); //Serielle Verbindung initialisieren
pinMode (MausKlick,OUTPUT);
}
void loop() {
sensorWert2 = analogRead(sensorPin2);
sensorWert1 = analogRead(sensorPin1); // Wert auslesen
Serial.println(sensorWert1);
Serial.println("das war 1");
Serial.println(sensorWert2);
Serial.println("das war 2"); // Über Serial senden
delay(1000); // delay() bestimmt wie oft in der Sekunde
if (sensorWert1 < 9)
{
digitalWrite (MausKlick,HIGH);
}
if (sensorWert1 >= 9)
{
digitalWrite (MausKlick,LOW);
}}
Jetzt weiß ich nicht wie lange die Impulse auf dem LDR dauern aber LDRs sind langsam und nicht für einen Lichtschranke zu gebrauchen. Nimm einen Fototransistor.
Grüße Uwe
Sind da nicht die Variablen in den Klammern vertauscht? Das würde allerdings auch nur die Zuordnung der Sensoren herumdrehen.
Aber vom Prinzip her sollte das gehen. So hatte ich mir das auch vorgestellt.
Funktionieren die Sensoren an sich? Ist das richtig angeschlossen?
EDIT:
Der Sketch gibt ja auch alle Sekunde die Werte der Sensoren aus. Egal was sonst passiert. Was kommt da im Serial Monitor an? Wie uwefed sagt sind Fotowiderstände langsam. Siehst du da dass sich die Werte schnell genug ändern für das Ereignis das du erfassen willst?
Probier vielleicht mal aus wie schnell die Sensoren reagieren, wenn du deine Hand mit unterschiedlichen Geschwindigkeiten davor herumwedelst. Dafür musst du die "interval" Variable verkleinern, sonst geschieht die Ausgabe nicht oft genug.
uwefed:
Jetzt weiß ich nicht wie lange die Impulse auf dem LDR dauern aber LDRs sind langsam und nicht für einen Lichtschranke zu gebrauchen. Nimm einen Fototransistor.
Grüße Uwe
genau aus diesem grund habe ich mich fotodioden gekauft 2 stück nach ein bisschen rumprobieren habe ich sie aber nicht angeschlossen bekommen und habe dann wieder die guten alten fotowiederstände genommen ^^
Serenifly:
EDIT:
Der Sketch gibt ja auch alle Sekunde die Werte der Sensoren aus. Egal was sonst passiert. Was kommt da im Serial Monitor an? Wie uwefed sagt sind Fotowiderstände langsam. Siehst du da dass sich die Werte schnell genug ändern für das Ereignis das du erfassen willst?
Probier vielleicht mal aus wie schnell die Sensoren reagieren, wenn du deine Hand mit unterschiedlichen Geschwindigkeiten davor herumwedelst. Dafür musst du die "interval" Variable verkleinern, sonst geschieht die Ausgabe nicht oft genug.
Das mit der hand wäre zu ungenau ... da die die messung unmittelbar vor den sensoren passiert ....
im serial monitor passiert so einiges ... man bemerkt eine kleine verzögerung ... eventuell ist das aber schon zu viel
da die geschwindigkeit zwischen den intervallen ich schätze mal so von 800-1000 ms
Fabio1989:
genau aus diesem grund habe ich mich fotodioden gekauft 2 stück nach ein bisschen rumprobieren habe ich sie aber nicht angeschlossen bekommen und habe dann wieder die guten alten fotowiederstände genommen ^^
Fotodioden sind problematisch zu handhaben, da der Fotostrom sehr gering ist. Um das beste Ergebnis damit zu erzielen braucht man einen Operationsverstärker als Transimpendanzverstärker (Strom-Spannungs-Wandler).
Wer Misst misst, misst Mist. Die Werte sind viel zu niedrig. Praktisch ist es gar nichts. Was du da misst ist Rauschen. Bei 5V Vref hast du ca. 4,88mV pro Schritt. Deshalb musst du da schon mal mehr als ein paar mV haben.
(EDIT: Der Code teilt das durch 4, also ca. 19,5mV pro Schritt in diesem Fall)