Hey Danke viemal für deine Antwort !
Den Standby Modus möchte ich komplett in einem Interrupt Programmieren.
Ich schreibe Dir hier einen Teil meines codes.
Im Void Standby sollte ich ein Delay haben vor dem Befehl
digitalWrite(CellPlus, LOW); (Beispiel)
Ich muss wohl den Befehl irq_flag im void loop Programmieren ?!
Danke !
int Taster=7; //Taster
int Zschloss=2; // Zündschloss Auto
int Modus=9; //Fahrmodus /Zyklus oder Full Power
int Led=13; //Kontroll LED
int CellGND= 12; // Autput Cell GND
int CellPlus= 11; // Autput Cell +
int CellCharge=10; // Output Umschalt-Relais 1=Messen 0=Laden
int Messen = A0; // Input Pin für Messzyklus 1,5V=300 3V=600
volatile int Messwert = 0; // variable zum speichern von Input Analog 0
volatile byte irq_flag = 0; // globale variable, "volatile", da in irq verwendet (ist ein muss)
int Modus_Wert = 0; //variable zum speichern von Zyklus oder Full Power
long letzteMillis = 0; // initialisiere Variable fuer den Zeitpunkt der letzten LED-Aktualisierung
long intervall = 20000; // Intervall, in dem die LED blinkt (Millisekunden), nur Beispiel
void setup() {
Serial.begin(9600);
pinMode(Led,OUTPUT); //Kontroll LED Digital Output 13
pinMode(CellGND, OUTPUT); // CellGND Digital Output 12
pinMode(CellPlus, OUTPUT);// CellPlus Digital Output 11
pinMode(CellCharge, OUTPUT);//Umschalt-Relais 1=Messen 0=Laden
pinMode(Zschloss,INPUT); // Zündschloss Digital Input 8
pinMode(Taster,INPUT); // Taster Digital Input 7
pinMode(Modus,INPUT); // Fahrmodus 1=Full Power 2=Zyklus
int letzter_Tasterzustand = LOW;
int led_state = LOW;
attachInterrupt(0, Standby, LOW);
}
void loop() { //Fahrmodus
digitalWrite(CellCharge, LOW);
delay(10);
digitalWrite(CellGND,LOW);
delay(10);
digitalWrite(CellPlus,LOW);
Modus_Wert = digitalRead (Modus);
while (Modus_Wert==HIGH)
{
//if (digitalRead(Zschloss)==LOW)
//{
//break;
//}
digitalWrite(CellGND,HIGH);
delay(1000);
digitalWrite(CellPlus,HIGH);
if (digitalRead(Modus)==LOW)
{
break;
}
}
digitalWrite(CellPlus,LOW);
delay(1000);
digitalWrite(CellGND,LOW);
delay(10);
digitalWrite(CellCharge,LOW);
delay(10);
}
void Standby()//STANDBY LOOP
{
digitalWrite(CellCharge, LOW);
irq_flag = 1000;
if(irq_flag == 10000) {
/* sende den ping */
irq_flag = 0; // ruecksetzen des flags
}
digitalWrite(CellPlus, LOW);
}