Arduino cellulära sköld handledning (9 / 9 steg)
Steg 9: röst
Om du vill initiera en röst upp samtal följande kod:
//**********************************************************************************
RINGA ETT SAMTAL
//
BUFFRING KOD BASERAT PÅ:
http://jayeshprojects.blogspot.com/2010/04/Real-Time-Mobile-GPS-Tracker-with.html
//
//**********************************************************************************
#include < SoftwareSerial.h >
#define BUFFSIZ 90
Ställ in buffert array
char at_buffer [BUFFSIZ];
char buffidx;
Nätverket tillståndsvariabler
int network_registered;
int network_AT_ready;
Koden tillståndsvariabler
int firstTimeInLoop = 1;
int firstTimeInOtherLoop = 1;
int x;
Kommer att hålla det inkommande tecknet från serieporten.
char incoming_char = 0;
Skapa en "falsk" seriell port. Stift 2 är Rx pin, pin 3 är Tx PIN-koden.
SoftwareSerial cell(2,3);
void setup() {
Initiera Arduino seriell port för felsökning.
Serial.BEGIN(9600);
Initiera virtuella seriella porten att prata med telefonen.
cell.BEGIN(9600);
Hej världen.
Serial.println ("Start SM5100B meddelande...");
Delay(1000);
Ange inledande nätverk
network_registered = 0;
network_AT_ready = 0;
}
Läs på strängar från cellulära sköld
void readATString(void) {
char c;
buffidx = 0; börja på begninning
för (x = 0; x < 10000; x ++) {
IF(cell.available() > 0) {
c=cell.Read();
om (c == -1) {
at_buffer [buffidx] = '\0';
hemkomst.
}
om (c == "\n") {
fortsätta;
}
om ((buffidx == BUFFSIZ - 1) || (c == '\r')) {
at_buffer [buffidx] = '\0';
hemkomst.
}
at_buffer [buffidx ++] = c;
}
}
}
Bearbeta AT strängarna
void ProcessATString() {
om (strstr (at_buffer, "+ SIND: 8")! = 0) {
network_registered = 0;
Serial.println ("nät nätverk inte tillgänglig").
}
om (strstr (at_buffer, "+ SIND: 11")! = 0) {
network_registered = 1;
Serial.println ("nät rekommenderat").
}
om (strstr (at_buffer, "+ SIND: 4")! = 0) {
network_AT_ready = 1;
Serial.println ("nät på redo").
}
}
void loop() {
/ * Om kallas för första gången, loop tills nätverk och på är redo * /
IF(firstTimeInLoop == 1) {
firstTimeInLoop = 0;
medan (network_registered == 0 || network_AT_ready == 0) {
readATString();
ProcessATString();
}
}
LÅT OSS GÖRA ETT TELEFONSAMTAL!
IF(firstTimeInOtherLoop == 1) {
Ändra det 10-siffriga telefonnummer till vad du vill
cell.println("ATD4155551212");
firstTimeInOtherLoop = 0;
}
}
För att få en röst upp samtal följande kod:
//**********************************************************************************
BESVARA ETT SAMTAL
//
BUFFRING KOD BASERAT PÅ:
http://jayeshprojects.blogspot.com/2010/04/Real-Time-Mobile-GPS-Tracker-with.html
//
//**********************************************************************************
#include < SoftwareSerial.h >
#define BUFFSIZ 90
Ställ in buffert array
char at_buffer [BUFFSIZ];
char buffidx;
Nätverket tillståndsvariabler
int network_registered;
int network_AT_ready;
Koden tillståndsvariabler
int firstTimeInLoop = 1;
int firstTimeInOtherLoop = 1;
int x;
Kommer att hålla det inkommande tecknet från serieporten.
char incoming_char = 0;
Skapa en "falsk" seriell port. Stift 2 är Rx pin, pin 3 är Tx PIN-koden.
SoftwareSerial cell(2,3);
void setup() {
Initiera Arduino seriell port för felsökning.
Serial.BEGIN(9600);
Initiera virtuella seriella porten att prata med telefonen.
cell.BEGIN(9600);
Hej världen.
Serial.println ("Start SM5100B meddelande...");
Delay(1000);
Ange inledande nätverk
network_registered = 0;
network_AT_ready = 0;
}
Läs på strängar från cellulära sköld
void readATString(void) {
char c;
buffidx = 0; börja på begninning
för (x = 0; x < 10000; x ++) {
IF(cell.available() > 0) {
c=cell.Read();
om (c == -1) {
at_buffer [buffidx] = '\0';
hemkomst.
}
om (c == "\n") {
fortsätta;
}
om ((buffidx == BUFFSIZ - 1) || (c == '\r')) {
at_buffer [buffidx] = '\0';
hemkomst.
}
at_buffer [buffidx ++] = c;
}
}
}
Bearbeta AT strängarna
void ProcessATString() {
om (strstr (at_buffer, "+ SIND: 8")! = 0) {
network_registered = 0;
Serial.println ("nät nätverk inte tillgänglig").
}
om (strstr (at_buffer, "+ SIND: 11")! = 0) {
network_registered = 1;
Serial.println ("nät rekommenderat").
}
om (strstr (at_buffer, "+ SIND: 4")! = 0) {
network_AT_ready = 1;
Serial.println ("nät på redo").
}
}
void loop() {
/ * Om kallas för första gången, loop tills nätverk och på är redo * /
IF(firstTimeInLoop == 1) {
firstTimeInLoop = 0;
medan (network_registered == 0 || network_AT_ready == 0) {
readATString();
ProcessATString();
}
}
IF(firstTimeInOtherLoop == 1) {
Leta efter inkommande samtal
om (strstr (at_buffer, "+ CPA: 3")! = 0) {
Svara i telefonen
cell.println("ATA");
firstTimeInOtherLoop = 0;
}
}
}