Forum: Mikrocontroller und Digitale Elektronik Nur Errors vom siemens TC35


von Bert (Gast)


Lesenswert?

Hallo

hab vor mein Sainsmart TC35 mit einem Mikrocontroller zu verwenden um 
dann per SMS den Status des Controllers auszulesen.

Um vorab das GSM-Modul ein wenig kennen zulernen betreibe ich es am PC 
über die RS232 Schnittstelle. Betrieben wird das Modul mit einem 
Schaltnetzteil mit einem Ausgangsstrom von 2,3 A. Zusätzlich hab ich um 
die Spannung zu stabilisieren(hab ich vorab gelesen, dass es beim 
sainsmart Modul von Vorteil wäre), zwei Elkos mit jeweils 1000mikroF an 
das Board gelötet.

Soweit wählt sich das Modul ein. Das Modul Anrufen geht auch, wird in 
Hercules(Terminal) mit Ring angezeigt, nur mit den AT-Befehlen scheint 
es nicht zu funktionieren. Egal was ich sende, erhalte ich immer nur ein 
Error. Hab Commandos gebraucht wie ATI, AT+CMGF? etc keine Reaktion bis 
auf das Error.

Hatte jemand von euch ähnliche Probleme und weiß was ich verkehrt mache?

Achja die Baudrate beträgt 9600. wobei ich Sicherheitshalber mehrer 
Baudraten ausprobiert hab

vielen Dank für die Zeit

von Bert (Gast)


Lesenswert?

Ok hab jetzt eine Lösung für das Problem gefunden. Am Ende jedes 
Kommandos muss man noch EOL chars dranhängen, dann läufts :)

von Holger Z. (boomboommagic)


Lesenswert?

Is nen bissel wenig Erklärung wie Dein Code aussieht und was Du 
programmiert hast um sagen zu können wo Dein Problem liegt.

Hier mein Code für eine SMS Auswertung mit Signalstärkeanzeige und einem 
Display 16x2
Es wird auf SMS gewartet mit der man 8 Ausgänge schalten kann , .... ist 
aber nicht so wichtig , Dir gehts ja nur um's Prinzip wie man 
Kommuniziert und SMS ausliest :-)



1
$regfile = "m32def.dat"
2
$crystal = 8000000
3
4
$hwstack = 100
5
$swstack = 100
6
$framesize = 100
7
$baud = 19200
8
9
Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.4 , Db6 = Portd.3 , Db7 = Portd.2 , E = Portd.6 , Rs = Portd.7
10
Config Lcd = 16 * 2 
11
Cls
12
Cursor Off
13
14
Config Serialin = Buffered , Size = 160 , Bytematch = 13
15
Config Serialout = Buffered , Size = 160
16
17
18
Config Portb.0 = Output                                     '  Displaybeleuchtung
19
Config Portb.1 = Output                                     '  IGT
20
21
Config Porta.0 = Output                                     '  Relais 1
22
Config Porta.1 = Output                                     '  Relais 2
23
Config Porta.2 = Output                                     '  Relais 3
24
Config Porta.3 = Output                                     '  Relais 4
25
Config Porta.4 = Output                                     '  Relais 5
26
Config Porta.5 = Output                                     '  Relais 6
27
Config Porta.6 = Output                                     '  Relais 7
28
Config Porta.7 = Output                                     '  Relais 8
29
Relais1 Alias Porta.0
30
Relais2 Alias Porta.1
31
Relais3 Alias Porta.2
32
Relais4 Alias Porta.3
33
Relais5 Alias Porta.4
34
Relais6 Alias Porta.5
35
Relais7 Alias Porta.6
36
Relais8 Alias Porta.7
37
Porta = 0
38
39
Config Portc.0 = Input                                      '   rauf
40
Config Portc.1 = Input                                      '   runter
41
Config Portc.2 = Input                                      '   O K
42
43
Deflcdchar 1 , 31 , 16 , 16 , 16 , 16 , 16 , 16 , 31
44
Deflcdchar 2 , 31 , 24 , 24 , 24 , 24 , 24 , 24 , 31
45
Deflcdchar 3 , 31 , 28 , 28 , 28 , 28 , 28 , 28 , 31
46
Deflcdchar 4 , 31 , 30 , 30 , 30 , 30 , 30 , 30 , 31
47
Deflcdchar 5 , 31 , 31 , 31 , 31 , 31 , 31 , 31 , 31
48
Deflcdchar 6 , 31 , 32 , 32 , 32 , 32 , 32 , 32 , 31
49
Deflcdchar 7 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16
50
51
Cls
52
53
Dim Gsm_daten As String * 160
54
Dim Gsm_text As String * 150
55
Dim Rueckmelde_text As String * 160
56
Dim Ascii_byte As Byte
57
Dim Ascii As String * 1
58
Dim Ok As Byte
59
Dim Ok1 As Byte
60
Dim Ok3 As Byte
61
Dim Ok2 As Word
62
Dim W As Byte
63
Dim Pos1 As Byte
64
Dim Pos2 As Byte
65
Dim Pos3 As Byte
66
Dim Anrufer As String * 16
67
Dim Befehl As String * 50
68
Dim Text1 As String * 50
69
Dim An As String * 10
70
Dim Aus As String * 10
71
Dim Menge As Byte
72
Dim Systemcode(4) As Eram Byte
73
Dim Syscode(4) As Byte
74
Dim Usercode(4) As Byte
75
Dim Pin As String * 16
76
Dim Pin1 As Byte
77
Dim Pin2 As Byte
78
Dim Pin3 As Byte
79
Dim Pin4 As Byte
80
Dim Userpin1 As Eram Byte
81
Dim Userpin2 As Eram Byte
82
Dim Userpin3 As Eram Byte
83
Dim Userpin4 As Eram Byte
84
Dim Schaltzeit As Word
85
Dim Sms_nummer As Byte
86
Dim Verbindungskontrolle As Byte
87
Dim Sms_msg As Byte
88
Dim Zaehler As Word
89
Dim Str_signal As String * 9
90
Dim Str_Signal_Symbol As String * 9
91
Dim Signalstaerke_merken As Byte
92
Dim Signalstaerke As Byte
93
94
95
96
Declare Sub Serial0charmatch()
97
Declare Sub Gsm_reset()
98
Declare Sub Gsm_lokal_echo_off()
99
Declare Sub Gsm_initialisieren()
100
Declare Sub Pineingabe()
101
Declare Sub Pin_eingeben()
102
Declare Sub Sms_loeschen()
103
Declare Sub Ereignismeldung_einstellen()
104
Declare Sub Sms_textmodus_aktivieren()
105
Declare Sub Warte_auf_meldung()
106
Declare Sub Abbruch()
107
Declare Sub Sms_auswerten()
108
Declare Sub Sende_rueckmeldung()
109
110
' ----- Voreinstellungen -------
111
112
Portc.0 = 1                                                 ' Taster
113
Portc.1 = 1                                                 ' Taster
114
Portc.2 = 1                                                 ' Taster
115
'Portb.0 = 0       ' Display AUS
116
Verbindungskontrolle = 0
117
Signalstaerke_merken = 99
118
119
Enable Interrupts
120
Portb.0 = 1                                                 ' Display AN
121
Zaehler = 1
122
Str_signal = chr(1) + chr(6) + chr(6) + chr(6) + chr(6) + chr(6) + chr(6) + chr(7)
123
124
Call Gsm_initialisieren
125
126
'###################  Hauptschleife ###################
127
Do
128
129
  ' Wenn SMS reinkommt
130
  If Instr(1 , Gsm_daten , "+CMTI:") > 0 Then
131
     Ok = Instr(1 , Gsm_daten , "SM")
132
     Ok = Ok + 4
133
     Ascii = Mid(gsm_daten , Ok , 1)
134
     Sms_nummer = Val(ascii)
135
     Gsm_daten = ""
136
     Call Sms_auswerten()
137
     Zaehler = 0
138
  End If
139
140
  ' Wenn Verbindung verloren
141
  If Instr(1 , Gsm_daten , "CREG: 2") > 0 And Verbindungskontrolle = 0 Then
142
     Gsm_daten = ""
143
     Verbindungskontrolle = 1
144
     Locate 2 , 1
145
     Lcd " Kein Signal !! "
146
  End If
147
148
  ' Wenn Verbindung wieder da
149
  If Instr(1 , Gsm_daten , "CREG: 1") > 0 And Verbindungskontrolle = 1 Then
150
     Gsm_daten = ""
151
     Verbindungskontrolle = 0
152
     Locate 2 , 1
153
     Lcd " Warte auf SMS  "
154
  End If
155
156
  ' Wenn Antwort vom Empfangspegel-Anforderung
157
  If Instr(1 , Gsm_daten , "+CSQ:") > 0 Then
158
     Gosub Signal_auswerten
159
  End If
160
161
  Incr Zaehler
162
  If Zaehler >= 32000 Then
163
      ' Fordere Empfangspegel an
164
      Print "AT+CSQ"
165
      Zaehler = 0
166
  End If
167
168
Loop
169
End
170
'######################################################
171
172
173
174
175
Sub Serial0charmatch()
176
   Input Gsm_daten Noecho
177
   Zaehler = 0
178
End Sub
179
'
180
'
181
Sub Gsm_initialisieren()
182
    Call Gsm_reset()
183
    Call Gsm_lokal_echo_off()
184
    Call Pineingabe()
185
    Call Sms_loeschen()
186
    Call Ereignismeldung_einstellen()
187
    Call Sms_textmodus_aktivieren()
188
    Call Warte_auf_meldung()
189
End Sub
190
'
191
'
192
Sub Gsm_reset()
193
   Gsm_daten = ""
194
   Cls
195
   Locate 1 , 1
196
   Lcd "starte GSM-Modul"
197
   Locate 2 , 1
198
   Lcd "   STAND - BY   "
199
200
   ' -- Aktivierungsimpuls an GSM-Modul senden ---
201
   Toggle Portb.1
202
   Wait 1
203
   Toggle Portb.1
204
205
   Do
206
     If Instr(1 , Gsm_daten , "CREG: 0") > 0 Then
207
        Exit Do
208
     End If
209
   Loop
210
211
   Locate 2 , 1
212
   Lcd "GSM Modul bereit"
213
   Wait 1
214
End Sub
215
'
216
'
217
Sub Gsm_lokal_echo_off()
218
 Gsm_daten = ""
219
 Locate 1 , 1
220
 Lcd "  lokales Echo  "
221
 Locate 2 , 1
222
 Lcd "deaktivieren    "
223
 Wait 1
224
 Print "ATE0"
225
226
 Do
227
   If Instr(1 , Gsm_daten , "OK") > 0 Then
228
      Exit Do
229
   End If
230
 Loop
231
232
 Locate 2 , 15
233
 Lcd "OK"
234
 Wait 1
235
End Sub
236
'
237
'
238
Sub Pineingabe()
239
 Gsm_daten = ""
240
 Locate 1 , 1
241
 Lcd "  PIN eingeben  "
242
 Locate 2 , 1
243
 Lcd "                "
244
 Wait 1
245
246
 Pin1 = Userpin1
247
 Pin2 = Userpin2
248
 Pin3 = Userpin3
249
 Pin4 = Userpin4
250
251
 If Pin1 = 0 And Pin2 = 0 And Pin3 = 0 And Pin4 = 0 Then
252
  Call Pin_eingeben()
253
 End If
254
255
 Pin = ""
256
 Pin = Str(pin1)
257
 Pin = Pin + Str(pin2)
258
 Pin = Pin + Str(pin3)
259
 Pin = Pin + Str(pin4)
260
261
 Locate 2 , 1
262
 Lcd "-PIN hinterlegt-"
263
 Wait 1
264
 Locate 2 , 1
265
 Lcd "Pruefe PIN .... "
266
 Wait 1
267
268
 Print "AT+CPIN=" ; Pin
269
270
271
 Do
272
   If Instr(1 , Gsm_daten , "CREG: 1") > 0 Then
273
      Exit Do
274
   End If
275
 Loop
276
277
278
 Locate 2 , 1
279
 Lcd "PIN akzeptiert  "
280
 Wait 1
281
282
End Sub
283
'
284
'
285
Sub Pin_eingeben()
286
287
   Pin1 = 0
288
   Pin2 = 0
289
   Pin3 = 0
290
   Pin4 = 0
291
292
   Locate 2 , 1
293
   Lcd "PIN => " ; Pin1 ; "          "
294
295
   '##################################
296
   ' 1. Stelle vom PIN
297
   Do
298
    If Pinc.0 = 0 Then
299
       Do
300
       Loop Until Pinc.0 = 1
301
       Waitms 200
302
       If Pin1 < 9 Then
303
          Incr Pin1
304
          Locate 2 , 8
305
          Lcd Pin1
306
       End If
307
    End If
308
    '-----------------------
309
    If Pinc.1 = 0 Then
310
       Do
311
       Loop Until Pinc.1 = 1
312
       Waitms 200
313
       If Pin1 > 0 Then
314
          Decr Pin1
315
          Locate 2 , 8
316
          Lcd Pin1
317
       End If
318
    End If
319
    '-----------------------
320
    If Pinc.2 = 0 Then
321
       Do
322
       Loop Until Pinc.2 = 1
323
       Waitms 200
324
       Exit Do
325
    End If
326
   Loop
327
   '##################################
328
   Locate 2 , 9
329
   Lcd Pin2 ; "          "
330
   ' 2. Stelle vom PIN
331
   Do
332
    If Pinc.0 = 0 Then
333
       Do
334
       Loop Until Pinc.0 = 1
335
       Waitms 200
336
       If Pin2 < 9 Then
337
          Incr Pin2
338
          Locate 2 , 9
339
          Lcd Pin2
340
       End If
341
    End If
342
    '-----------------------
343
    If Pinc.1 = 0 Then
344
       Do
345
       Loop Until Pinc.1 = 1
346
       Waitms 200
347
       If Pin2 > 0 Then
348
          Decr Pin2
349
          Locate 2 , 9
350
          Lcd Pin2
351
       End If
352
    End If
353
    '-----------------------
354
    If Pinc.2 = 0 Then
355
       Do
356
       Loop Until Pinc.2 = 1
357
       Waitms 200
358
       Exit Do
359
    End If
360
   Loop
361
   '##################################
362
   Locate 2 , 10
363
   Lcd Pin3 ; "          "
364
   ' 3. Stelle vom PIN
365
   Do
366
    If Pinc.0 = 0 Then
367
       Do
368
       Loop Until Pinc.0 = 1
369
       Waitms 200
370
       If Pin3 < 9 Then
371
          Incr Pin3
372
          Locate 2 , 10
373
          Lcd Pin3
374
       End If
375
    End If
376
    '-----------------------
377
    If Pinc.1 = 0 Then
378
       Do
379
       Loop Until Pinc.1 = 1
380
       Waitms 200
381
       If Pin3 > 0 Then
382
          Decr Pin3
383
          Locate 2 , 10
384
          Lcd Pin3
385
       End If
386
    End If
387
    '-----------------------
388
    If Pinc.2 = 0 Then
389
       Do
390
       Loop Until Pinc.2 = 1
391
       Waitms 200
392
       Exit Do
393
    End If
394
   Loop
395
   '##################################
396
397
   Locate 2 , 11
398
   Lcd Pin4 ; "          "
399
   ' 4. Stelle vom PIN
400
   Do
401
    If Pinc.0 = 0 Then
402
       Do
403
       Loop Until Pinc.0 = 1
404
       Waitms 200
405
       If Pin4 < 9 Then
406
          Incr Pin4
407
          Locate 2 , 11
408
          Lcd Pin4
409
       End If
410
    End If
411
    '-----------------------
412
    If Pinc.1 = 0 Then
413
       Do
414
       Loop Until Pinc.1 = 1
415
       Waitms 200
416
       If Pin4 > 0 Then
417
          Decr Pin4
418
          Locate 2 , 11
419
          Lcd Pin4
420
       End If
421
    End If
422
    '-----------------------
423
    If Pinc.2 = 0 Then
424
       Do
425
       Loop Until Pinc.2 = 1
426
       Waitms 200
427
       Exit Do
428
    End If
429
   Loop
430
   '##################################
431
432
   Pin = ""
433
   Pin = Str(pin1)
434
   Pin = Pin + Str(pin2)
435
   Pin = Pin + Str(pin3)
436
   Pin = Pin + Str(pin4)
437
   Userpin1 = Pin1
438
   Userpin2 = Pin2
439
   Userpin3 = Pin3
440
   Userpin4 = Pin4
441
442
End Sub
443
'
444
'
445
Sub Sms_loeschen()
446
447
 Gsm_daten = ""
448
 Locate 1 , 1
449
 Lcd " SMS loeschen   "
450
 Locate 2 , 1
451
 Lcd "bitte warten ..."
452
453
 Print "AT+CMGD=4"
454
 Do
455
    If Instr(1 , Gsm_daten , "OK") > 0 Then
456
        Exit Do
457
    End If
458
 Loop
459
460
 Locate 2 , 1
461
 Lcd "OK-Speicher frei"
462
463
End Sub
464
'
465
'
466
Sub Ereignismeldung_einstellen()
467
 Gsm_daten = ""
468
469
 Locate 1 , 1
470
 Lcd "Ereignismeldung "
471
 Locate 2 , 1
472
 Lcd "einstellen . . ."
473
 Wait 1
474
475
 Print "AT+CNMI=3,1,2,2,1"
476
477
 Do
478
   If Instr(1 , Gsm_daten , "OK") > 0 Then
479
      Exit Do
480
   End If
481
 Loop
482
483
 Locate 2 , 11
484
 Lcd "   OK "
485
 Wait 1
486
487
End Sub
488
'
489
'
490
Sub Sms_textmodus_aktivieren()
491
 Gsm_daten = ""
492
493
 Locate 1 , 1
494
 Lcd " SMS Textmodus  "
495
 Locate 2 , 1
496
 Lcd "aktivieren      "
497
 Wait 1
498
499
 Print "AT+CMGF=1"
500
 Do
501
   If Instr(1 , Gsm_daten , "OK") > 0 Then
502
      Exit Do
503
   End If
504
 Loop
505
506
 Locate 2 , 11
507
 Lcd "   OK "
508
 Wait 1
509
510
End Sub
511
'
512
'
513
Sub Warte_auf_meldung()
514
 Gsm_daten = ""
515
 Cls
516
 Locate 1 , 1
517
 Lcd "SIGNAL:" ; Str_signal
518
 Locate 2 , 1
519
 Lcd " Warte auf SMS  "
520
521
 Portb.0 = 0                                                ' Display AUS
522
End Sub
523
'
524
'
525
Sub Sms_auswerten()
526
527
 Portb.0 = 1                                                ' DISPLAY AN
528
 Anrufer = ""
529
 Befehl = ""
530
 Gsm_daten = ""
531
 Rueckmelde_text = ""
532
 Cls
533
 Locate 1 , 1
534
 Lcd "SMS eingegangen"
535
 Locate 2 , 1
536
 Lcd "Pruefe . . . . "
537
538
 Print "AT+CMGR=" ; Sms_nummer
539
540
 Gsm_text = ""
541
 Do
542
   If Len(gsm_daten) > 0 Then
543
      Gsm_text = Gsm_text + Gsm_daten
544
      Gsm_daten = ""
545
   End If
546
547
   If Instr(1 , Gsm_text , "OK") > 0 Then
548
      Exit Do
549
   End If
550
 Loop
551
552
 Locate 2 , 7
553
 Lcd "  OK        "
554
 Wait 1
555
556
557
 Gsm_daten = Gsm_text
558
559
560
 ' Anrufer-Nummer ermitteln
561
 Pos1 = Instr(1 , Gsm_daten , "+49")
562
 If Pos1 > 0 Then
563
    Pos2 = Instr(pos1 , Gsm_daten , ",")
564
    If Pos2 > 0 Then
565
       Pos2 = Pos2 - 1
566
       Pos1 = Pos1 + 3
567
       Menge = Pos2 - Pos1
568
       Gsm_text = Mid(gsm_daten , Pos1 , Menge)
569
       Anrufer = "0" + Gsm_text
570
       Cls
571
       Locate 1 , 1
572
       Lcd "->" ; Anrufer ; "<-"
573
    End If
574
 End If
575
576
577
578
 '-----------------------------------------------------------
579
 ' Prüfe Zugriffs-Code
580
 Pos1 = Instr(1 , Gsm_daten , "c:")
581
 If Pos1 > 0 Then
582
    Pos2 = Instr(pos1 , Gsm_daten , "/")
583
    If Pos2 > 0 Then
584
       Pos1 = Pos1 + 2
585
       Menge = Pos2 - Pos1
586
       Befehl = Mid(gsm_daten , Pos1 , Menge)
587
       For W = 1 To Menge
588
           Ascii = Mid(befehl , W , 1)
589
           Usercode(w) = Val(ascii)
590
       Next W
591
592
       Ok = 0
593
       If Usercode(1) <> Systemcode(1) Then
594
          Ok = 1
595
       End If
596
       If Usercode(2) <> Systemcode(2) Then
597
          Ok = 1
598
       End If
599
       If Usercode(3) <> Systemcode(3) Then
600
          Ok = 1
601
       End If
602
       If Usercode(4) <> Systemcode(4) Then
603
          Ok = 1
604
       End If
605
606
       If Ok = 1 Then
607
          Goto Abbruch
608
       Else
609
          Locate 2 , 1
610
          Lcd "Zugriff erlaubt "
611
          Waitms 2000
612
       End If
613
614
    End If
615
 Else
616
    Call Abbruch()
617
    Goto Auswerten_ende
618
 End If
619
 '-----------------------------------------------------------
620
621
 '# Prüfe ob Rückmeldung erwünscht
622
 Sms_msg = 0
623
 If Instr(1 , Gsm_daten , "msg") > 0 Then
624
    Sms_msg = 1
625
 End If
626
627
628
 Rueckmelde_text = "Folgende Funktionen wurden ausgefuehrt : " + Chr(13) + Chr(10) + Chr(13) + Chr(10)
629
 '-----------------------------------------------------------
630
 ' Prüfe nach Schalter AN
631
 Pos1 = Instr(1 , Gsm_daten , "san:")
632
 If Pos1 > 0 Then
633
    Pos2 = Instr(pos1 , Gsm_daten , "*")
634
    If Pos2 > 0 Then
635
       Pos1 = Pos1 + 4
636
       Menge = Pos2 - Pos1
637
       An = Mid(gsm_daten , Pos1 , Menge)
638
       Text1 = ""
639
       Rueckmelde_text = Rueckmelde_text + " Schalter AN: "
640
       For W = 1 To Menge
641
           Ascii = Mid(an , W , 1)
642
           Ascii_byte = Val(ascii)
643
           Select Case Ascii_byte
644
                  Case 1
645
                  Relais1 = 1
646
                  Text1 = Text1 + "-1"
647
                  Rueckmelde_text = Rueckmelde_text + " 1"
648
649
                  Case 2
650
                  Relais2 = 1
651
                  Text1 = Text1 + "-2"
652
                  Rueckmelde_text = Rueckmelde_text + " 2"
653
654
                  Case 3
655
                  Relais3 = 1
656
                  Text1 = Text1 + "-3"
657
                  Rueckmelde_text = Rueckmelde_text + " 3"
658
659
                  Case 4
660
                  Relais4 = 1
661
                  Text1 = Text1 + "-4"
662
                  Rueckmelde_text = Rueckmelde_text + " 4"
663
664
                  Case 5
665
                  Relais5 = 1
666
                  Text1 = Text1 + "-5"
667
                  Rueckmelde_text = Rueckmelde_text + " 5"
668
669
                  Case 6
670
                  Relais6 = 1
671
                  Text1 = Text1 + "-6"
672
                  Rueckmelde_text = Rueckmelde_text + " 6"
673
674
                  Case 7
675
                  Relais7 = 1
676
                  Text1 = Text1 + "-7"
677
                  Rueckmelde_text = Rueckmelde_text + " 7"
678
679
                  Case 8
680
                  Relais8 = 1
681
                  Text1 = Text1 + "-8"
682
                  Rueckmelde_text = Rueckmelde_text + " 8"
683
           End Select
684
       Next W
685
       Locate 1 , 1
686
       Lcd "Schalter AN :   "
687
       Locate 2 , 1
688
       Lcd Text1 ; "              "
689
       Wait 2
690
    End If
691
 End If
692
 '-------------------------------------------------------
693
694
695
 ' Prüfe nach Schalter AUS
696
 Pos1 = Instr(1 , Gsm_daten , "saus:")
697
 If Pos1 > 0 Then
698
    Pos2 = Instr(pos1 , Gsm_daten , "#")
699
    If Pos2 > 0 Then
700
       Pos1 = Pos1 + 5
701
       Menge = Pos2 - Pos1
702
       Aus = Mid(gsm_daten , Pos1 , Menge)
703
       Text1 = ""
704
       Rueckmelde_text = Rueckmelde_text + Chr(13) + Chr(10) + " Schalter AUS: "
705
       For W = 1 To Menge
706
           Ascii = Mid(aus , W , 1)
707
           Ascii_byte = Val(ascii)
708
           Select Case Ascii_byte
709
                  Case 1
710
                  Relais1 = 0
711
                  Text1 = Text1 + "-1"
712
                  Rueckmelde_text = Rueckmelde_text + " 1"
713
714
                  Case 2
715
                  Relais2 = 0
716
                  Text1 = Text1 + "-2"
717
                  Rueckmelde_text = Rueckmelde_text + " 2"
718
719
                  Case 3
720
                  Relais3 = 0
721
                  Text1 = Text1 + "-3"
722
                  Rueckmelde_text = Rueckmelde_text + " 3"
723
724
                  Case 4
725
                  Relais4 = 0
726
                  Text1 = Text1 + "-4"
727
                  Rueckmelde_text = Rueckmelde_text + " 4"
728
729
                  Case 5
730
                  Relais5 = 0
731
                  Text1 = Text1 + "-5"
732
                  Rueckmelde_text = Rueckmelde_text + " 5"
733
734
                  Case 6
735
                  Relais6 = 0
736
                  Text1 = Text1 + "-6"
737
                  Rueckmelde_text = Rueckmelde_text + " 6"
738
739
                  Case 7
740
                  Relais7 = 0
741
                  Text1 = Text1 + "-7"
742
                  Rueckmelde_text = Rueckmelde_text + " 7"
743
744
                  Case 8
745
                  Relais8 = 0
746
                  Text1 = Text1 + "-8"
747
                  Rueckmelde_text = Rueckmelde_text + " 8"
748
           End Select
749
       Next W
750
       Locate 1 , 1
751
       Lcd "Schalter AUS :  "
752
       Locate 2 , 1
753
       Lcd Text1 ; "           "
754
       Wait 2
755
756
    End If
757
 End If
758
 '----------------------------------------------------------
759
 ' Prüfe nach Taster AN
760
 ' zuerst gucken ob eine Zeitvorgabe
761
 Schaltzeit = 1000
762
763
 Pos1 = Instr(1 , Gsm_daten , "sek:")
764
 If Pos1 > 0 Then
765
    Pos2 = Instr(pos1 , Gsm_daten , "-")
766
    If Pos2 > 0 Then
767
       Pos1 = Pos1 + 4
768
       Menge = Pos2 - Pos1
769
       An = Mid(gsm_daten , Pos1 , Menge)
770
       Schaltzeit = Val(an)
771
       Schaltzeit = Schaltzeit * 1000
772
    End If
773
 End If
774
 '
775
 '
776
 Pos1 = Instr(1 , Gsm_daten , "tan:")
777
 If Pos1 > 0 Then
778
    Pos2 = Instr(pos1 , Gsm_daten , "+")
779
    If Pos2 > 0 Then
780
       Pos1 = Pos1 + 4
781
       Menge = Pos2 - Pos1
782
       An = Mid(gsm_daten , Pos1 , Menge)
783
       Text1 = ""
784
       Ok2 = Schaltzeit / 1000
785
       Befehl = Str(ok2)
786
       Rueckmelde_text = Rueckmelde_text + Chr(13) + Chr(10) + " Taster schalten (" + Befehl + "sek) :"
787
       For W = 1 To Menge
788
           Ascii = Mid(an , W , 1)
789
           Ascii_byte = Val(ascii)
790
           Select Case Ascii_byte
791
                  Case 1
792
                  Relais1 = 1
793
                  Text1 = Text1 + "-1"
794
                  Rueckmelde_text = Rueckmelde_text + " 1"
795
796
                  Case 2
797
                  Relais2 = 1
798
                  Text1 = Text1 + "-2"
799
                  Rueckmelde_text = Rueckmelde_text + " 2"
800
801
                  Case 3
802
                  Relais3 = 1
803
                  Text1 = Text1 + "-3"
804
                  Rueckmelde_text = Rueckmelde_text + " 3"
805
806
                  Case 4
807
                  Relais4 = 1
808
                  Text1 = Text1 + "-4"
809
                  Rueckmelde_text = Rueckmelde_text + " 4"
810
811
                  Case 5
812
                  Relais5 = 1
813
                  Text1 = Text1 + "-5"
814
                  Rueckmelde_text = Rueckmelde_text + " 5"
815
816
                  Case 6
817
                  Relais6 = 1
818
                  Text1 = Text1 + "-6"
819
                  Rueckmelde_text = Rueckmelde_text + " 6"
820
821
                  Case 7
822
                  Relais7 = 1
823
                  Text1 = Text1 + "-7"
824
                  Rueckmelde_text = Rueckmelde_text + " 7"
825
826
                  Case 8
827
                  Relais8 = 1
828
                  Text1 = Text1 + "-8"
829
                  Rueckmelde_text = Rueckmelde_text + " 8"
830
           End Select
831
       Next W
832
       '-----------------
833
       Locate 1 , 1
834
       Lcd "Taster schalten "
835
       Locate 2 , 1
836
       Lcd Text1 ; "           "
837
       Waitms Schaltzeit
838
       '-----------------
839
       For W = 1 To Menge
840
           Ascii = Mid(an , W , 1)
841
           Ascii_byte = Val(ascii)
842
           Select Case Ascii_byte
843
                  Case 1
844
                  Relais1 = 0
845
846
                  Case 2
847
                  Relais2 = 0
848
849
                  Case 3
850
                  Relais3 = 0
851
852
                  Case 4
853
                  Relais4 = 0
854
855
                  Case 5
856
                  Relais5 = 0
857
858
                  Case 6
859
                  Relais6 = 0
860
861
                  Case 7
862
                  Relais7 = 0
863
864
                  Case 8
865
                  Relais8 = 0
866
           End Select
867
       Next W
868
       '------------
869
       Wait 2
870
    End If
871
 End If
872
 '-------------------------------------------------------
873
874
875
 'Prüfe ob Passwortwechsel
876
 Pos1 = Instr(1 , Gsm_daten , "code:")
877
 If Pos1 > 0 Then
878
    Pos1 = Pos1 + 5
879
    Pos2 = Pos1 + 5
880
    Ascii = Mid(gsm_daten , Pos1 , 1)
881
    Ascii_byte = Val(ascii)
882
    If Usercode(1) = Ascii_byte Then
883
       Incr Pos1
884
       Ascii = Mid(gsm_daten , Pos1 , 1)
885
       Ascii_byte = Val(ascii)
886
       If Usercode(2) = Ascii_byte Then
887
          Incr Pos1
888
          Ascii = Mid(gsm_daten , Pos1 , 1)
889
          Ascii_byte = Val(ascii)
890
          If Usercode(3) = Ascii_byte Then
891
             Incr Pos1
892
             Ascii = Mid(gsm_daten , Pos1 , 1)
893
             Ascii_byte = Val(ascii)
894
             If Usercode(4) = Ascii_byte Then
895
                Ascii = Mid(gsm_daten , Pos2 , 1)
896
                Syscode(1) = Val(ascii)
897
898
                Incr Pos2
899
                Ascii = Mid(gsm_daten , Pos2 , 1)
900
                Syscode(2) = Val(ascii)
901
902
                Incr Pos2
903
                Ascii = Mid(gsm_daten , Pos2 , 1)
904
                Syscode(3) = Val(ascii)
905
906
                Incr Pos2
907
                Ascii = Mid(gsm_daten , Pos2 , 1)
908
                Syscode(4) = Val(ascii)
909
910
                Systemcode(1) = Syscode(1)
911
                Systemcode(2) = Syscode(2)
912
                Systemcode(3) = Syscode(3)
913
                Systemcode(4) = Syscode(4)
914
915
                Locate 1 , 1
916
                Lcd "Passwort aendern"
917
                Locate 2 , 1
918
                Lcd "alt:" ; Usercode(1) ; Usercode(2) ; Usercode(3) ; Usercode(4) ; "neu:" ; Syscode(1) ; Syscode(2) ; Syscode(3) ; Syscode(4)
919
                Befehl = "Alter Code: "
920
                Ascii = Str(usercode(1))
921
                Befehl = Befehl + Ascii
922
                Ascii = Str(usercode(2))
923
                Befehl = Befehl + Ascii
924
                Ascii = Str(usercode(3))
925
                Befehl = Befehl + Ascii
926
                Ascii = Str(usercode(4))
927
                Befehl = Befehl + Ascii
928
                '
929
                Befehl = Befehl + "  Neuer Code: "
930
                Ascii = Str(syscode(1))
931
                Befehl = Befehl + Ascii
932
                Ascii = Str(syscode(2))
933
                Befehl = Befehl + Ascii
934
                Ascii = Str(syscode(3))
935
                Befehl = Befehl + Ascii
936
                Ascii = Str(syscode(4))
937
                Befehl = Befehl + Ascii
938
                '
939
                Rueckmelde_text = Rueckmelde_text + Chr(13) + Chr(10) + " Passwort ( Code ) Aenderung !" + Chr(13) + Chr(10) + Befehl
940
                Waitms 4000
941
             End If
942
          End If
943
       End If
944
    End If
945
 End If
946
947
Auswerten_ende:
948
949
Gsm_daten = ""
950
' SMS Leeren / Löschen
951
Print "AT+CMGD=1"
952
Do
953
  If Instr(1 , Gsm_daten , "OK") > 0 Then
954
     Exit Do
955
  End If
956
Loop
957
958
' wenn Rück-SMS erwünscht
959
If Sms_msg = 1 Then
960
   Call Sende_rueckmeldung
961
End If
962
963
Call Warte_auf_meldung
964
965
End Sub
966
'
967
'
968
Sub Abbruch()
969
 Gsm_daten = ""
970
971
 Locate 2 , 1
972
 Lcd "Falscher Code !!"
973
 Waitms 1000
974
975
 Locate 2 , 1
976
 Lcd "                "
977
 Waitms 500
978
979
 Locate 2 , 1
980
 Lcd "Falscher Code !!"
981
 Waitms 1000
982
983
 Locate 2 , 1
984
 Lcd "                "
985
 Waitms 500
986
987
 Locate 2 , 1
988
 Lcd "Falscher Code !!"
989
 Waitms 1000
990
991
 Locate 2 , 1
992
 Lcd "                "
993
 Waitms 500
994
995
 Locate 2 , 1
996
 Lcd "Falscher Code !!"
997
 Waitms 1500
998
999
 Rueckmelde_text = "Funktion nicht ausgefuehrt !  Falscher PIN !"
1000
 Call Sende_rueckmeldung
1001
1002
 End Sub
1003
'
1004
'
1005
Sub Sende_rueckmeldung()
1006
 ' Rückmeldung senden
1007
 Locate 1 , 1
1008
 Lcd "Sende           "
1009
 Locate 2 , 1
1010
 Lcd "Rueckmeldung ..."
1011
 Waitms 1500
1012
1013
 ' Variation 1
1014
 Print "AT+CMGS=" ; Anrufer
1015
 Print Rueckmelde_text;
1016
 Print Chr(26);
1017
1018
 '----------------------------
1019
1020
 ' Variaton 2
1021
' print "AT+CMGS=" ; Anrufer;
1022
' waitms 1000
1023
' print chr(13) ; chr(10);
1024
1025
1026
' print ",129";
1027
' waitms 1000
1028
' print chr(13) ; chr(10);
1029
1030
1031
' print Rueckmelde_Text;
1032
' waitms 1000
1033
' print chr(13) ; chr(10);
1034
1035
1036
' print chr(26);
1037
' waitms 1000
1038
' print chr(13) ; chr(10);
1039
1040
 End Sub
1041
'
1042
'
1043
Signal_auswerten:
1044
 Gsm_text = Gsm_daten
1045
1046
 Pos1 = Instr(1 , Gsm_text , "+CSQ:")
1047
 If Pos1 > 0 Then
1048
    Pos1 = Pos1 + 6
1049
    Befehl = Mid(gsm_text , Pos1 , 2)
1050
    Signalstaerke = Val(befehl)
1051
    If Signalstaerke <> Signalstaerke_merken Then
1052
       Signalstaerke_merken = Signalstaerke
1053
       ' KEIN SIGNAL
1054
       If Signalstaerke = 99 Then
1055
          Str_signal = " nothing "
1056
          Goto Kein_signal
1057
       End If
1058
1059
       Str_signal = chr(1) + chr(6) + chr(6) + chr(6) + chr(6) + chr(6) + chr(6) + chr(7)
1060
       Str_Signal_Symbol = String(8 , 5)
1061
       select case Signalstaerke
1062
              case 0 to 4
1063
                Pos1 = Signalstaerke
1064
                Pos2 = 1
1065
              '----------------------------------------------------------------------------------
1066
1067
              case 5 to 9
1068
                Pos1 = Signalstaerke - 5
1069
                Pos2 = 2
1070
              '----------------------------------------------------------------------------------
1071
1072
              case 10 to 14
1073
                Pos1 = Signalstaerke - 10
1074
                Pos2 = 3
1075
              '----------------------------------------------------------------------------------
1076
1077
              case 15 to 19
1078
                Pos1 = Signalstaerke - 15
1079
                Pos2 = 4
1080
1081
              '----------------------------------------------------------------------------------
1082
              case 20 to 24
1083
                Pos1 = Signalstaerke - 20
1084
                Pos2 = 5
1085
1086
              '----------------------------------------------------------------------------------
1087
              case 25 to 29
1088
                Pos1 = Signalstaerke - 25
1089
                Pos2 = 6
1090
              '----------------------------------------------------------------------------------
1091
1092
              case 30 to 34
1093
                Pos1 = Signalstaerke - 30
1094
                Pos2 = 7
1095
              '----------------------------------------------------------------------------------
1096
       end select
1097
1098
       incr Pos1
1099
       Pos3 = Pos2 - 1
1100
       if Pos3 = 0 then
1101
          Pos3 = 1
1102
       endif
1103
       Mid(Str_signal , 1 , Pos3) = Mid(Str_Signal_Symbol , 1 , Pos3)
1104
       Mid(Str_signal , Pos2 , 1) = chr(Pos1)
1105
1106
       Kein_signal:
1107
       Locate 1 , 1
1108
       Lcd "SIGNAL:" ; Str_signal
1109
1110
       Gsm_daten = ""
1111
    End If
1112
 End If
1113
Return
1114
'
1115
'

von ARDUINOHASSER (Gast)


Lesenswert?

Das ist doch kein "Code", das ist eine Krankheit!

von Thomas D. (thomasderbastler)


Lesenswert?

ARDUINOHASSER schrieb:
> Das ist doch kein "Code", das ist eine Krankheit!

Dann wollen wir mal alle geheilt werden..zeige mal DEINE Medizin

von Bert (Gast)


Lesenswert?

Holger Z. schrieb:
> Is nen bissel wenig Erklärung wie Dein Code aussieht und was Du
> programmiert hast um sagen zu können wo Dein Problem liegt.

Bert schrieb:
> Um vorab das GSM-Modul ein wenig kennen zulernen betreibe ich es am PC
> über die RS232 Schnittstelle.

Ich denk mal das erklärt sich auch ohne Code von selbst. Eine Lösung für 
mein Problem hab ich ebenfalls gefunden.

Bert schrieb:
> Ok hab jetzt eine Lösung für das Problem gefunden. Am Ende jedes
> Kommandos muss man noch EOL chars dranhängen, dann läufts :)


Holger Z. schrieb:
> Hier mein Code für eine SMS Auswertung mit Signalstärkeanzeige und einem
> Display 16x2

ARDUINOHASSER schrieb:
> Das ist doch kein "Code", das ist eine Krankheit!

von Holger Z. (boomboommagic)


Lesenswert?

> Bert schrieb:
> Um vorab das GSM-Modul ein wenig kennen zulernen betreibe ich es am PC
> über die RS232 Schnittstelle.
>
> Ich denk mal das erklärt sich auch ohne Code von selbst. Eine Lösung für
> mein Problem hab ich ebenfalls gefunden.


Wo is denn dann das Problem das Gleiche mit einem µC zu machen statt 
dessen hier komische Fragen fragen ?


> Bert schrieb:
> Ok hab jetzt eine Lösung für das Problem gefunden. Am Ende jedes
> Kommandos muss man noch EOL chars dranhängen, dann läufts :)
>

Ich setze am Ende immer : LoL  ... oder Smile  .... oder Grins ....
an jedes Kommando , dann freut sich der TC35

von Stefan W. (dl6dx)


Lesenswert?

Bert schrieb:
> Ok hab jetzt eine Lösung für das Problem gefunden. Am Ende jedes
> Kommandos muss man noch EOL chars dranhängen, dann läufts :)

Ein Blick in das "AT Command Reference Manual" hätte dir sofort Klarheit 
gebracht, dass die AT-Kommandos ein bestimmtes Format erwarten.
Zur Sicherheit hier mal der entsprechende Abschnitt:

1.4 AT command syntax
The "AT" or "at" prefix must be set at the beginning of each command 
line. To terminate a command line enter <CR>.
Commands are usually followed by a response that includes 
"<CR><LF><response><CR><LF>". Throughout this document, only the 
responses are presented, <CR><LF> are omitted intentionally.

Danach stehen weitere wichtige Informationen zur Syntax und den 
Zeichensätzen.

Falls du es nicht hast, solltest du dir das Dokument schleunigst 
besorgen.

Document Name: TC35i AT Command Set
Version: 02.07
Date: January 30, 2004
DocId: TC35i_ATC_V02.07

Google sollte genug Treffer liefern.

Grüße

Stefan

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.