Forum: Mikrocontroller und Digitale Elektronik GSM-Shield Problem


von Bernhard P. (bernhard_p361)


Lesenswert?

Benutzer Diskussion:Bernhard p361
Hallo alle zusammen!!

Ich habe eine Frage zum Thema GSM-Shield. Ich habe mir vor kurzem das 
GSM- Shield "GPRS Shield V1.4" bestellt, das problem ist nur dass das 
nicht wirklich kompatible mit meinem Arduino Mega ist, und ich es nun 
über Kabelbrücken anschließen muss, genauso verwende ich eine externe 
Spannungsversorgung(d.h. nicht die vom Arduino Mega), doch sobald ich 
jetzt die Jumper des Shield auf HWSerial stelle und ich die Pins 0 und 1 
des Shields mit den Pins RX0 und TX0 des Arduinos verbinde, und jetzt 
irgendeinen Sketch von Arduino für GSM auf meinen Arduino hochlade kommt 
in meinem Seriellen Monitor immer nur die Meldung "SMS Messages 
Sender"(komt auf den Sketch drauf an). Empfang hab ich einen guten und 
einen Pin verwende ich auch nicht. Das shield besitzt einen SIM900. Ich 
hoffe irgendjeman kann mir bei meinem Problem schnell weiterhelfen, da 
ich nicht mehr weiß was ich ausprobieren sollte.

CODE:
1
include <GSM.h>
2
define PINNUMBER ""
3
// initialize the library instance GSM gsmAccess; // include a 'true' parameter for debug enabled GSM_SMS sms;
4
5
void setup() {
6
7
 // initialize serial communications
8
 Serial.begin(9600);
9
 Serial.println("SMS Messages Sender");
10
 // connection state
11
 boolean notConnected = true;
12
 // Start GSM shield
13
 // If your SIM has PIN, pass it as a parameter of begin() in quotes
14
 while(notConnected)
15
 {
16
   if(gsmAccess.begin(PINNUMBER)==GSM_READY)
17
     notConnected = false;
18
   else
19
   {
20
     Serial.println("Not connected");
21
     delay(1000);
22
   }
23
 }
24
 Serial.println("GSM initialized");
25
}
26
27
void loop() {
28
29
 Serial.print("Enter a mobile number: ");
30
 char remoteNumber[20];  // telephone number to send sms
31
 readSerial(remoteNumber);
32
 Serial.println(remoteNumber);
33
 // sms text
34
 Serial.print("Now, enter SMS content: ");
35
 char txtMsg[200];
36
 readSerial(txtMsg);
37
 Serial.println("SENDING");
38
 Serial.println();
39
 Serial.println("Message:");
40
 Serial.println(txtMsg);
41
 // send the message
42
 sms.beginSMS(remoteNumber);
43
 sms.print(txtMsg);
44
 sms.endSMS(); 
45
 Serial.println("\nCOMPLETE!\n");
46
}
47
48
/*
49
50
 Read input serial
51
*/
52
int readSerial(char result[]) {
53
54
 int i = 0;
55
 while(1)
56
 {
57
   while (Serial.available() > 0)
58
   {
59
     char inChar = Serial.read();
60
     if (inChar == '\n')
61
     {
62
       result[i] = '\0';
63
       Serial.flush();
64
       return 0;
65
     }
66
     if(inChar!='\r')
67
     {
68
       result[i] = inChar;
69
       i++;
70
     }
71
   }
72
 }
73
}

Euer Berni

von Mike J. (linuxmint_user)


Lesenswert?

Du überträgst die neue Firmware ja über UART und der ATmega328 hat nur 
einen UART den du zeitgleich nutzt um mit dem GSM-Shield zu 
kommunizieren und die neue Firmware zu flashen (UART Bootloader). Du 
müsstest also die Verbindung zwischen USRT von GSM einfach trennen wenn 
du eine neue Firmware flashst.

Gruß Mike

von Bernhard P. (bernhard_p361)


Lesenswert?

erstens weis ich nicht einmal wie ich mein GPRS shield mit dem 
Mikrocontroller verbinde.
zweitens wann weiß ich das die firmware flasht?

aber sonst ein großes dankeschön

lg berni

von lächler (Gast)


Lesenswert?

Bernhard P. schrieb:
> weis ich nicht einmal wie ich mein GPRS shield mit dem
> Mikrocontroller verbinde.

Die Verbindungen, die du jetzt auf RX0 und TX0 gelegt hast, machen 
vermutlich die Probleme. Wenn es die richtigen Shield-Anschlüsse sein 
sollten, lege sie auf RX1 und TX1.
Den GSM-Sketch musst du dann ändern, so daß er die Kommunikation mit dem 
Shield über die Serial1-Schnittstelle macht.
Schau dir mal im Beispiel-Sketch "MultiSerialMega" an wie das geht.

Bernhard P. schrieb:
> zweitens wann weiß ich das die firmware flasht?

Damit ist das Sketch hochladen gemeint.
Wenn du bei RX0 und TX0 bleiben willst, darfst du das Shield erst nach 
dem Upload aufstecken.

Bernhard P. schrieb:
> Ich habe mir vor kurzem das
> GSM- Shield "GPRS Shield V1.4" bestellt

Kannst du einen Link oder ein Foto posten, damit man sieht, worum es 
sich handelt?

von Mike (Gast)


Lesenswert?

Und beim SIM900 immer (immer!) ein dickes Netzteil. Laut Hersteller 2A 
Stromaufnahme maximal.

von Mike J. (linuxmint_user)


Lesenswert?

Ich habe von Arduino keine Ahnung, aber man wird doch dann eine 
Nachricht bekommen wenn das Flashen komplett ist.

Man hat doch eigentlich für jede GSM-Karte einen Pin.

Falls du keinen Pin brauchst, dann versuche es doch einfach ohne die 
Abfrage der Pin.

Wo führst du eigentlich Setup() aus ?

Ist díe Loop das selbe wie die for(;;) oder while(1) ?

Aus der "readSerial()" , in der while(1) kommst du aber nicht mehr raus, 
da ist nichts um raus zu springen.

von lächler (Gast)


Lesenswert?

Mike J. schrieb:
> Aus der "readSerial()" , in der while(1) kommst du aber nicht mehr raus,
> da ist nichts um raus zu springen.

Schau mal hier:
1
     if (inChar == '\n')
2
     {
3
       result[i] = '\0';
4
       Serial.flush();
5
       return 0;

Es gibt einen Ausgang, wenn über die serielle Schnittstelle "\n" 
eingelesen wird.

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.