Arduino DTMF Decoder


Si tratta di un decoder DTMF costruita utilizzando un Arduino UNO e uno schizzo che ho modificato per funzionare con schermo I2C. Ho anche aggiunto una uscita seriale per visualizzare i risultati sullo schermo del computer o tablet utilizzando qualsiasi programma di terminale impostato a 9600 baud. Questo programma era originario di Brad Graham (RadBrad) di lucidscience.com. Poi ho fatto un prototipo utilizzando una scheda di decodificazione scudo DTMF, e chiuso in un "Box Really Useful (R)" 0.3L economica alle forniture per ufficio negozio. Lo schizzo è scritto per un display a 2 linee. Le immagini mostrano un display a 4 righe che stavo usando per il mio prossimo progetto, un ricevitore contatto ID per testare pannelli di allarme.

Il mio schermo DTMF

A View Inside

Scheda Decoder costruito prototipo bordo.




Facile da usare componenti Arduino.

Cenni di mia versione del decoder

Molti produttori fanno il chip 8870. Cliccando sull'immagine vi porterà i dettagli tecnici di uno di loro.

Il condensatore .1uf sarà Arduino pin 12 non è richiesta in questa applicazione.

Connessione I2C LCD Arduino UNO

Ho usato in realtà uno schermo LCD con un modulo di interfaccia seriale I2C 1602 fatturato.

// codice sorgente

// ************************************************ *******************************

// CM8870 DTMF Decoder Utilizzando UNO Arduino USARE ATMEGA 328P

//

//

// Per mostrare IC2

// Includi uscita seriale

//

// ************************************************ *******************************

// Include il codice della libreria:

#include [SoftwareSerial.h]

#include [Wire.h]

#include [LiquidCrystal_I2C.h]

LiquidCrystal_I2C lcd (0x20,16,2); // Impostare la direzione di un display LCD 0x20 16 caratteri e 2 righe

// LiquidCrystal_I2C lcd (0x27,16,2); // Impostare la direzione di un display LCD 0x27 16 caratteri e 2 righe

// Se lo schermo LCD ha un indirizzo linea 0x27 2 0f uso.

// Variabili utilizzate

DTMF int;

CNTR int;

switchPin int = 2; // I dati DTMF validi se alta da CM8870

int val; // Variabile per leggere lo stato di pin

int ButtonState; // Variabile di tenere l'ultimo stato tasto

Dial String (16); // Stringa da contenere DTMF

Dialcomp String (16); // Stringa da contenere DTMF

void (* resetFunc) (void) = 0; // Dichiarare funzione di reset @ indirizzo 0

void setup () {// viene utilizzato per cancellare lo schermo dopo 17 cifre

flag = "";

cntr = 0;

Serial.begin (9600);

// uscite agli ingressi CM8870 Arduino

pinMode (3, INPUT); // Un po 'significativo, pin 11 del CM8870

pinMode (4, INPUT); // Bit significativo 2 pin 12 del CM8870

pinMode (5, INPUT); // Significativo Bit 4 pin 13 del CM8870

pinMode (6, INPUT); // Significativo Bit 8 pin 14 CM8870

pinMode (2, INPUT); // Strobe, morsetto 15 di CM8870

// PinMode (10, INPUT);

// Valida pin CM8870 dati diventa alto quando il codice DTMF è visto valido

ButtonState = digitalRead (switchPin); // Leggere lo stato iniziale, terminale 15 del CM8870

lcd.init (); // Inizializza il LCD

lcd.clear (); // Clear LCD

// La retroilluminazione

//Serial.write(17);

lcd.backlight ();

ritardo (100);

// Stampa RESET Messaggio

lcd.setCursor (2, 0); // Cambiare il Centro messaggi

Serial.write (13); // Carriage Return

Serial.write (10); // Interruzione di riga

lcd.print ("Ripristino configurazione di sistema");

Serial.print ("Ripristino configurazione di sistema");

Serial.write (13); // Carriage Return

Serial.write (10); // Interruzione di riga

ritardo (1000);

lcd.clear ();

lcd.setCursor (0,0); // Cursore di cui alla colonna 0, riga 0

lcd.print ("Digits = 0");

//lcd.print("0 ");

}

// Visualizza DTMF dati chip di decodifica

// Questa parte controlla l'uscita di linea e solo DTMF valido

// Leggere e stampati quando si rilascia il pulsante. Questo

// Le impedisce di stampare più copie di uno stesso

// Si preme I dati e il tasto sulla tastiera.

void loop () {

val = digitalRead (switchPin); // Leggere il valore di ingresso e conservarla in val

if (val! = ButtonState) {// il pin di ingresso è cambiato

if (val == LOW) {// controlla se il valore è ora più alto

CNTR ++; // contatore Incremento figure selezionate

// Decode dati CM8870

DTMF = 0;

if (digitalRead (3) == HIGH) = DTMF DTMF + 1;

if (digitalRead (4) == HIGH) = DTMF DTMF + 2;

if (digitalRead (5) == HIGH) = DTMF DTMF + 4;

if (digitalRead (6) == HIGH) = DTMF DTMF + 8;

// Numeri di selezione Visualizza Contatore cifre conteggio

lcd.setCursor (0,0);

lcd.print ("Digits =");

lcd.print (CNTR);

//Serial.print("Digits = ");

//Serial.print(cntr);

DTMF // DATI DISPLAY

if (0 == DTMF) = {comporre compose + "D";

dialcomp = "D";}

if (DTMF == 10) {comporre compose + = "0";

dialcomp = "0";}

else {if (DTMF == 11) {comporre compose + = '*';

dialcomp = "*";}

else {if (DTMF == 12) {comporre compose + = "#";

dialcomp = "#";}

else {if (DTMF == 13) {comporre compose + = "A";

dialcomp = "A";}

else {if (DTMF == 14) {comporre compose + = "B";

dialcomp = "B";}

else {if (DTMF == 15) {comporre compose + = "C";

dialcomp = "C";}

else {write = + DTMF;

dialcomp = String (DTMF);}}}}}}

lcd.setCursor (0,1); // Stampa in seconda colonna fila ist

lcd.print (marca); // I dati numerici contenuti nella DTMF

Serial.print (dialcomp);

//Serial.print(dial);

if (CNTR> 16) // Restituisce il codice a 0 quando si seleziona 16 cifre

//lcd.scrollDisplayLeft ();

// {

resetFunc ();

//}

// Per (int positionCounter = 0; positionCounter <29; positionCounter ++) {

// Sposta di una posizione verso sinistra:

// Lcd.scrollDisplayLeft ();

// Aspetta un po '":

ritardo (150);

//}

}

}

ButtonState = val; // Salva prezioso contributo è stato il tono di chip CM8870

}

Importante!

Cambiare [origine include dichiarazioni.

Great Stuff on eBay

Una copertura finanziaria per Arduino.

Ho usato questa casella economico per mantenere i miei progetti. Cliccando sull'immagine si giunge alla fonte della scatola.

Cerca

Amazon

(0)
(0)

Commenti - 0

Non ci sono commenti

Aggiungi un commento

smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile smile smile smile smile
smile smile smile smile
Caratteri rimanenti: 3000
captcha