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
Christian Z. schrieb:> Ich versuche das hier einmal aufzuzeigen:
So bitte nicht!
Nachvollziehbaren Minimalcode bringen, sonst hilft das nichts.
Das Problem sitzt vor deinem Bildschirm, das sieht man schon
an der Überschrift des Threads.
Hey das ging ja schneller als gedacht.
Ja das habe ich mir schon gedacht. Werde das fix was basteln und hier
hochladen.
Danke schon mal für die schnelle Reaktionszeit
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".
Chri Z. schrieb:> Danke schon mal für die schnelle Reaktionszeit
Schnelle Reaktionszeit heißt: kleines d/dt(Reaktionszeit).
Was soll das für eine Größe sein.
Das ist wie "warme Temperaturen" - als ob man von einer Temperatur die
Temperatur messen könnte.
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)
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.
Ich habe der Variable extra erst nach dem "G" den Wert 1 zugewiesen,
damit ich im seriellen Monitor den Schriftzug RING stehen habe.
Mit der 1 will ich nur einen Vergleichswert für die if-Anweisung direkt
danach haben.
Oder habe ich deine Anmerkung falsch verstanden?
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
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.
Chri Z. schrieb:> Ja das wird sie. Das habe ich ja in dem reinen Testcode so probiert.
Das mag ja sein, dass es in Deinem Testcode so funktioniert. Die Frage
ist, passiert das auch in Deinem Code "Hauptcode_mit_Testcode_2.ino"?
Zeig doch mal Deine Debugausgaben für diesen Code.
Gruß
Frank
50c schrieb:> Kommt denn noch eine der beiden Ausgaben auf deinem seriellen Terminal?
Ja davon erscheint die Ready Aussage. Aber auch wenn dieses weggelassen
wird funktioniert es nicht. Es scheint so als wenn er die if-Anweisung
if(SIM900.available() >0) ihm keine Rückmeldung gibt.
@ Frank L
Wie kann ich denn die Debugausgaben erzeugen?
Chri Z. schrieb:> Wie kann ich denn die Debugausgaben erzeugen?
Damit meinte ich die Ausgabe auf Deinem seriellen Terminal.
Also alles was Du mit Serial.println ausgibst.
Gruß
Frank
Da gibt er mir nichts aus. Nichteinmal das RING, welches bei einem
eingehenden Anruf vom Modul geschickt wird. Daher wird ja auch nicht
"statanruf" auf 1 gesetzt
Das der Anruf eingeht, erkenne ich aber anhand von LEDs auf der Platine
vom Modul sowie auch anhand des Klingeln über den Kopfhörer
Hallo,
entferne mal aus dem File "Hauptcode_mit_Testcode.ino" den Code
1
if(gsm.begin(4800)){
2
Serial.println("\nstatus=READY");
3
}
4
elseSerial.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
habe ich geändert, leider ohne Erfolg. Habe auch die test.ino nochmal
angepasst. Habe dort die SIM900.h nun ebenfalls inkludiert und die
Variable statanruf wird wieder auf 0 gesetzt nach dem Auflegen
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
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.