// كود خاص بمشروع التحكم في جهاز استقبال الراديو
// باستخدام أزرار للتحكم في التردد والصوت
// إعداد المهندس/ أحمد درويش
#include <TEA5767.h> // مكتبة التحكم في وحدة الراديو
#include <Wire.h> // مكتبة الاتصال السلكي
// تعريف متغير لوحدة الراديو
TEA5767 Radio;
// تعريف أزرار التحكم
const int buttonVolumeUp = 2; // زر رفع مستوى الصوت
const int buttonVolumeDown = 3; // زر خفض مستوى الصوت
const int buttonFreqUp = 4; // زر رفع التردد
const int buttonFreqDown = 5; // زر خفض التردد
// تعريف المتغيرات
double currentFrequency = 98.9; // التردد الافتراضي
int volume = 8; // مستوى الصوت الافتراضي (0-15)
unsigned char buf[5]; // لتخزين بيانات الراديو
int stereo; // حالة الصوت (ستيريو أو مونو)
int signal_level; // مستوى الإشارة
void setup() {
// تهيئة Serial Monitor
Serial.begin(9600);
// تهيئة وحدة الراديو
Radio.init();
Radio.set_frequency(currentFrequency); // ضبط التردد الافتراضي
Radio.set_volume(volume); // ضبط مستوى الصوت الافتراضي
// تهيئة أزرار التحكم كمدخلات
pinMode(buttonVolumeUp, INPUT_PULLUP);
pinMode(buttonVolumeDown, INPUT_PULLUP);
pinMode(buttonFreqUp, INPUT_PULLUP);
pinMode(buttonFreqDown, INPUT_PULLUP);
Serial.println("الراديو جاهز للعمل.");
}
void loop() {
// التحكم في مستوى الصوت
if (digitalRead(buttonVolumeUp) == LOW) {
if (volume < 15) { // التأكد من أن الصوت لا يتجاوز الحد الأقصى
volume++;
Radio.set_volume(volume); // ضبط مستوى الصوت
Serial.print("الصوت الحالي: ");
Serial.println(volume);
}
delay(200); // لتجنب التكرار السريع
}
if (digitalRead(buttonVolumeDown) == LOW) {
if (volume > 0) { // التأكد من أن الصوت لا يقل عن الحد الأدنى
volume--;
Radio.set_volume(volume); // ضبط مستوى الصوت
Serial.print("الصوت الحالي: ");
Serial.println(volume);
}
delay(200);
}
// التحكم في التردد
if (digitalRead(buttonFreqUp) == LOW) {
currentFrequency += 0.1; // زيادة التردد بمقدار 0.1 ميجاهرتز
if (currentFrequency > 108.0) {
currentFrequency = 88.0; // العودة للتردد الأدنى إذا تجاوز الحد الأقصى
}
Radio.set_frequency(currentFrequency);
Serial.print("التردد الحالي: ");
Serial.print(currentFrequency);
Serial.println(" MHz");
delay(500);
}
if (digitalRead(buttonFreqDown) == LOW) {
currentFrequency -= 0.1; // تقليل التردد بمقدار 0.1 ميجاهرتز
if (currentFrequency < 88.0) {
currentFrequency = 108.0; // العودة للتردد الأعلى إذا تجاوز الحد الأدنى
}
Radio.set_frequency(currentFrequency);
Serial.print("التردد الحالي: ");
Serial.print(currentFrequency);
Serial.println(" MHz");
delay(500);
}
// قراءة حالة الراديو وعرضها
if (Radio.read_status(buf) == 1) {
double freq = Radio.frequency_available(buf) / 1000000.0; // قراءة التردد
stereo = Radio.stereo(buf);
signal_level = Radio.signal_level(buf);
Serial.print("التردد الحالي: ");
Serial.print(freq);
Serial.print(" MHz | الإشارة: ");
Serial.print(stereo ? "ستيريو " : "مونو ");
Serial.print(signal_level);
Serial.println("/15");
}
delay(100); // تأخير بسيط لتحسين الأداء
}