mirror of
https://github.com/arduino/Arduino.git
synced 2024-12-04 15:24:12 +01:00
9eaea4205d
According to #3786 removed the reference to Leonardo only in while(!Serial) of the examples. Changed in in "wait for serial port to connect. Needed for native USB port only"
106 lines
2.7 KiB
C++
106 lines
2.7 KiB
C++
/*
|
|
Make Voice Call
|
|
|
|
This sketch, for the Arduino GSM shield, puts a voice call to
|
|
a remote phone number that you enter through the serial monitor.
|
|
To make it work, open the serial monitor, and when you see the
|
|
READY message, type a phone number. Make sure the serial monitor
|
|
is set to send a just newline when you press return.
|
|
|
|
Circuit:
|
|
* GSM shield
|
|
* Voice circuit.
|
|
With no voice circuit the call will send nor receive any sound
|
|
|
|
|
|
created Mar 2012
|
|
by Javier Zorzano
|
|
|
|
This example is in the public domain.
|
|
*/
|
|
|
|
// libraries
|
|
#include <GSM.h>
|
|
|
|
// PIN Number
|
|
#define PINNUMBER ""
|
|
|
|
// initialize the library instance
|
|
GSM gsmAccess; // include a 'true' parameter for debug enabled
|
|
GSMVoiceCall vcs;
|
|
|
|
String remoteNumber = ""; // the number you will call
|
|
char charbuffer[20];
|
|
|
|
void setup() {
|
|
|
|
// initialize serial communications and wait for port to open:
|
|
Serial.begin(9600);
|
|
while (!Serial) {
|
|
; // wait for serial port to connect. Needed for native USB port only
|
|
}
|
|
|
|
Serial.println("Make 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);
|
|
}
|
|
}
|
|
|
|
Serial.println("GSM initialized.");
|
|
Serial.println("Enter phone number to call.");
|
|
|
|
}
|
|
|
|
void loop() {
|
|
|
|
// add any incoming characters to the String:
|
|
while (Serial.available() > 0) {
|
|
char inChar = Serial.read();
|
|
// if it's a newline, that means you should make the call:
|
|
if (inChar == '\n') {
|
|
// make sure the phone number is not too long:
|
|
if (remoteNumber.length() < 20) {
|
|
// let the user know you're calling:
|
|
Serial.print("Calling to : ");
|
|
Serial.println(remoteNumber);
|
|
Serial.println();
|
|
|
|
// Call the remote number
|
|
remoteNumber.toCharArray(charbuffer, 20);
|
|
|
|
|
|
// Check if the receiving end has picked up the call
|
|
if (vcs.voiceCall(charbuffer)) {
|
|
Serial.println("Call Established. Enter line to end");
|
|
// Wait for some input from the line
|
|
while (Serial.read() != '\n' && (vcs.getvoiceCallStatus() == TALKING));
|
|
// And hang up
|
|
vcs.hangCall();
|
|
}
|
|
Serial.println("Call Finished");
|
|
remoteNumber = "";
|
|
Serial.println("Enter phone number to call.");
|
|
} else {
|
|
Serial.println("That's too long for a phone number. I'm forgetting it");
|
|
remoteNumber = "";
|
|
}
|
|
} else {
|
|
// add the latest character to the message to send:
|
|
if (inChar != '\r') {
|
|
remoteNumber += inChar;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|