Problem mit Code

Hallo und zwar habe ich das Problem, das ich einen Code geschrieben habe der so eigentlich Funktionieren sollte jedoch kriege ich eine Fehlermeldung und kann auch nichts auslesen von den Sensoren (Reedsensor,Lightsensor)```

// Deklarieren der Variablen, Konstanten usw.

const byte TASTER_AUF = 8;          // Tasterpin zum Oeffnen der HKS
const byte TASTER_ZU = 9;           // Tasterpin zum Schließen der HKS 
const byte REED_OBEN = 10;           // Reed-Kontakt oben
const byte REED_UNTEN = 11;          // Reed-Kontakt unten
const byte MOTOR_1 = 2;             // MOTOR_PIN +/-
const byte MOTOR_2 = 4;             // MOTOR_PIN -/+
const int LDR = A0;                 // Lichtsensor
  

bool REEDSTAT_OBEN = 0;             // Zwischenspeicher-Variable fuer REED_OBEN
bool REEDSTAT_UNTEN = 0;            // Zwischenspeicher-Variable fuer REED_UNTEN


volatile bool ISR_FLAG_AUF = 0;     // Flag für INTERRUPT_TASTER_AUF 
volatile bool ISR_FLAG_ZU = 0;      // Flag für INTERRUPT_TASTER_ZU 

int LDR_WERT = 1023;   // Zwischenspeicher-Variable für LDR-WERT
int LDR_SW_MORGEN = 800;            // z.B 550 als Lichtschwellwert fuer das Oeffnen am Morgen   
int LDR_SW_ABEND = 700;   

void setup()
{
  Serial.begin(9600);                              // Init fuer Serial-Monitor  
  pinMode(MOTOR_1, OUTPUT);                        // Motoranschluss1 als Ausgaenge deklarieren
  pinMode(MOTOR_2, OUTPUT);                        // Motoranschluss2 als Ausgaenge deklarieren
  pinMode(TASTER_AUF, INPUT_PULLUP);               // Taster-Anschluss OBEN mit internem Pullup
  pinMode(TASTER_ZU, INPUT_PULLUP);                // Taster-Anschluss UNTEN mit internem Pullup
  pinMode(REED_OBEN, INPUT_PULLUP);                // Reed-Anschluss OBEN mit internem Pullup
  pinMode(REED_UNTEN, INPUT_PULLUP);               // Reed-Anschluss UNTEN mit internem Pullup

  
  attachInterrupt(0, TASTER_AUF, LOW);   // Interrupt fuer Taster_AUF
  attachInterrupt(1, TASTER_ZU, LOW);    // Interrupt fuer Taster_ZU
}
void loop()
{
  Serial.println(REEDSTAT_UNTEN);
Serial.println(LDR_WERT);
Serial.println(REEDSTAT_OBEN);

  REEDSTAT_OBEN = digitalRead(REED_OBEN);          // Einlesen des Reed-Kontakt-Status fuer Oben (offen od. geschlossen)
  REEDSTAT_UNTEN = digitalRead(REED_UNTEN);        // Einlesen des Reed-Kontakt-Status fuer Unten (offen od. geschlossen)
  
  LDR_WERT = analogRead(LDR);                      // Einlesen des aktuellen LDR-Wertes
  
//#################################################################################################################//
      //////////////////////////////////////////////
     //  BEDINGUNGEN : Tastendruck - Interrupt   //
    //////////////////////////////////////////////  
//#################################################################################################################//

//######  BEDINGUNG TASTENDRUCK AUF ###############################################################################//

  if (ISR_FLAG_AUF == 1)                           // Bedingung bei Tastendruck AUF => gesetztes ISR_FLAG_AUF
  {
    ISR_FLAG_AUF = 0;
    
   
    while(REEDSTAT_OBEN)                           // Schleife die soloange durchlaufen wird bis REED_OBEN schließt
    {
      MOTOR_AUF();
      REEDSTAT_OBEN = digitalRead(REED_OBEN);      // Pruefung ob REED_OBEN "offen" oder "geschlossen" ist
    }
    
    MOTOR_STOP();
    //**Serial.println("Programm befindet sich in Bedingung TASTENDRUCK AUF"); 
  }
  
//######  BEDINGUNG TASTENDRUCK ZU  ###############################################################################//

  else if (ISR_FLAG_ZU == 1)                       // Bedingung bei Tastendruck ZU => gesetztes ISR_FLAG_ZU
  {
    ISR_FLAG_ZU = 0;
    
    while(REEDSTAT_UNTEN)                          // Schleife die soloange durchlaufen wird bis REED_UNTEN schließt
    {
      MOTOR_AB();
      REEDSTAT_UNTEN = digitalRead(REED_UNTEN);    // Pruefung ob REED_UNTEN "offen" oder "geschlossen" ist
    }

    MOTOR_STOP();
    //**Serial.println("Programm befindet sich in Bedingung TASTENDRUCK ZU");    //(fuer Diagnose-Zwecke)       
  }


//#################################################################################################################//
      //////////////////////////////////////////////
     // BEDINGUNGEN : ENTWEDER LDR ODER ZEITSTRG //
    //////////////////////////////////////////////  
//#################################################################################################################//

//######  BEDINGUNG LDR/ZEITSTRG AUF  ####### #####################################################################//

  if (LDR_WERT >= LDR_SW_MORGEN)
  {
    while(REEDSTAT_OBEN)                           // Schleife die soloange durchlaufen wird bis REED_OBEN schließt
    {
     MOTOR_AUF();
     REEDSTAT_OBEN = digitalRead(REED_OBEN);       // Pruefung ob REED_OBEN "offen" oder "geschlossen" ist
    }
     MOTOR_STOP();
    //**Serial.println("Programm befindet sich in Bedingung LDR/ZEITRG-AUF");   //(fuer Diagnose-Zwecke)  
  } 

//######  BEDINGUNG LDR/ZEITSTRG ZU  ####### ######################################################################//
    
  else if (LDR_WERT <= LDR_SW_ABEND)
  {
    while(REEDSTAT_UNTEN)                          // Schleife die soloange durchlaufen wird bis REED_UNTEN schließt
    {
     MOTOR_AB();
     REEDSTAT_UNTEN = digitalRead(REED_UNTEN);     // Pruefung ob REED_UNTEN "offen" oder "geschlossen" ist
    }
     MOTOR_STOP();
     //**Serial.println("Programm befindet sich in Bedingung LDR/ZEITRG-ZU");   //(fuer Diagnose-Zwecke)   
  } 

//#################################################################################################################//
      //////////////////
     // FUNKTIONEN : //
    //////////////////  
//#################################################################################################################//








}
void INTERRUPT_TASTER_AUF()
{ 
  ISR_FLAG_AUF=1; 
}

void INTERRUPT_TASTER_ZU()
{  
  ISR_FLAG_ZU=1;
}

void MOTOR_AUF()
{
  digitalWrite(MOTOR_1, HIGH);
  digitalWrite(MOTOR_2, LOW);
  //**Serial.println("CCC STATUS ON - KLAPPE OEFFNET");   //(fuer Diagnose-Zwecke) 
}

void MOTOR_AB()
{
  digitalWrite(MOTOR_1, LOW);
  digitalWrite(MOTOR_2, HIGH);         
 
  //**Serial.println("CCC STATUS ON - KLAPPE SCHLIESST"); //(fuer Diagnose-Zwecke) 
}

void MOTOR_STOP()
{
  digitalWrite(MOTOR_1, LOW);
  digitalWrite(MOTOR_2, LOW);
  //**Serial.println("MOTORSTOP wird ausgefuehrt");       //(fuer Diagnose-Zwecke)  
}


zudem kriege ich noch diese Fehlermeldung: 

:\Users\kingj\Documents\Arduino\CCC_V1.23.6_STABLE_GER\CCC_V1.23.6_STABLE_GER.ino: In function 'void setup()':
C:\Users\kingj\Documents\Arduino\CCC_V1.23.6_STABLE_GER\CCC_V1.23.6_STABLE_GER.ino:35:37: warning: invalid conversion from 'byte {aka unsigned char}' to 'void ()()' [-fpermissive]
attachInterrupt(0, TASTER_AUF, LOW); // Interrupt fuer Taster_AUF
^
In file included from sketch\CCC_V1.23.6_STABLE_GER.ino.cpp:1:0:
C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/Arduino.h:151:6: note: initializing argument 2 of 'void attachInterrupt(uint8_t, void (
)(), int)'
void attachInterrupt(uint8_t interruptNum, void (userFunc)(void), int mode);
^~~~~~~~~~~~~~~
C:\Users\kingj\Documents\Arduino\CCC_V1.23.6_STABLE_GER\CCC_V1.23.6_STABLE_GER.ino:36:36: warning: invalid conversion from 'byte {aka unsigned char}' to 'void (
)()' [-fpermissive]
attachInterrupt(1, TASTER_ZU, LOW); // Interrupt fuer Taster_ZU
^
In file included from sketch\CCC_V1.23.6_STABLE_GER.ino.cpp:1:0:
C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.57.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino/Arduino.h:151:6: note: initializing argument 2 of 'void attachInterrupt(uint8_t, void (*)(), int)'
void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode);
^~~~~~~~~~~~~~~

Wenn eine Fehlermeldung kommt, wird der Sketch nicht funktionieren.

Hast du denn die Fehlermeldung angesehen und entsprechend erledigt ?

Dort steht die Fehlermeldung nur werd ich aus ihr nicht schlau

Ach so....das hattest du nicht geschrieben.

Und setze bitte deinen Sketch in Code-Tags. Den komplett markieren und die Schaltfläche </> drücken.

Habs geändert, ich kann aus dem Fehlercode erkennen, das es irgendetwas mit den Itterupts zu tun hat nur was ich da machen kann weiß ich nicht

Das hatte ich gemacht um generell mal Informationen zu bekommen aber ich bekomme nix angezeigt

na, merkst du?

  • LOW Interrupt wird getriggert, wenn der Pin LOW ist,

also die ganze Zeit so lange LOW dauert wird unterbrochen

So wie ich das sehe, sind das nur Warnungen, der Sketch sollte also compilieren.
Wird er auch auf den Controller übertragen ?

Habs geändert nun ist der Fehler nicht mehr da :sweat_smile: danke

Glaube schon

Wieso....das wird doch angezeigt.

Was meinst du?

Trozdem macht er nicht was ich möchte, wenn ich das Programm starte, fängt der Motor sofort an sich zu drehen und hört auch nicht mehr auf

Dann bau dir ein paar serielle Ausgaben ein, um zu erkennen, wo das Problem liegt.

Es wird in der IDE angezeigt, ob der Sketch übertragen wurde.

Auch ist mir unklar, wieso du Taster per IRQ abfragst. Das ist ziemlich unnütz.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.