Compiler meldet bestimmte Funktionen als fehlend

Hallo,
Ich habe hier ein Problem mit der Fehlermeldung:

exit status 1
'abfrageosvr' was not declared in this scope

Habe jetzt schon eine ganz Zeit gesucht und nichts gefunden, wahrscheinlich ist es trotzdem nur ein dummer Fehler.
Das ganze ist übrigens erst mein zweites Projekt und ich hatte nie groß was mit programmieren am Hut, wenn Ihr also sonst noch Verbesserungsvorschläge habt, lasst sie hören.
Hauptsächlich geht es mir aber um den oben angegebenen Fehler. Das Programm ist leider zu groß für die code Funktion hier im Forum.

Programm.txt (16.4 KB)

Das könnte ein Kompilerproblem sein.
Setze alle deine Funktionen vor die Loop, dann sollte es funktionieren.

Hab jetzt mal alle Funktionen vor loop und einmal vor setup geschrieben, aber das Resultat ist dasselbe.
Der Compiler findet meine Funktionen nicht.

Hallo,
er findet sie- aber "abfrageosvr" ist nicht deklariert.
Gruß und Spaß
Andreas

hier

Aber ist die ISR nicht mit

void abfrageosvr(){                
  Serial.print("\t\nStart abfrageosvr Interrupt\n");
  Serial.print("\nStart stoppen\n");
  digitalWrite(stepr, LOW);
  digitalWrite(stepl, LOW);
  digitalWrite(dirr, HIGH);
  digitalWrite(dirl, HIGH);
  Serial.print("\nEnde stoppen\n");
  
  Serial.print("\nStart posvr\n");             //Ausgabe für Log
  int zw = 0;                                   //lokale Variable Zwischenwert
  zw = analogRead(osvr); //schreibt den wert in schritte von 0 - 1000 um.
  if (zw > osvrgw){                             //Sensorwert wird mit Grenzwert verglichen
    osvrw = 1;                        //Wert für Weitergabe springt von 0 auf 1 !!!reseten nicht vergessen!!!
  }
  else osvrw = 0;
  Serial.print("\tosvr: "); Serial.print(zw);    //Ausgabe für Log
  Serial.print("\nEnde posvr\n");
//  noInterrupts();               //ausprobieren, bei bedenken wieder entfernen 141
  Serial.print("\t\nEnde abfrageosvr\n");
}

richtig deklariert? Der Interrupt ruft ja die ISR auf und genau hier erwarte ich eigentlich den Aufruf von dieser Funktion. Leider verstehe ich noch immer nicht warum es in diesem Fall nicht funktioniert.

Hallo,
im Link steht es doch geschrieben...
Gruß und Spaß
Andreas

Serial Ausgaben haben in ISRs übrigens nichts verloren...

Vielleicht habe ist das Problem etwas falsch beschrieben...
Aber der Interrupt kann leider nicht das Problem sein. Denn selbst wenn ich die Interruptroutine komplett entferne, sagt mir der Compiler das die erste aufgerufte Funktion nicht vorhanden ist.
In diesem Fall wäre es dann "checkos" da sie als erste Funktion im loop aufgerufen wird. Es kann also nicht am Interrupt liegen, sondern muss an der Zielfunktion oder der allgemeinen Struktur liegen.

exit status 1
'checkos' was not declared in this scope

Also ich habe das erste Beispiel aus deiner .txt Datei in den Editor der IDE 1.0.6 geladen
und compiliere es ohne Fehler.

IDE 1.0.6 unter OpenSuse Leap 42.2

Das mit dem Serial.print kann ich nur unterschreiben. Das gibt Probleme.

Ulli

Hallo,
was machst Du da eigentlich? Lesen könnte schon helfen...
Wenn ich Deinen Sketch in meine IDE werfe, dann läuft der fehlerfrei durch.
Gruß und Spaß
Andreas

Habe mir jetzt auch mal die IDE 1.0.6 die beeblebrox genannt hat heruntergeladen.
Damit läuft alles fehlerfrei.
Vorher habe ich die Version 1.6.12 genutzt und damit ging es nicht.
Und danke für die Info mit der Serial.print in der ISR.

Problem hat sich hiermit erledigt.

Hallo,
danke für die Rückmeldung. Viel Spaß damit.
Gruß
Andreas

Warum hast du das in zwei verschiedenen Reihenfolgen? Um dich und die Leser zu verwirren?

      digitalWrite(dirr,HIGH);
      digitalWrite(dirl,HIGH);
      digitalWrite(stepr,HIGH);
      digitalWrite(stepl,LOW);
    digitalWrite(stepr,LOW);
    digitalWrite(stepl,LOW);
    digitalWrite(dirr,HIGH);
    digitalWrite(dirl,HIGH);

Warum verwendest du für diese häufige Sequenz keine Funktion?

Ein Programm in dem das Folgende sinnvollen Output erzeugt wird dir keine Freude bereiten.

  laufzeit = millis() - laufzeit;
  Serial.print("\nLaufzeit loop: ");
  Serial.print(laufzeit);
  Serial.print("\n\tEnde loop\n");                        //Ausgabe für Log

Die Laufzeit von loop bestimmt jede Reaktionszeit, bei mehr als ein paar ms würde ich mir da Sorgen machen.

Bei geplanten Laufzeiten von über drei Sekunden... puh.

    noInterrupts();
    //NFC Routine starten
    interrupts();
    digitalWrite(8,HIGH);                    //LED für NFC leuchten lassen
    delay(3000);                             //Durch Routine ersetzen.
    digitalWrite(8,LOW);

Warum soll die NFC Routine ohne Interrupts starten?

Mit Interrupts solltest du dich mehr auseinandersetzen, da hast du offensichtlich Nachholbedarf.
https://www.gammon.com.au/interrupts

//  noInterrupts();               //ausprobieren, bei bedenken wieder entfernen 141

Durch Verwenden des F() Macros kannst Unmengen RAM sparen.
http://playground.arduino.cc/Learning/Memory

Danke für die Verbesserungsvorschläge, ich werde mal schauen was ich davon umsetzen kann. Der 3sek Delay ist nur stellvertretend für einen anderen Programmteil welcher noch hinzugefügt wird.

Hier ist das eigentliche Compilerproblem gemeldet worden. Es liegt tatsächlich an der 4. Zeile.

TheByenzo:
Delay ist nur stellvertretend für einen anderen Programmteil welcher noch hinzugefügt wird.

Das ist zu befürchten.

loop sollte durchschnittlich pro Sekunde nicht mehr als ein paar ms für einen Durchlauf brauchen.