Hallo,
ich bin dabei eine Timelapse-Steuerung für meine Kamera zu programmieren. Dabei wird im Arduino ausgerechnet in was für einem Abstand die Bilder gemacht werden sollen. Zuvor muss man allerdings einstellen in was für einem Zeitraum die Bilder gemacht werden sollen und wie viele. Nun habe ich das Problem das er mir bei der Rechnung ein falsches Ergebnis ausgibt.
Ich benutze für ein LCD Menü die LCDMenuLib von Jomelo.
sascha_hemi:
delays = zeit / bildanzahl;
...
Kann mir jemand erzählen was ich falsch mache?
Deklaration der Variablen "delays" ==> nicht angegeben
Deklaration und Inhalt der Variablen "zeit" ==> nicht angegeben
Deklaration und Inhalt der Variablen "bildanzahl" ==> nicht angegeben
Dein Problem wird wohl irgendwas mit dem zu tun haben, was Du bei Deiner Frage nicht angegeben hast.
Oh tut mir leid... Ich habe es angegeben allerdings ganz oben in der Datei ich wollte jetzt nicht unbedingt die ganze datei dort rein kopieren... Weil das sind ein Paar zeilen
//Variablen
int kamera = 1;
int bildanzahl = 0;
int zeit = 0;
int ticker = 0;
int delays = 0;
Die Variablen die = 0 sind werden entweder vom User eingestellt oder eben automatisch ausgerechnet...
Ich hoffe ihr könnt mir da weiter helfen
Die Formel ist alles andere als gut! Hier kann eine Division /0 erfolgen.
delays = zeit / bildanzahl;
Ich weiß jetzt nicht genau, mit was für Zeiten du Arbeiten möchtest. Aber grundsätzlich würde ich delays vermeiden und auf millis() (Tutorial: BlinkWithoutDelay) zurückgreifen.
delay, zeit und bildanzahl sind nicht als float zahlen deklariert.
Bei der Division von Zahlen wird automatisch abgerundet (1/2 = 0). Das kannst du unteranderem dadurch verhinden, dass du mit float arbeitest (hier nicht empfohlen), oder mit einem Faktor arbeitest, oder aber rechts vom = mit +0.5 nimmst.
So dürften die Ergebnisse deutlich genauer für dich seinen. Optimalerweise arbeitest du nun nicht mehr mit millis() oder delay(),
sonder mit micros() oder delayMicroseconds()
sascha_hemi:
Ein Integer kann keine Kommazahlen kann das sein?
Ja das mit dem 0 Wert da muss ich auch noch was zu Schreiben im Programm...
Ein Integerwert ist eine Ganzzahl genauso wie Byte, Char, long ...
Wenn nicht umbedingt notwendig, sollte man auf floats verzichten, da diese vom µC deutlich schwerer zuberechnen sind.
3600000 Milisekunden sind 60 Minuten... Jemand eine Lösung wie ich das ändern kann? ich habe bisher nur in einem anderen forum folgendes gefunden: zeit * 60 * 1000 / bildanzahl bzw. delay(10 * 60 * 1000);
Ja das war mir schon klar allerdings hatte ich wieder einen Fehler gemacht im Code deswegen dachte ich das geht doch nicht... Sorry mein Fehler... Jetzt läufts so wie ich will Danke liebes Arduino.cc Forum :*