SIM800L v2.0 und Anrufe empfangen, Nummer abgleichen oder Tastenfolge erkennen

Hi,
ich wollte eine Telefonansteuerung basteln - wofür spielt erstmal keine Rolle, denn dafür gibt’s schon fertige Sachen und bevor ich dann ausufere, sollte folgendes reichen:

Ich habe einen Uno zum Testen, später soll es ein Nano werden.
Für den Telefonempfang habe ich ein SIM800L v2.0 Modul bestellt.

Mit der Bibliothek GSMSim.h habe ich das alles auch soweit zum laufen bekommen:

#include <GSMSim.h>




#define RX 11
#define TX 10
#define RESET 12
#define BAUD 9600

/*
 * Defaults => RX: 7 | TX: 8 | Reset: 2 | LED Pin: 13 | LED Flag: true | Baud Rate: 9600
 * GSMSim gsm;
 * GSMSim gsm(RX, TX);
 * GSMSim gsm(RX, TX, RESET);
 * GSMSim gsm(RX, TX, RESET, LED_PIN, LED_FLAG);
 */


GSMSim gsm(RX, TX, RESET);


void setup() {
  Serial.begin(9600);
  gsm.start(9600);
  pinMode(13, OUTPUT);

  delay(1000);
  
}


void loop() {


  int call;

  call=gsm.callStatus();
  switch (call){
    case 0:
      Serial.println("Kein Anruf");
      break;
    case 3:
      Serial.println("Eingehender Anruf");
      delay(5000);
      gsm.callAnswer();
      break;
    case 4:
      Serial.println("Aktiver Anruf");
      delay(5000);
      gsm.callHangoff();
      break;
    case 99:
      Serial.println("Keine Antwort");
      break;
      
  }
  delay(1000);
}

Per Serial Monitor klappt die Ausgabe einwandfrei. Ich rufe an, nach 5 Sekunden geht das Modul “ans Telefon” und legt nach weiteren 5 Sekunden wieder auf.

Nun kann ja aber jetzt jeder Hans und Franz, oder auch irgendwelche Meinungsforschungsinstitute dort anrufen.

Um das zu verhindern wollte ich gerne einige Nummern als Abgleich im Sketch hinterlegen und wenn dann der Anrufer einer dieser Nummern hat, soll der Arduino seine Sachen schalten.
Das bekomme ich jetzt nicht hin - wirklich was dazu finden tue ich nicht.
Sketche mit anderen Bibliotheken oder welche, die rein seriell funktionieren, welche dann, AT codes verwenden, habe ich auch schon durch - gefühlt alle…ohne Erfolg.

Da ich da nun zwei Tage dran geknabbert habe, wollte ich es anders lösen:

Anrufen, Arduino geht ran, ich wähle eine mehrstellige PIN auf dem Ziffernfeld, der Arduino erkennt es und macht seine Schaltungen, wenn die PIN stimmt. Wenn nicht, wird aufgelegt.
Soweit ich das verstanden hab geht das mit diesem DTMF System - aber das habe ich auch nicht hinbekommen.
Bei einem Sketch, wo einer mehrere Servos genau mit dieser Funktion ansteuert, spuckt der Monitor mir nur “DTMF Code: 773” aus - egal, was ich mache.

Nun weiß ich nicht mehr weiter - im Grunde funktioniert das Empfangen der Anrufe ja einwandfrei, nur die Nummern- oder Tastendruckerkennung klappt nicht, bzw. ich finde dazu einfach nichts.

Hat da jemand was parat?

MfG
Jannomag

Ich habe es bisher noch nicht gemacht, aber...

Du kannst doch die eingehende Nummer über "callReadCurrentCall(String serialRaw)" abfragen und auswerten.

HotSystems:
Ich habe es bisher noch nicht gemacht, aber...

Du kannst doch die eingehende Nummer über "callReadCurrentCall(String serialRaw)" abfragen und auswerten.

Das habe ich mir auch schon gedacht, aber da sich bei mir das Thema C/C++ nicht so wirklich festbrennen will, stehe ich damit etwas auf dem Schlauch.
Wie frage ich denn mit callReadCurrentCall(String serialRaw) ab - bzw. was bedeutet "String serialRaw"?
Sorry, wenn das eigentlich klar sein sollte, für mich ist es das nicht.

bzw. was bedeutet "String serialRaw"?

"String" ist ein Datentype!
Link (oder so ähnlich)

"serialRaw" ist einfach nur ein Bezeichner für eine Instanz von "String".
Der Name zum anfassen des Objektes.

callReadCurrentCall(String serialRaw)
Dein callReadCurrentCall(..) erwartet also eine Instanz vom Type String.
Der funktionsinterne Name für die Instanz ist serialRaw.
Was die Funktion damit macht, weiß ich nicht.

Keine Ahnung warum, aber jetzt geht gar nix mehr. Hab den Rechner aufgeklappt, das Sketch geladen, nix verändert.
Dann den Arduino angeschlossen und den Serial Monitor geöffnet - nun wird kein Anruf mehr erkannt, was gestern noch einwandfrei funktioniert hat. Ich könnte kotzen.

Habe jetzt "String serialRaw = String(20);" in den loop ganz oben eingesetzt, dann gsm.callReadCurrentCall(serialRaw); im Case 3. Keine Fehler beim Kompilieren, obs geht kann ich ja nicht testen.

EDIT: Scheint an GSMSim.h zu liegen - mit Fona klappt es, da zeigt er mir auch "+CLIP: "+49151xxxx4314",145,"",0,"",0" wenn ich anrufe.
Beim Versuch mit readString und indexOf die Telefonnummer auszulesen, ist die Serielle Ausgabe extrem langsam, sodass die Ausgabe von "+CLIP: "+49151xxxx4314",145,"",0,"",0" etwa 30 Sekunden dauert.