Forum: Mikrocontroller und Digitale Elektronik Probleme TC35 & Arduino Mega


von Mario I. (mario_i)


Angehängte Dateien:

Lesenswert?

Hallo,

ich hab ein kleines Problem mit mein Programm...
Ich möchte mir gerne eine SMS senden wenn mein verwendeter Lichtsensor 
ein bestimmten Wert erreicht hat... Leider funktioniert es nicht.
Wenn ich nur ein Programm auf mein Arduino lade was den Sensor 
auswertet, funktioniert es ohne Probleme. Auch wenn ich ein Programm 
lade das mir nur eine SMS schicken soll funktioniert es auch ohne 
Probleme.
Wenn ich die Programme aber, wie angehängt, "miteinander verknüpfe", 
bekomme ich keine SMS. Das Modul (TC35) bucht sich noch nicht einmal 
mehr ein. Ich hab auch schon einen größeren Kondensator verbaut, da ich 
gelesen habe das es da gerne zu Problemen kommt. Auch ein vernünftiges 
Netzteil habe ich besorgt (5V, 2.5A Ausgang)...
Langsam weiß ich mir keinen Rat mehr und hoffe auf Eure Hilfe... Hab ich 
da was falsches Programmiert??

Vielen Dank im voraus
Mario

von PittyJ (Gast)


Lesenswert?

Standardmethode: mai ein paar printf's einbauen?

von Stefan F. (Gast)


Lesenswert?

Gib mal die ganzen AT Befehl auf einem Display oder Terminal aus und 
schau dann, ob das Programm sich (ohne Modem) wie erwartet verhält.

von Jürgen S. (jurs)


Lesenswert?

Mario I. schrieb:
> Hab ich da was falsches Programmiert??

So auf den ersten Blick stufe ich Dein Programm auf irgendwas zwischen 
"hanebüchener Schwachsinn" bis "bedenklich" ein.

Das Prädikat "bedenklich" verteile ich, wenn der Code für ein "Leonardo" 
oder "Micro" Board sein soll.

Das Prädikat "hanebüchener Schwachsinn" erfüllt der Code für Boards wie 
UNO, MEGA, MINI PRO, NANO und vergleichbare.

So ganz möchte ich mich nicht festlegen, ohne das Board zu wissen, für 
das der Code verwendet werden soll.

von Mario I. (mario_i)


Lesenswert?

Danke für die Hinweise...

Ich habe festgestellt wenn ich im Setup die Zeile "Serial.begin(9600);" 
auskommentiere, bekomme ich die SMS wenn der Sensor den Wert erreicht. 
Aber wenn ich ihn nicht initialisiere, wie bekommt er denn die werte und 
wie kann ich das überprüfen??

Danke...
Bin erst am Anfang meiner "Programmier Karriere"

von Mario I. (mario_i)


Lesenswert?

@Jürgen S.

würde gern "bedenklich" bzw "hanebüchener Schwachsinn" gegen fachwissen 
tauschen.

ich stecke noch ganz in den kinderschuhen was das programmieren angeht. 
das programm stellt nur ein test bzw einen anfang da, um zu probieren 
was man mit den gps modul alles machen kann...
wie müsste man deiner meinung nach das programm umschreiben?? (final 
möchte ich damit später ein garagentor steuern... es handelt sich um ein 
arduino mega board)

von Jürgen S. (jurs)


Lesenswert?

Mario I. schrieb:
> es handelt sich um ein arduino mega board

Beim MEGA Board bilden Pin-0 und -1 die serielle Schnittstelle "Serial".

Der hanebüchene Schwachsinn liegt darin: Du kannst an denselben Pins auf 
dem Board nicht noch eine zweite "SoftwareSerial" Schnittstelle 
definieren. Das beißt sich bis hin zum Kurzschluss auf den seriellen 
Leitungen, wenn Du Dein GSM-Modul da anschließt und den Sketch so laufen 
läßt.


Auf einem MEGA-Board lasse SoftwareSerial weg und nimm stattdessen eine 
der drei übrigen HardwareSerial-Schnittstellen, die auf dem MEGA 
vorhanden sind, z.B. Serial1. Pins für Serial1 siehe RX1/TX1 auf dem 
Board.

Dein Programm umgeschrieben auf Serial1 würde dann so aussehen:
1
// für Arduino MEGA-Board
2
int ledPin=13;
3
int sensorwert=0;
4
int i=0;
5
6
void setup()
7
{
8
  Serial.begin(9600);    // "Serieller Monitor" auf dem PC
9
  Serial1.begin(19200);  // verbunden mit GSM-Modem
10
  delay(2000);
11
  pinMode(ledPin,OUTPUT);
12
}
13
14
void loop()
15
{
16
  sensorwert = analogRead (A0);
17
  Serial.println(sensorwert);
18
  
19
  if(sensorwert >= 800 && i == 0)
20
  {
21
    sendTextMessage();
22
    i=1;
23
  }
24
  delay(4000);
25
}
26
void sendTextMessage()
27
{
28
  Serial1.print("AT+CPIN=xxxx\r");
29
  delay (6000);
30
  
31
  Serial1.print("AT+CMGF=1\r");
32
  delay(4000);
33
  
34
  Serial1.print("AT+CMGS=0179xxxxxxx\r");
35
  delay(4000);
36
  digitalWrite(ledPin,HIGH);      //nur zur kontrolle ob programm in fkt springt
37
  Serial1.print("Licht ist an!");
38
  delay(100);
39
  Serial1.print((char)26);
40
  delay (4000);
41
}

Keine Ahnung, ob das funktioniert. Aber der hanebüchene Schwachsinn, mit 
der Kurzschluss-Doppelbelegung von Pin-0 und -1 ist schon mal weg.

Und der "serielle Monitor" ist dann auch funktionstüchtig, z.B. um 
Debug-Ausgaben über Serial zum PC zu senden.

P.S.: Wenn Du in der loop alle ca. zweiundzwanzig Sekunden eine SMS 
senden möchtest, weil ein Wert überschritten ist, brauchst Du eine 
SMS-Flat, sonst wird es teuer!

von Mario I. (mario_i)


Lesenswert?

Vielen Dank für die schnelle Antwort!!
Ich werde es Morgen sofort probieren!!
Das könnte es gewesen sein. Sorry für meine Anfängerfehler...
Und, das Programm schickt nur eine sms wenn der Wert erstmalig 
überschritten wird, da i auf 1 gesetzt wird in der if abfrage wenn eine 
sms geschickt wird. ich weiß, ist auch quatsch, aber es dient nur zum 
austesten...
danke nochmal!!

von Jürgen S. (jurs)


Lesenswert?

Mario I. schrieb:
> Und, das Programm schickt nur eine sms wenn der Wert erstmalig
> überschritten wird, da i auf 1 gesetzt wird in der if abfrage wenn eine
> sms geschickt wird.

Verstehe, also einmalig nach jedem Reset.

Allerdings solltest Du berücksichtigen, dass das Board jedesmal nach dem 
Power-On, nach dem Hochladen eines Sketches und jedesmal beim Öffnen des 
Seriellen Monitors ein Reset macht.

von Mario I. (mario_i)


Lesenswert?

@Jürgen S.

vielen Dank!!
Genau das war das Problem! Jetzt funktioniert es wie es soll...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.