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(" ");
}
}
No hay comentarios:
Publicar un comentario