Ich bin kurz vor dem Verzweifeln >.<

Hallo,

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

Skype : art-controller

Danke im voraus :wink:

Der Sketch ist falsch! Damit erzwingst du das jede Sekunde etwas auf dem Monitor steht. Aber deine Sensoren werten in der Zeit auch nicht aus.

-> Lösung: Tutorial Blink Without Delay

Hey danke für die schnelle antwort ^^

aber ich verstehe sie nicht :~

also ich dachte immer das dass was in einer while schleife steht solange wiederholt wird bis sie True oder False ist

das ist bei mir nicht der fall ...

ach das ist echt schwert zu erklären am besten per vernwartung einen blick auf den serial monitor werfen sonst ist es echt nich leicht zu verstehen

Ist doch alles gut kommentiert!

http://arduino.cc/en/Tutorial/BlinkWithoutDelay

Ansonsten wäre ein Arduino Anfängerbuch erstmal zu empfehlen.

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.

War das nicht gerade noch ein anderer Sketch?

ok ich habe jetzt verstanden worum es dabei geht ....

allerdings handelt es sich bei meiner "led" um einen Intervall der immer gleichbleibend ist

sondern wie beschrieben immer neu errechnet werden soll... wie ist das also umsetzbar.

und das Buch habe ich als Pdf ... in diesem habe ich gestern bis 3 Uhr morgens eine Lösung gesucht .... erfolglos :(

also bitte teilt euer wissen =)

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);
  }}

den meinst du wa

fällt keinem was dazu ein ?? :|

const int sensorPin1 = A0;   
const int sensorPin2 = A5;
int valSensor1 = 0;    
int valSensor2 = 0; 
boolean ct = false;
unsigned long ctMillis;
const int ledPin = 13;
unsigned long previousMillis = 0; // Zeit vergangen seit letztem Ereignis
int interval = 1000;  // Interval Ereignis

void setup() {  
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  valSensor1 = analogRead(sensorPin2)/4; // Wert 0 - 1023 (=> value/4)
  valSensor2 = analogRead(sensorPin1)/4;

  if(millis() - previousMillis >= interval) {
    previousMillis = millis(); // Zeit zurücksetzen
    Serial.print("Wert 1 : ");
    Serial.print(valSensor1);
    Serial.print(" || Wert 2 : ");
    Serial.println(valSensor2);   
  }

  if(valSensor1 > 9 && ct == false) {
    ct = true;
    ctMillis = millis();  
  }

  // Stoppuhr aktiv
  if(ct == true) {
    digitalWrite(ledPin, HIGH);
  }
  else digitalWrite(ledPin, LOW);

  if(valSensor2 > 9 && ct == true) {
    ct = false;
    Serial.print("Gebrauchte Zeit : ");
    Serial.print((millis() - ctMillis)/2);
  }
}

sowas?

P.S.: Solch "aussagekräftige" Threadtitel helfen dir nicht weiter.

also wenn ich es einfach bei mir reinkopiere schlägt pin 13 nicht aus :/

deswegen sprach ich von vernwartung ^^ ... ich bin kaum in der lage so komplexe Skripte bei mir zu implezieren :disappointed_relieved:

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

valSensor1 = analogRead(sensorPin2)/4; // Wert 0 - 1023 (=> value/4)
  valSensor2 = analogRead(sensorPin1)/4;

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

ist halt so eine art automatisierungsprozess ^^

@Serenfly, ja waren vertauscht ;)

  if(valSensor2 > 9 && ct == true)

Der von dir vorgegebene Wert schein mir auch deutlich zu klein sein. Was spuckt der Serial Monitor? (Die Ausgabe die sekündlich geschiet)

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).

Für eine einfache Schaltung brauchst du einen sehr hochohmigen Widerstand in Reihe (mehrere MegaOhm), damit da genug Spannung abfällt: http://www.mikrocontroller.net/articles/Lichtsensor_/_Helligkeitssensor#Konstantstromquelle_mit_Arbeitswiderstand

Fototransistoren dagegen sind ein guter Kompromiss aus Geschwindigkeit (mehrere µs) und einfacher Handhabung. Braucht nur einen Widerstand normaler Größe: http://www.mikrocontroller.net/articles/Lichtsensor_/_Helligkeitssensor#Phototransistor

So sieht der Serial.Monitor aus .... und es passiert einfach nichts und langsam bin ich echt gefrustet -.-

soetwas kann doch iwi nicht so schwer sein ........

aber danke für eure tipps und post´s

villeicht ginge es aber echt besser und schneller wenn mich einer von euch bei Skype ( art-controller) adden würde so das man sich beschprechen kann

Danke =)

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)

Wie ist der LDR angeschlossen? So?
http://www.mikrocontroller.net/articles/Lichtsensor_/_Helligkeitssensor#Photowiderstand

Also einen Spannungsteiler aus einem normalen Widerstand und dem Fotowiderstand.

Serenifly: Wie ist der LDR angeschlossen? So?

ja genau so .... ich bin nich vom fach ... ich bin Straßenbauer :D

und kann mit deinen Formeln und Bezeichnungen leider nichts anfangen ... habe mir alles zusammen gegoogelt .. ^^

brauche also intensive Nachhilfe :sweat_smile:

Edit:

Du sprachst vorhin von Transistoren ich habe 6 stück auf denen steht 2n 2222 331

ist das so ein Transistor von dem du gesprochen hast ?