Arduino Uno : "Selstsames" Verhalten von 2 Codes

OP #6002764
Lesenswert?

Hallo,
ich bin komplett neu hier und hoffe, dass ihr mir weiterhelfen könnt :)
Ich habe wie der Titel schon vermerken lässt ein dubioses Verhalten von 
2 Codes.
Code 1:
Ist mein Hauptcode (hauptcode.ino) in dem ich alle Funktionen abarbeite.
Code 2:
Ist ein "Testcode (test.ino)" um eine weitere Funktion aufzubauen, 
welche dann in den Code 1 eingebaut wird.

Es geht um die Annahme eines eingehenden Telefonanrufes auf ein GSM 
SIM900 Modul mit einem Arduino UNO als Controller. Das Modul arbeitet 
mit "AT"-Befehlen. Der Testcode zur Annahme eines eingehen Telefonats 
funktioniert alleine(also in der test.ino ausgeführt). Ich nehme den 
Anruf dort nach 2s an und lege nach 10s auf.
Innerhalb des Hauptcodes wurde die Aufgabe der Annahme jedoch nicht 
ausgeführt. Auf der Fehlersuche fiel mir auf, dass der Testcode 
innerhalb des Hauptcodes überhaupt nicht ausgeführt wird. Auch dann 
nicht wenn der Hauptcode vom void setup() bis nach dem void loop () 
(keine weiteren Funktionen innerhalb des Codes) mit /* und *\ 
auskommentiert ist und der Testcode, 1 zu 1 kopiert, alleine dort steht. 
Inklusive des eigenen void setup und void loop aus der test.ino Datei.
Die Variablen sind in beiden Codes gleich.

Ich versuche das hier einmal aufzuzeigen:

**********************************
Hauptcode:
void setup()
{

}

void loop ()
{

}
**********************************


**********************************
Testcode:
void setup()
{

}

void loop ()
{

}
**********************************


**********************************
Hauptcode mit Testcode:
(Testcode)
void setup()
{

}

void loop ()
{

}





/* Hauptcode auskommentiert
void setup()
{

}

void loop ()
{

}
*\
**********************************


Vor dem void setup sind in beiden codes die gleichen Variablen etc. 
deklariert.

Ich verstehen leider nicht wieso nun der Testcode überhaupt nicht 
ausgeführt wird. Meines Erachtens nach müsste dieser ja im Hauptcode wie 
dort aufgezeigt genau so funktionieren wie in der test.ino alleine.


Ich hoffe das es verständlich erklärt wurde. Ich bin kein Experte in 
solchen Sachen und wollte jetzt nicht direkt den gesamten Code hier 
posten.


Mit freundlichen Grüßen
Belgariad_89
#6002800
Lesenswert?

Bitte poste beim nächsten Mal den Code, den Du auch dem Compiler zum 
Futtern gibst. Also .ino 1:1 anhängen. Außerdem werden dann Deine 
Exzesse nicht so umfangreich.
Sehr oft wird vom TO der Code nach eigenem Gusto, verkürzt, übergeben, 
was dann ein paar interessante Fehler unsichtbar macht.

Der von Dir übergebene Code sollte eigentlich Fehlermeldungen noch und 
nöcher produzieren.

Übrigens: Kommentare entweder mit "//" (Einzeilig) oder mit "/*" 
beginnen und mit "*/" abschließen. Durch so einfache Fehler kann man 
sehr interessante Fehlermeldungen produzieren.
Die zweite Form gibt es schon seit Anno "K&R".
OP #6002916
Lesenswert?

Den Beitrag von Peter D habe ich eben auch gelesen, nachdem ich die 
Dateien hinzugefügt hatte. Habe ich eben natürlich auch ausprobiert, 
jedoch keine Veränderung. Der Schriftzug "Warte auf Anrufe" erscheint im 
seriellen Monitor jedoch nicht mehr.
Ich frage mich halt wo der Unterschied ist zwischen dem reinen Testcode 
und dem Hauptcode mit Testcode.

Der reine Aufbau ist ja der gleiche und der Rest des Codes ist ja 
auskommentiert (auch mit #if 0 .. #endif)
Angehängte Dateien:
#6002925
Lesenswert?

Arduino IDE ist auch etwas sonderbar. Diese 'ino's, werden ja nur in ein 
'main.c' inkludiert. Das Ganze verschleiert das normale Bauen eines 
Binaries ziemlich.
Kann es sein daß du zwei 'ino's hast, aber nur das mit dem Namen des 
Projekts inkludiert wird ? Irgendsowas in die Richtung falscher 
Dateiname, doppelte Dateien wo nur eine sein sollte ? Weil pro Projekt 
gibt es doweit ich mich erinnere nur eine INO.
(Firma: Flk Consulting UG) #6003002
Lesenswert?

Chri Z. schrieb:
> Oder habe ich deine Anmerkung falsch verstanden?

Nein, das hast Du schon richtig verstanden. Wenn keine Ausgabe von 
"Eingehender Anruf" erfolgt, bedeutet dies, dass die Bedingung
1
if (statanruf == 1)
 nicht erfüllt wird.

Es stellt sich also die Frage, wird die Anweisung
1
if (incoming_char=='G') {
2
              delay(10);
3
              Serial.println(incoming_char);
4
              // If the message received from the shield is RING
5
              // Send ATA commands to answer the phone
6
              statanruf =1;
7
              
8
}
erreicht.

Gruß
Frank
OP #6003010
Lesenswert?

Ja das wird sie. Das habe ich ja in dem reinen Testcode so probiert. 
Dort funktioniert ja auch alles so wie es soll. Halt nur nicht im 
Hauptcode. Was mich stutzig macht, da ja (egal auf welche weise) der 
restliche Hauptcode ausgekommentiert ist.
Dann ist es doch der gleiche Aufbau wie im Testcode.

Ein paar Beiträge höher sind die ino´s zum vergleichen angehängt.
Gast #6003061
Lesenswert?

Chri Z. schrieb:
> Dann ist es doch der gleiche Aufbau wie im Testcode.

...nicht ganz! in deinem Hauptprogramm gibt es noch diese Zeilen im 
setup():
1
  if (gsm.begin(4800)){
2
  Serial.println("\nstatus=READY"); 
3
  }
4
  else Serial.println("\nstatus=IDLE");

Kommt denn noch eine der beiden Ausgaben auf deinem seriellen Terminal?
(Firma: Flk Consulting UG) #6003156
Lesenswert?

Hallo,

entferne mal aus dem File "Hauptcode_mit_Testcode.ino" den Code
1
if (gsm.begin(4800)){
2
  Serial.println("\nstatus=READY"); 
3
  }
4
  else Serial.println("\nstatus=IDLE");

hier initialisierst Du das Teil zweimal.

Wobei mir eins nicht klar ist, Du sagst, das File "test.ino" läuft so 
wie der Code abgebildet ist. Im File "Hauptcode_mit_Testcode.ino" 
inkludierst Du aber noch das File #include <SIM900.h> das fehlt im File 
"test.ino".

Irgendetwas passt da ganz und gar nicht zusammen.

Gruß
Frank
(Firma: Flk Consulting UG) #6003273
Lesenswert?

Hallo,

auf die Gefahr hin mich zu wiederholen:

1. Gibt das File "Hauptcode_mit_Testcode_2.ino" irgendeine Meldung auf 
dem Terminal per println etwas aus?
2. Gibt das File "test.ino" etwas m Terminal aus?

Wenn nicht, kommentiere im File "Hauptcode_mit_Testcode_2.ino" mal die 
folgenden Zeilen aus:
1
#include <GSM.h>
2
#include <call.h>
3
#define MIT
4

5
pinMode(analogeingang, INPUT);       
6

7
Serial.println(analogRead(0)); 
8

9
tart_Verzoegerung = millis();

Hast Du mal geprüft, welche Infos beim Hochladen des Files 
"Hauptcode_mit_Testcode_2.ino" auf den Arduino in der IDE angezeigt 
werden. Mach davon mal bitte einen Screenshot.

Gruß
Frank
OP #6003321
Lesenswert?

Fehler gefunden!!!
Vielen Dank an Frank L. Es lag an:

if (gsm.begin(4800)){
  Serial.println("\nstatus=READY");
  }
  else Serial.println("\nstatus=IDLE");


sobald dieses nicht mehr im Code auftaucht läuft es. Ich dachte das wäre 
nur zum kontrollieren ob alles i.O. ist.
Die Anruffunktion klappte ja auch schon es ging nur um das annehmen.


Vielen Dank auch nochmal an das Forum für die vielen Bemühungen und 
Antworten.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren