Forum: Mikrocontroller und Digitale Elektronik Arduino VoiceCall Status abrufen


von Ludwig M. (ludwigm)


Lesenswert?

Hallo,
ich möchte gerne mit dem Arduino und dem GSM Shield einen Sprachanruf 
starten. Das klappt auch soweit ohne Probleme.
Jedoch würde ich gerne wenn eine Nummer angerufen wird und nach 5 
Sekunden nicht abgenommen wurde, den Anruf beenden. Dazu muss ich ja 
irgendwie den Status abfragen.
So habe ich es versucht:
1
 unsigned long previousMillis = 0;
2
 unsigned long interval = 5000; 
3
 previousMillis = millis();   
4
 vcs.voiceCall(Telefonnummer);
5
      
6
 while(vcs.getvoiceCallStatus() == CALLING)
7
 {          
8
     Serial.println((millis() - previousMillis));
9
     if((millis() - previousMillis) > interval)
10
       {
11
           vcs.hangCall();
12
       }
13
 }

Jedoch funktioniert es nicht, denn nach Aufruf des Befehls
1
vcs.voiceCall(charbuffer)

wird erst der nächste Befehl ausgeführt, wenn der Anruf angenommen 
wurde.


Hat jemand eine Idee, wie ich das Problem lösen kann?
Vielen Dank im Voraus
Ludwig

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Du musst den asynchronen Modus verwenden. Bei diesem wartet voiceCall 
nicht darauf dass der Anruf angenommen wurde, sondern kehrt sofort 
zurueck. Schau mal in die (zugegeben sehr sparsame) Dokumentation: 
https://www.arduino.cc/en/Reference/GSMVCSVoiceCall

von Ludwig M. (ludwigm)


Lesenswert?

Danke für die Antwort.
Der Code in der Dokumentation war die Basis meines bisherigen Projektes.
Ist also auch der selbe Modus, wie ich ihn verwende, also nicht 
asynchron.
In der Dokumentation werden zwar die unterschiedlichen Rückgabewerte im 
jeweiligen Modus erwähnt, jedoch nicht wie man den asynchronen Modus 
verwendet.

Wie verwendet man den asynchronen Modus?

Gruß Ludwig

von Ludwig M. (ludwigm)


Lesenswert?

Ich habe jetzt (laut der Dokumentation) den asynchronen Modus aktiviert, 
und zwar mit folgender Zeile.
1
gsmAccess.begin(PINNUMBER,true,false);
https://www.arduino.cc/en/Reference/GSMBegin

Wenn ich mir jetzt die vergangenden Millisekunden seit starten des 
Anrufes ausgeben lasse, so wird mir ziemlich genau 30 Sekunden nichts 
angezeigt. Scheinbar ist der Befehl voiceCall() erst nach 30 Sekunden 
beendet.

Hat jemand eine Idee was ich falsch mache?
Bin für jede Hilfe dankbar! Ludwig

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.