Hannnnes:
Es müsste doch dan so inetwa aussehn oder ??
Naja, da das nicht fehlerfrei kompiliert ist die Antwort wohl eher "nein" ![]()
Es könnte eventuell in etwa so funktionieren (vorhandener Code bearbeitet):
#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8); // configure software serial port
const int buttonPin = 3;
int buttonState = 0;
int lastButtonState = 0; // previous state of the button
void setup() {
pinMode(buttonPin, INPUT);
}
void loop() {
buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
if (buttonState != lastButtonState) {
SIM900power();
SIM900.begin(19200);
delay(30000); // give time to log on to network.
callSomeone(); // call someone
SIM900.end();
SIM900power(); // power off GSM shield7
}
}
lastButtonState = buttonState;
}
// software equivalent of pressing the GSM shield "power" button
void SIM900power() {
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(5000);
}
void callSomeone() {
SIM900.println("ATD + +49xxxxxx;"); // dial DE (49) xxxxx
delay(100);
SIM900.println();
delay(10000); // wait for 10 seconds...
SIM900.println("ATH"); // hang up
}
Allerdings sind da sehr viele und vor allem sehr lange delays eingebaut (bis zu 30 Sekunden). Das führt dazu, dass auf einen "Tastendruck" nur sehr sehr zeitverzögert, bis gar nicht reagiert wird, weil während eines langen delays keine "Auswertung" des Button-Pins erfolgt.
Wahrscheinlich musst du dir statt dieser langen delays etwas Anderes überlegen.
(Auch dazu gibt es ein Beispiel: Datei / Beispiele / 2.Digital / BlinkWithoutDelay)
Aber du solltest du dir generell überlegen, was passieren soll, wenn während der Zeit die für den Netzwerkaufbau reserviert ist (30 Sekunden), der Button (die Tür) wieder geöffnet/geschlossen wird.