Forum: Mikrocontroller und Digitale Elektronik SMS Versand bei Änderung eines Zustands


von Mario H. (iihoffyii)


Angehängte Dateien:

Lesenswert?

Guten Tag,

ich würde gerne versuchen eine SMS zu versenden sobald ein gewisser 
Zustand eintritt. Um einen Test zu starten lege ich einfach 5V auf drei 
digitale Eingänge des Arduinos um so die Zustände 1 und 0 zu erreichen.
Sobald ich nun einen Draht löse und somit den Zustand 0 erreiche würde 
ich gerne eine SMS versenden, allerdings habe ich in meinem Gedankengang 
bzw. in meinem Quellcode einen Fehler den ich übersehe, denn wenn ich 
den Draht löse passiert nicht sonderlich viel.
Über vorherige Programme habe ich getestet ob der Versand der SMS 
funktioniert, auch die Drähte usw. sind alle einwandfrei.

Verzeiht mir das umständliche programmieren...

Über eure Hilfe würde ich mich sehr freuen.

Microcontroller Arduino Mega + GPRS/GPS/GSM Shield
1
int result;
2
int Draht1 = 22;                               
3
int Draht2 = 24;                                
4
int Draht3 = 26;                                
5
int Zustand1;                                   
6
int Zustand2;
7
int Zustand3;
8
9
#include <gsm_gprs_gps_mega.h>
10
#include <SPI.h>
11
12
void setup()
13
{
14
  pinMode(Draht1, INPUT);                        
15
  pinMode(Draht2, INPUT);
16
  pinMode(Draht3, INPUT);
17
  
18
      GSM.begin(); 
19
}
20
21
void loop()
22
{       
23
  if(Zustand1 == 0)
24
  
25
  result = GSM.initialize("xxxx");                                   
26
  if(result == 0)                                                   
27
  {
28
    Serial.print  ("ME Init error: >");                            
29
    Serial.print  (GSM.GSM_string);                                 
30
    Serial.println("<");
31
  }
32
  
33
  result = GSM.sendSMS("+49160xxxxxxx","A1");          
34
  Zustand1 = digitalRead(Draht1); 
35
    
36
  if(result == 0)                                                  
37
  {
38
    Serial.print  ("SMS sending error: >");                          
39
    Serial.print  (GSM.GSM_string);                                  
40
    Serial.println("<");
41
  }                    
42
}
43
44
45
  if(Zustand2 == 0)
46
  {
47
  
48
  result = GSM.initialize("xxxx");                                   
49
  if(result == 0)                                                    
50
  {
51
    Serial.print  ("ME Init error: >");                              
52
    Serial.print  (GSM.GSM_string);                                  
53
    Serial.println("<");
54
  }
55
  
56
  result = GSM.sendSMS("+49160xxxxxxx","A2");           
57
  Zustand2 = digitalRead(Draht2); 
58
    
59
  if(result == 0)                                                 
60
  {
61
    Serial.print  ("SMS sending error: >");                         
62
    Serial.print  (GSM.GSM_string);                                  
63
    Serial.println("<");
64
  }
65
                      
66
}
67
68
  if(Zustand3 == 0)
69
  {
70
  
71
  result = GSM.initialize("xxxx");                                   
72
  if(result == 0)                                                    
73
  {
74
    Serial.print  ("ME Init error: >");                             
75
    Serial.print  (GSM.GSM_string);                                  
76
    Serial.println("<");
77
  }
78
  
79
  result = GSM.sendSMS("+49160xxxxxxx","A3");           
80
  Zustand3 = digitalRead(Draht3); 
81
    
82
  if(result == 0)                                                  
83
  {
84
    Serial.print  ("SMS sending error: >");                          
85
    Serial.print  (GSM.GSM_string);                                 
86
    Serial.println("<");
87
  }
88
                    
89
}
90
}

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Bitte das nächste Mal selber machen. Steht ein paar Zeilen über dem 
Eingabefenster:
1
Formatierung (mehr Informationen...)
2
    [c]C-Code[/c]

von Helfer (Gast)


Lesenswert?

Hallo Mario,
hast du oben wirklich deinen Code gezeigt, den du in den Controller 
geschrieben hast?
Ich bezweifel das grade stark, denn nach

Mario H. schrieb:
> void loop()
> {
>   if(Zustand1 == 0)
>
>   result = GSM.initialize("xxxx");
>   if(result == 0)
>   {
>     Serial.print  ("ME Init error: >");
>     Serial.print  (GSM.GSM_string);
>     Serial.println("<");
>   }
>
>   result = GSM.sendSMS("+49160xxxxxxx","A1");
>   Zustand1 = digitalRead(Draht1);
>
>   if(result == 0)
>   {
>     Serial.print  ("SMS sending error: >");
>     Serial.print  (GSM.GSM_string);
>     Serial.println("<");
>   }
> }

ist deine loop bereits zu Ende und der restliche Code steht in der 
Gegend rum.

Auch verstehe ich deine Abfragen nicht so ganz. Du fragst deine Variable 
Zustand zweimal auf Null ab, änderst sie aber nur an einer Stelle. 
Willst bei den beiden if-Abfragen wirklich immer nur wissen, ob dein GSM 
bereits initialisiert hat? Dann schreibe doch beide zusammen in eine 
If-Abfrage.

Du solltest alles in allem erstaml deinen Code sauber einrücken (nach 
jeder geschweiften Klammer auf einmal einrücken, bei jeder geschweiften 
zu wieder eine Ebene nach oben), das ganze dann nocheinmal testen und 
wenn es dann immer noch nicht so funktioniert, wie du dir das vorstellst 
den neuen Code hier nocheinmal posten, zusammen mit einer genauen 
Beschreibung, was du dir denkst, was das Programm eigentlich tun soll.

Gruß Helfer

von Alexander S. (esko) Benutzerseite


Lesenswert?

Mario H. schrieb:
> Um einen Test zu starten lege ich einfach 5V auf drei
> digitale Eingänge des Arduinos um so die Zustände 1 und 0 zu erreichen.
> Sobald ich nun einen Draht löse und somit den Zustand 0 erreiche

Du brauchst am Eingang einen definierten Zustand, also entweder auf +5 V 
legen oder auf 0 Volt.

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.