when people call them (they only have mobile gsm phone) i need a "thing" that can grab the number and remove +45 from the number and then type it as if the staff typed number on keyboard and press enter
i looked for a gsm shield in the shop and the leonardo board but the only gsm shield/board is Arduino MKR GSM 1400
with some help from the examples i have tried to stitch together a code that takes the incomming phone number and types it as if it was done on a keyboard
now i just need to make sure the number is only typed once for each call
ie if the phone is not picked up after the frist ring number should only be typed once
once the phone has been picked up the module will not get more rings
and of course i need to ask the phone company if we can get a 2nd sim card for the same number
but code so far
#include <MKRGSM.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);
// initialize control over the keyboard:
Keyboard.begin();
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);
//Send the message
Keyboard.println(numtel);
Keyboard.write(0x0d); // that's a CR
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);
}
EDIT: changed the method of typing to Keyboard.println
EDIT2: added a “enter” press after sending the phone number
// Check the status of the voice call
bool waitingForCall;
switch (vcs.getvoiceCallStatus())
{
case IDLE_CALL: // Nothing is happening
waitingForCall = true;
break;
case RECEIVINGCALL: // Yes! Someone is calling us
if (waitingForCall) {
// do stuff
waitinForCall = false;
}
break;