This sketch receives a voice call from an Arduino or Genuino board equipped with a GSM shield. Once the call is received and connected, it shows the number that is calling, and hangs up. You’ll need to attach a speaker and microphone to hear the connected call and transmit your voice.
Hardware Required
- Arduino or Genuino Board
- Arduino + Telefonica GSM/GPRS Shield
- Microphone and speaker attached to the GSM shield
- SIM card
Circuit
Code
#include <GSM.h> // PIN Number #define PINNUMBER "" // initialize the library instance GSM gsmAccess; // include a 'true' parameter for debug enabled GSMVoiceCall vcs; char numtel[20]; // buffer for the incoming call void setup() { // initialize serial communications Serial.begin(9600); Serial.println("Receive Voice Call"); // connection state boolean notConnected = true; // Start GSM shield // If your SIM has PIN, pass it as a parameter of begin() in quotes while(notConnected) { if(gsmAccess.begin(PINNUMBER)==GSM_READY) notConnected = false; else { Serial.println("Not connected"); delay(1000); } } // This makes sure the modem notifies correctly incoming events vcs.hangCall(); Serial.println("Waiting Call"); } void loop() { // Check the status of the voice call switch (vcs.getvoiceCallStatus()) { case IDLE_CALL: // Nothing is happening break; case CALLING: // This should never happen, as we are not placing a call Serial.println("CALLING"); break; case RECEIVINGCALL: // Yes! Someone is calling us Serial.println("RECEIVING CALL"); // Retrieve the calling number vcs.retrieveCallingNumber(numtel, 20); // Print the calling number Serial.print("Number:"); Serial.println(numtel); // Answer the call, establish the call vcs.answerCall(); break; case TALKING: // In this case the call would be established Serial.println("TALKING. Enter line to interrupt."); while(Serial.read()!='\n') delay(100); vcs.hangCall(); Serial.println("HANG. Waiting Call."); break; } delay(1000); }