also ich versuche nun schon einige Zeit einen einfachen counter zu basteln, aber selbiger zäht nicht hoch. Anbei ein Auszug.
count_imp bleibt auf 1 stehen, sollte aber immer wenn der if Teil erfüllt ist (was er definitiv ist), um eins hochzählen.
void loop(){
int messen = 0;
int count_imp;
int newval, oldval;
int timestart;
if(messen == 1){
count_imp = 0;
if(voltage < 0.2 ){
//Variable auf 1 setzten bei Blinken des 'S0'
count_imp += 1;
}
if (currentMillis - previousMillis > interval) {
previousMillis = currentMillis;
Serial.println(count_imp);
messen = 0;
}
}
Probier mal die Bedingung if(voltage < 0.2 ) zu testen, d.h. mach ein Serial.print(voltage) im Loop, ob diese Bedingung erfüllt wird. Ansonsten: nur mit diesem Codeschnippsel ist eine Fehleranalyse unmöglich. (z.B. wann "messen" auf 1 gesetzt wird).
LG
Matthias
erstens legst Du bei jedem loop-durchlauf eine neue variable count_imp an und setzt sie dann auch noch auf 0. nimm eine globale variable und setz' sie, falls nötig, in der setup auf 0.
Also voltage < 0.2 wird erfüllt, kann ich mit einem serial.print ansehen, aber count ist immer wieder 0. Hier ist mal der ganze Code:
long previousMillis = 0; // will store last time LED was updated
long interval = 60000; // interval at which to blink (milliseconds
int count_blinks = 0; //Blinks pro Intervall
int count_imp;
// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
int count_imp = 0;
}
// the loop routine runs over and over again forever:
void loop() {
int messen = 0;
int newval, oldval;
int timestart;
unsigned long currentMillis = millis();
if (messen == 0) {
// neue Messung initialisieren
messen = 1;
// Zähler nullen
//count_imp = 0;
// Startzeit nehmen#
oldval = 0;
timestart = millis();
}
if(messen == 1){
int sensorValue = analogRead(A0); // Pin an dem der Sensor hängt
float voltage = sensorValue * (5.0 / 1023.0);
//Serial.println(voltage);
if(voltage < 0.2 ){
//Variable auf 1 setzten bei Blinken des 'S0'
Serial.println(voltage);
count_imp += 1;
}
if (currentMillis - previousMillis > interval) {
// Messung ist beendet , 1s war Messzeit, count ist direkt Frequenz in Hz
previousMillis = currentMillis;
Serial.println(count_imp);
//count_imp = 0;
messen = 0;
}
}
}
kannst du vieleicht mal kurz erklären was du machen möchtest.
In der loop Schleife hast du int messen = 0; und darunter gleich
if (messen == 0) { .... messen = 1;...
Damit gibst du count_imp += 1; keine Möglichkeit weiter als 1 zu zählen weil
im if (messen == 0) sowieso immer wieder durchgelaufen wird wegen dem int messen = 0;.
Also im Grunde ist int messen = 0; und die If überflüssig.
Ich verstehe dein Script leider nicht. Sag doch bitte was es tun soll.
danke für diesen ersten Hinweis. Da war ich schon mal sehr blind mit dem messen = 0 im loop Teil.
Generell ist es ein Versuch, dass eine Minute der Counter laufen soll (messen==1 und count_imp +=1;) und dann von neuem Zählen soll und den Wert ausgeben soll.