در خطوط مخابراتی جهت انتقال شماره ها از یک روش با عنوان DTMF استفاده می شود . در این روش تلفن یا وسیبه ای که تماس را برقرار می کند برای هر عدد یک سیگنال دو فرکانسی بر روی خط تلفن قرار می دهد که این سیگنال توسط سیستم های مخابراتی دیکد شده و در نهایت تلفن به مقصد متصل می شود . در سمت دوم ارتباط نیز از طریق دیکد سیگنال ارسالی از سمت مخابرات شماره تماس گیرنده مشخص خواهد شد . پس از ارتباط دو تلفن با فشردن هر کلید سیگنال DTMF مربوط به آن به سمت دوم ارتباط ارسال می شود . در یک تماس تلفنی شما با فشردن هر کلید می توانید سیگنال های DTMF آن را بشنوید ( همان بوق فشردن هر کلید ) . DTMF علاوه بر کاربرد هایی مانند ارتباط هر تلفن با مرکز مخابرات و یا مشخص کردن شماره تماس گیرنده ، می توان جهت انتقال دیتا نیز استفاده کرد . در این روش شما برای هر عدد از 0 تا 9 یک سیگنال خاص دارید که در سمت گیرنده می توانید با دیکود آن برای هر عدد یک عملکرد خاص تعریف کنید . ماژول MT8870 یک دیکودر DTMF می باشد . این ماژول دارای یک ورودی صدا است که می توانید آن را از طریق یک کابل AUX به موبایل متصل کنید و یا آن را از طریق یک ایزولاتور به خط تلفن متصل کنید .
در تصویر زیر پایه های این ماژول نشان داده شده است :
پین های Q1 تا Q4 خروجی های باینری ماژول می باشند . پین های VCC و GND تغذیه و زمین ماژول هستند . همچنین از پین TON جهت تشخیص سیگنال DTMF استفاده می شود .
راه اندازی ماژول MT8870 با آردوینو :
راه اندازی و به کار گیری این ماژول بسیار ساده است . با اتصال ورودی ماژول از طریق AUX به خروجی یک موبایل یا تلفن می توانید از طریق یک تلفن دیگر با موبایل تماس بگیرد که در این حالت با فشردن هر کلید مقدار آن به صورت باینری در خروجی مدار قرار خواهد گرفت .
کد های آردوینو :
void setup() { Serial.begin(9600); pinMode(3, INPUT); pinMode(4, INPUT); pinMode(5, INPUT); pinMode(6, INPUT); pinMode(7, INPUT); } void loop() { uint8_t number; bool signal; signal = digitalRead(7); if (signal == HIGH) /*When DTMF tone is detected, STQ will read HIGH for the duration of the tone*/ { delay(100); number = ( 0x00 | (digitalRead(3) << 0) | (digitalRead(4) << 1) | (digitalRead(5) << 2) | (digitalRead(6) << 3) ); switch (number) { case 0x01: Serial.println("Pin Pressed: 1"); break; case 0x02: Serial.println("Pin Pressed: 2"); break; case 0x03: Serial.println("Pin Pressed: 3"); break; case 0x04: Serial.println("Pin Pressed: 4"); break; case 0x05: Serial.println("Pin Pressed: 5"); break; case 0x06: Serial.println("Pin Pressed: 6"); break; case 7: Serial.println("Pin Pressed: 7"); break; case 0x08: Serial.println("Pin Pressed: 8"); break; case 0x09: Serial.println("Pin Pressed: 9"); break; case 0x0A: Serial.println("Pin Pressed: 0"); break; case 0x0B: Serial.println("Pin Pressed: *"); break; case 0x0C: Serial.println("Pin Pressed: #"); break; } } }