Ich verstehe leider einiges an dem Code nicht. Es scheint so, als wäre es keine brauchbare Reduktion eines längeren Codes.
- Angefangen bei der Einbindung des I2C-LCD:
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
Es gibt mehrere I2C-LCD Libraries, aber das sieht für mich eher nach einem "normalen" LCD aus, also ohne I2C.
Ich verwende auch verschiedene Libs für I2C-LCDs aber das schaut für mich ungewohnt aus.
Stehen diese (vielen) Zahlen für Pins?
Wenn ja, dann gäbe es ziemliche Konfilikte mit dem restlichen Code.
Welche LCD-Library verwendest du?
Andererseits: im restlichen Code wird gar nichts mit einem LCD gemacht. Also wieso stehen diese Zeilen überhaupt da?
-
int a wird gar nicht verwendet - na gut, das ist natürlich kein wirkliches Problem.
-
Es müsste wohl eher heißen:
if (inchar == 'B')
- Der Wert von b3 ist irrelevant, weil im gezeigten Code immer true:
if (b3 == true) {
inchar = SIM900.read();
Serial.println(inchar);
b3 = false;
if (inchar == "B")
{
delay(10);
Serial.print("Empfangen");
digitalWrite(offen, HIGH);
}
delay(10);
SIM900.println("AT+CMGD=1,4"); // delete all SMS
b3 = true;
}
Zuerst die Abfrage auf b3 == true, dann wird es kurzfristig auf false gesetzt um kurz vor Ende dieses Codeblocks wieder auf true gesetzt zu werden. Die Abfrage hat also "keine Wirkung".
Das erklärt möglicherweise nicht warum der Code nicht so funktioniert, wie du es möchtest.
Mein Rat: probiere zuerst mit ganz einfachem Code mit dem SIM 900 zu kommunizieren um herauszufinden, wie das funktioniert. Orientiere dich an (hoffentlich vorhandenen) Beispielen.
Der gezeigte Code ist zwar "ganz einfach", enthält aber "Eigenartiges" und ist deshalb möglicherweise nicht so gut geeignet.
Ich habe leider deine Hardware nicht, habe aber schon öfter mit GSM-Modulen gearbeitet. Ich kann also deinen Code nicht direkt testen.
Generell ist die Stromversorgung bei GSM oft der Grund für viele Fehlfunktionen.
Es wird meist eine getrennte (leistungsfähige) Stromversorgung für so ein Modul benötigt und eine Versorgung direkt vom Arduino ist nicht möglich.
Edit:
Da war Whandall schneller 