Hallo, ich habe ein kleines Problem mit der millis() Funktion. Eine einzelne millis() Anwendung bekomme ich hin, auch habe ich den Sinn verstanden. Das was mir jetzt Probleme bereitet, ich komme nicht mehrere zum laufen. Ich habe den Code eingefügt und möchete nun die delays raus haben und durch millis ersetzen. Es sollen 2 verschiedene zeitvariablen genutzt werden. Der 1. Code funktioniert aber im 2. Code geht gar nichts(ist zum testen gedacht ).
Es soll auch immer einen art geben, zum abbrechen der for schleife.
1.Code
#include <Bounce.h>
#include <LiquidCrystal.h>
#include <Encoder.h>
LiquidCrystal lcd(17, 4, 5, 6, 7, 8); // LCD
Encoder myEnc (15, 16); // Encoder
int KameraPin = 3; //Kamera auslöser Optokopler
int Motor1Pin = 0 ; //Slidermotor vorwärts//
int Motor2Pin = 18 ; //Slidermotor rückwärts//
int MotorsteuerungPin = 11 ; //Slider Geschwindigkeit//
int encoderknopfpin = 1 ; // Encoder Bushbutton //
int menueknopfpin = 9; // Menueauswahl Schalter S1//
int zurueckknopfpin = 10 ; // Zruückschalter S2//
int AkkuPin = A5 ; // Akku Ladezustand messen//
int interzeit = 0; // Encoderintervallzeit//
Bounce startknopf = Bounce(encoderknopfpin, 50);
Bounce menueknopf = Bounce(menueknopfpin, 50);
Bounce zurueckknopf = Bounce(zurueckknopfpin, 50);
int zaehler1 = 0;
int zaehler2 = 0;
int zaehler3 = 0;
int akkuwert = 0; // akku spannug am A5//
//int akkuausgabe = 0; //Akku ausgabe wert für LCD//
unsigned long vorher; //Zeitwert 0 Aufnahme
unsigned long vorher1; // Zeitwert 1 Aufnahme
unsigned long vorher2; // Zeitwert 2 Aufnahme
int ausloe = 0; // Auslösung
int Intervall [] = { 100, 1000, 2000, 5000, 10000 }; // Intervall Kameraauslösung Zeit
int Kamerastatus = LOW;
int Sliderstatus = LOW;
void setup()
{ pinMode(KameraPin, OUTPUT);
pinMode(Motor1Pin, OUTPUT);
pinMode(Motor2Pin, OUTPUT);
pinMode(MotorsteuerungPin, OUTPUT);
pinMode(encoderknopfpin, INPUT);
pinMode(menueknopfpin, INPUT);
pinMode(zurueckknopfpin, INPUT);
pinMode(AkkuPin, INPUT);
vorher = 0;
lcd.begin(16, 2);
//Serial.begin(9600);
lcd.print( "Fototimer MK 600");
delay(2000);
lcd.clear();
}
long position = -999;
void loop()
{
akkuwert = analogRead(AkkuPin);
float V = akkuwert * ( 12.0 / 1023.0);
lcd.setCursor(10, 0);
lcd.print(V);
lcd.setCursor(15, 0);
lcd.print("V");
long newPos = (myEnc.read())/4;
if (newPos != position) {
position = newPos; }
menueknopf.update (); //update für Menüknopf-Auswahl//
int menuewert = menueknopf.read();
zurueckknopf.update ();
int zurueckwert = zurueckknopf.read();
zurueckwert++;
startknopf.update();
int startwert = startknopf.read();
if(startwert == HIGH)
zaehler1++;
if(startwert == 1)
{
for(int i = 1; i < 400; i++)
{
lcd.setCursor(0,1);
lcd.print(i);
lcd.print(" Foto ");
digitalWrite(KameraPin, HIGH);
delay(500);
digitalWrite(KameraPin, LOW);
delay(newPos * 1000);
}
}
lcd.setCursor(0,0);
lcd.print(newPos);
lcd.print( " Zeit ");
zaehler1 = zaehler1%4;
}
- Code ( die Variablen sind gleich..)
long position = -999;
void loop()
{
akkuwert = analogRead(AkkuPin);
float V = akkuwert * ( 12.0 / 1023.0);
lcd.setCursor(10, 1);
lcd.print(V);
lcd.setCursor(15, 1);
lcd.print("V");
menueknopf.update (); //update für Menüknopf-Auswahl//
int menuewert = menueknopf.read();
zurueckknopf.update ();
int zurueckwert = zurueckknopf.read();
zurueckwert++;
startknopf.update();
int startwert = startknopf.read();
if(startwert == HIGH)
zaehler1++;
if(menuewert == HIGH)
zaehler1++;
long newPos = (myEnc.read())/4;
if (newPos != position) {
position = newPos; }
switch(zaehler1)
{
case 0: lcd.setCursor(0, 0);
lcd.print( "Menue Test");
lcd.setCursor(1, 6);
lcd.print(position);
break;
case 1:
lcd.setCursor(0, 0);
lcd.print("Foto 400");
if((millis() - vorher1) > Intervall[2])
{
vorher1 = millis();
Kamerastatus = !Kamerastatus;
digitalWrite(KameraPin, Kamerastatus);
zaehler2++;
}
ausloe = (zaehler2 / 2);
lcd.setCursor(1, 4);
lcd.print(ausloe);
break;
case 2 :
lcd.setCursor(0, 0);
lcd.print( "HDR 7");
if((millis() - vorher1) > 1000)
{
Sliderstatus =!Sliderstatus;
digitalWrite(Motor2Pin, Sliderstatus);
if(zurueckwert == 1)
break;
}
if((millis() - vorher2) > 1000)
{
vorher2 = millis();
Kamerastatus = !Kamerastatus;
digitalWrite(KameraPin, Kamerastatus);
}
break;
case 3 :
lcd.setCursor(0, 0);
lcd.print( "Foto 400 Slider");
if((millis() - vorher1) > Intervall[2])
{
Kamerastatus = !Kamerastatus;
digitalWrite(KameraPin, Kamerastatus);
zaehler3++;
}
if((millis() - vorher1) > Intervall[2])
{
Sliderstatus =!Sliderstatus;
digitalWrite(Motor2Pin, Sliderstatus);
}
ausloe = (zaehler3 / 2);
lcd.setCursor(1, 4);
lcd.print(ausloe);
break;
}
zaehler1 = zaehler1 % 4;
}
Wo liegt nun mein denk fehler :~
Gruß Marco