Hola; Buenas Tardes.
Luego de una semana entera de trabajar sobre el tema y con la colaboración fundamental de Robert76. Finalmente he logrado que mi Placa de Arduino UNO V3.0 logre:
Discar un Número de teléfono y ejecute la llamada a mi Celular (Sin fritar ningún componente).
Este es el Punta pié más importante (para mí). Ahora comienza la tarea de que Arduino:
Descuelgue, llame y envíe un “código”, “audio” o “Secuencia de datos” para que Otro Arduino Atienda, reciba los datos y ambos cuelguen.
Haciendo una comunicación totalmente autónoma. Aquí les dejo la Primera Etapa. Para que cada uno de Uds. pueda utilizarlo (en el caso que le sirva) de la mejor manera.
El Sketch es:String NroTel = "15999999"; // el numero de telefono para marcar
int numero = NroTel.length();
const byte tono1Pin = 10; // pin para tono 1 ~ 10
const byte tono2Pin = 11; // pin para tono 2 ~ 11
int DTMF[13][2]={
{941,1336}, // frec. p/tecla tono 0
{697,1209}, // frec. p/tecla tono 1
{697,1336}, // frec. p/tecla tono 2
{697,1477}, // frec. p/tecla tono 3
{770,1209}, // frec. p/tecla tono 4
{770,1336}, // frec. p/tecla tono 5
{770,1477}, // frec. p/tecla tono 6
{852,1209}, // frec. p/tecla tono 7
{852,1336}, // frec. p/tecla tono 8
{852,1477}, // frec. p/tecla tono 9
{941,1209}, // frec. p/tecla tono *
{941,1477}, // frec. p/tecla tono #
{0,0} // pausa
};
void setup() {
Serial.begin(9600);
Serial.print("Inciando Proceso");
pinMode(6, INPUT); digitalWrite(6, LOW); // Colgado/Descolgado
pinMode(7, INPUT); digitalWrite(7, LOW); // Tecla Tonos
pinMode(tono1Pin,OUTPUT); // Output Tono 1 [D10]
pinMode(tono2Pin,OUTPUT); // Output Tono 2 [D11]
pinMode(12,OUTPUT); digitalWrite(12, LOW);// Led Testigo DTMF
}
void loop() {
if (digitalRead(7) == HIGH){
Serial.println("Discado <Por medio de Tonos DTMF>: ");
Serial.print("Numero: ");
for(int i = 0; i < numero; i++) {
char x = NroTel.charAt(i);
int digito = String(x).toInt();
// Disco el digito del Nro Telefonico
Serial.print(digito);
byte digit = digito;
boolean tono1state = false;
boolean tono2state = false;
unsigned long tono1delay = (500000/DTMF[digit][0])-10;
unsigned long tono2delay = (500000/DTMF[digit][1])-10;
unsigned long tono1timer = micros();
unsigned long tono2timer = micros();
// Para la duracion del tiempo de un solo tono
unsigned long timer = millis();
if(digit==12) { delay(1000); } // un segundo retraso si el digito es 12
digitalWrite(12,HIGH); // Led Testigo
while(millis() - timer < 100) {
if(micros()-tono1timer>tono1delay) {
tono1timer=micros(); // Reset restablecer el temporizador del timer
tono1state=!tono1state; // Alternar estado del tono 1
digitalWrite(tono1Pin, tono1state);
}
if(micros()-tono2timer>tono2delay) {
tono2timer=micros(); // reset restablecer el Temporizador
tono2state=!tono2state; // alternar estado del tono2estado
digitalWrite(tono2Pin, tono2state);
}
}
digitalWrite(12,LOW); // Led Testigo
digitalWrite(tono1Pin,LOW);
digitalWrite(tono2Pin,LOW);
delay(150); // 100ms pausa entre los tonos
}
Serial.println(" ");
}
}
El vídeo demostrativo con el Circuíto:
Ejemplo de Aplicación:Tenemos un Arduino en un lugar que cuenta con una línea telefónica. Un sensor de agua sobre una regla al pié de un arroyo. Nosotros estamos en la Ciudad y necesitamos saber cuando el Nivel del Arroyo supere una marca pre establecida. Es ahí cuando Arduino toma el valor, llama por teléfono y le dice al Arduino Central que el Arroyo ha crecido peligrosamente.
Ahora (por ejemplo) Defensa civil sabe qué medidas tomar para evacuar a los vecinos del lugar.
Les deseo lo mejor!