Hi
für die meisten vermutlich offensichtlich, aber für mich leider noch nicht. Ich möchte LED Impulse mitloggen. Mein Counter bleibt aber auf 1. Wo ist mein Denkfehler? Brauch ich noch eine extra Do-while Schleife, damit der counter nicht mehr zurückgesetzt wird?
void setup() {
Serial.begin(9600); // initialize serial communication at 9600 BPS
}
void loop() {
int sensorValue = analogRead(A0);// read the input on analog pin 0
if (sensorValue < 150 ) {
int impulse = impulse + 1;
delay(1000);
Serial.println(impulse);
}
Variablen sind nur so lange gültig, wie der Kontext (geschweifte Klammern), in dem sie deklariert wurden. Du musst die Variable außerhalb von loop() deklarieren.
static bool neu;
bool puls = analogRead (A0) < 150; // wie auch immer
if ( puls && neu ) {
count++; // was immer einmal pro puls zu tun ist
neu = false;
}
if ( ! puls ) neu=true; // scharf machen für den nächsten Puls
ok, verstehe. Klingt logisch. Aber wenn ich es so machen, passiert genau das Gegenteil was ich eigentlich damit bezwecken wollte. Lass ich den finger einfach mal 1s auf dem LDR, sieht das Ergebnis so aus:
Frage ich Mal anders: Was soll denn passieren, statt die Ausgaben, Die Du erhältst?
In Deinem Sketch sehe ich nicht, wie DIESE Ausgabe zustande kommen sollte - passt also nicht so wirklich zusammen, oder?
hi,
naja also die LED am Stromzähler blinkt. 1000 Impulse = 1kwh. Ergo EIN Impuls = Counter + 1. das isses schon.
Jetzt krieg ich aber für EIN Impuls = counter + 3 oder auch mal +4 oder +5. Da hat meine meine (ungenaue) variante mit dem delay besser funktioniert
Warum sollte ich ein DIGITALES Signal analog einlesen?
LED AN --> Signal am Arduino
LED AUS --> KEIN Signal am Arduino
(oder anders herum)
Das lässt sich mit entsprechenden Widerständen einstellen.
1x eingestellt und Du hast Ruhe.
Dann erfasst Du die Flanken, also 1->0 Counter++, 0->1 nix, also nur Übernahme des 'Neu-Zustand'.
static boolean neuZustand=false;
neuZustand=digitalRead(BlinkeEngang);
if (altZustand!=neuZustand){
if (altZustand==true){
counter++;
}
altZustand=neuZustand;
}
ich glaube wir reden aneinander vorbei. Ich dachte der T0 hat einen einzelnen LDR mittels Vorwiderstand als Spannungsteiler verbaut, desshalb das analogread. Wenn der wert < 150 ist "LDR belichtet" soll gezählt werden. Hat er denn einen Digitalausgang an dem Ding drann. ?
ich denke der triggrepunkt ist nicht eindeutig deshalb 3-4 oder mehr Zählwerte.
ja genau, Heinz. hab nur den LDR mit widerstand dran. wenn ldr <150 = licht aus. Momentan ist das verhalten nicht konstant. jetzt geht es. aber nur ein paar mal, dann geht gar nix mehr. muss ich mir näher ansehen