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
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 :)
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 | '
|
ARDUINOHASSER schrieb: > Das ist doch kein "Code", das ist eine Krankheit! Dann wollen wir mal alle geheilt werden..zeige mal DEINE Medizin
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!
> 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. NÖ 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.