Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Radio FM Kabin Shower Berbasis Arduino

Komponen dan persediaan

Arduino Nano R3
× 1
Modul radio RDA Mikroelektronik RDA5807 FM
× 1
versi LCD 3V-5V NXP NOKIA 5110 LCD
× 1
Modul RTC kecil (DS1307 + 24c32 EEPROM)
× 1
PAM8403 - penguat kelas D 2X3W
× 1
Modul Konverter Step Down Instrumen Texas LM2596 DC-DC
× 1
LIR2032 3.6V Baterai Isi Ulang
× 1
Resistor 100 ohm
× 1
Resistor 1k ohm
× 1
Resistor 10k ohm
× 6
Resistor 100k ohm
× 1
Mosfet daya Infineon IRLZ44
× 1
Speaker PEIYING PY1010C 60W 4Ohm.
× 1
Suplai daya 12V 3A ditemukan di memo.
× 1
2200 uF 25V kapasitor
× 2
Kapasitor 100 F
× 1
bohlam LED 3W untuk menggantikan halogen G4 10W yang ada
× 1

Tentang proyek ini

Beberapa tahun yang lalu, saya membeli kabin shower Cina yang telah memasang sistem kontrol TR028 dengan radio. Sayangnya suatu hari yang menyenangkan saya menemukan sistem ini mati secara kompetitif. Tidak ada yang bisa memperbaikinya jadi saya membeli radio shower lain yang lebih murah. Itu mati setelah sekitar satu tahun.

Keluarga saya dulu memiliki radio di kabin shower, jadi saya mulai mempelajari bagaimana radio ini dibuat. Di dalam sistem TR028 saya menemukan modul TEA5767 yang aneh. Beberapa pencarian memberi tahu saya bahwa ini adalah modul radio FM kecil yang murah. Dalam hasil pencarian saya menemukan modul radio FM lain yang menarik - RDA5807. Ini sangat mirip dengan TEA5767, tetapi memiliki fitur RDS, kontrol volume dan bass boost. Jadi keputusan saya adalah menggunakan RDA5807 dalam proyek baru saya.

Saya mencari di Internet dan menemukan beberapa proyek di mana modul RDA5807 digunakan:

  • Proyek utama yang menginspirasi visi saya.
  • Variasi tempat saya menemukan tanda kekuatan sinyal yang bagus dan informasi yang lebih berguna.
  • Variasi lain.
  • Perpustakaan modul radio yang bagus
  • Informasi yang berguna (dalam bahasa Rusia).
  • Satu Lagi

Ada kemungkinan untuk mengulang salah satu proyek ini, tetapi tidak ada yang benar-benar memenuhi visi saya.

Visi saya adalah:

  • Perangkat dengan layar sentuh untuk memastikan konstruksi tahan air. (Saya menggunakan enklosur dengan panel sentuh dari TR0289 mati).
  • Radio
  • Beberapa preset stasiun radio favorit
  • Kontrol volume
  • Fitur pencarian stasiun radio otomatis
  • Kemungkinan untuk mengingat stasiun radio yang dicari
  • Jam untuk melihat waktu saat ini.
  • Fitur Nyala/Mati
  • Kontrol cahaya
  • Beberapa informasi kecil ditampilkan seperti suhu di dalam kabin, RDS.

Di Aliexpress, saya membeli modul RDA5807, Tiny RTC dengan EEPROM 32kb, PAM8403, NOKIA 5110 LCD, LM2596 dengan harga kurang dari 10€ dan memulai eksperimen.

Apa yang akhirnya saya dapatkan:

  • Radio FM dengan 2 baris (!) RDS
  • 6 preset untuk stasiun radio favorit
  • Penalaan otomatis atau manual
  • Kemungkinan untuk menyimpan stasiun radio favorit ke salah satu dari 6 preset
  • Kontrol peningkatan volume dan bass
  • Kontrol lampu kabin shower
  • Kalender semut jam
  • RSSI (indikator kekuatan sinyal radio)
  • Indikator mode stereo
  • Fitur Nyala/Mati

Beberapa gambar proyek

Untuk tampilan NOKIA 5110 saya menemukan perpustakaan yang bagus

Memahami cara kerja panel sentuh TR028. Sebenarnya itu 2 kolom X 7 baris keypad. Untuk mengoperasikannya saya menggunakan library ini.

Papan rakitan ditempatkan di dalam kotak. Anda dapat melihat bahwa saya telah melepas soket USB dan menyolder kabel secara langsung. Ini untuk kemungkinan menghubungkan PC dan peningkatan perangkat lunak di masa mendatang.

Cara kerjanya:

  • Radio tidak mau hidup setelah catu daya tersambung. Ini mencegah pemutaran radio jika saluran listrik tidak stabil atau daya terputus. Untuk menyalakan radio pertama kali Anda harus menghubungkan catu daya dan setelah beberapa detik tekan tombol daya. Radio akan memutar stasiun radio yang terakhir diputar dengan volume pada level 03. Mode pengoperasian adalah kontrol VOLUME. Untuk mematikan radio cukup tekan tombol daya. Perangkat akan mematikan LCD, LCD backlite, amplifier dan lampu LED/halogen.
  • Untuk mencari stasiun radio, Anda dapat memilih mode penyetelan Otomatis atau Manual dengan menekan tombol "Mod". Dengan menekan tombol "<" atau ">", radio akan mencari stasiun radio yang frekuensinya berkurang atau bertambah. Untuk menyimpan stasiun radio yang ditemukan, tekan tombol "Mem" dan Anda memiliki waktu 4 detik untuk memilih salah satu dari enam preset yang ingin Anda simpan.
  • Untuk melihat tanggal sekarang, tekan tombol I (info). Tanggal akan ditampilkan 4 detik. Bagian kode ini dapat dioptimalkan karena menggunakan fungsi delay().
  • Untuk menyesuaikan jam, tekan dan tahan tombol D setidaknya selama 2 detik saat Anda mendengar sinyal akhir jam (sinyal waktu), atau melihat detik terakhir dalam satu jam pada beberapa jam yang akurat. Lepaskan tombol D untuk menyetel jj.00.00. Jika jam Anda terlambat dari 15 menjadi 1 menit, menit dan detik akan disetel ke 00 dan jam akan ditambah 1 dan jika jam Anda terburu-buru dari 1 menjadi 15 menit, hanya menit dan detik yang akan disetel ke 00 setelah prosedur penyesuaian .

Apa yang akan saya ubah:

  • Resonator pada modul RTC memiliki akurasi yang lebih baik tetapi fitur penyesuaian jam memungkinkan untuk mengatasi masalah ini.
  • LCD 5110 ke yang lebih besar dan lebih terang. Mungkin beberapa LCD berwarna 1, 8" atau 2.0" karena terkadang sulit untuk membaca informasi pada LCD NOKIA 5110 yang digunakan dalam proyek.
  • Penguat PAM8403 ke PAM8610 yang memiliki daya keluaran 2x15W atau TDA7297 dengan karakteristik yang sama.

Kesimpulan:

Saya senang bagaimana proyek baru saya bekerja. Tidak ada masalah yang diamati setelah 1 bulan bekerja kecuali akurasi jam.

Saya bukan seorang programmer sehingga kode dapat dioptimalkan lebih baik. Pengalaman pemrograman C/C++ saya sekitar satu tahun, belajar sendiri. Ini adalah proyek berguna pertama saya menggunakan platform Arduino dan proyek pertama yang saya bagikan di hub. Harap mengerti dan maafkan saya atas kemungkinan kesalahan dan bahasa Inggris saya yang buruk.

Jika Anda memiliki pertanyaan jangan ragu untuk bertanya di komentar atau PM.

Pembaruan 1.:Pembaruan perangkat keras dan perangkat lunak kecil.

Perangkat keras - memasang sekering 2A pada saluran 12V. Hanya untuk alasan keamanan.

Perangkat lunak - menambahkan baris 586 menu = 1; Ini mengembalikan mode ke VOLUME setelah menekan tombol daya.

Pembaruan 2:

Sayangnya LCD di radio saya akan mati.

Jadi saya mencari alternatif LCD NOKIA 5110 murah. Saya tidak akan memasang LCD 5110 baru karena kecil dan sulit dibaca. Saya rasa saya akan bereksperimen dengan LCD TFT 1,8". Hal baiknya - lebih besar, lebih cerah, memiliki resolusi yang lebih baik. Hal buruknya - saya yakin TFT 1,8" akan memakan lebih banyak sumber daya yang penting.

Saran Anda mengenai penggantian LCD dipersilakan.

Kode

  • Sketsa proyek
  • Simbol kekuatan sinyal
Sketsa proyekArduino
///////////////////////////////////////////////////////// //////////////////// shower berbasis Arduino Proyek Radio FM //// Arduino NANO, RDA5807M, RTC, EEPROM, LCD5110, Termistor //////// ////////////////////////////////////////////////////////////////// /////////#include //http://www.rinkydinkelectronics.com/library.php?id=48#include //https://github. com/cyberp/AT24Cx#include //Arduino IDE disertakan#include //http://www.mathertel.de/Arduino/RadioLibrary.aspx#include // http://www.mathertel.de/Arduino/RadioLibrary.aspx#include //https://github.com/adafruit/RTClib#include //http://www. mathertel.de/Arduino/RadioLibrary.aspx#include //http://playground.arduino.cc/Code/Keypad#define MAXmenu 4#define ledPin 13#define blPin 7//define cymbol pada tombol-tombol keypadschar keys[7][2] ={ {'L', 'P'}, //LED, POWER {'I', 'D'}, //INFO, DISPLAY {'1', '2 '}, //preset {'3', '4'}, //dari 1 {'5', '6'}, //ke 6 {'M', 'm'}, //M ODE, MEM {'<', '>'} //down, up};byte rowPins[7] ={11, 12, 10, 17, 9, 16, 8}; //sambungkan ke pinout baris dari colPins byte keypad[2] ={15, 14}; //sambungkan ke pinout kolom pada keypad//Keypad kpd =Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); Keypad keypad =Keypad( makeKeymap(keys), rowPins, colPins, 7, 2 ); boolean bass =0, dspl =0, memdisplay =0, mempress =0, adj =0;boolean ledPin_state, power_state;int menu;int volume, volumeOld =5;int frekuensi, frequencyOld;int txtl =0, temparray =0; int sample[5];unsigned int status[6];unsigned long timeprevious =0, timeprev =0;// EEPROM objectAT24CX mem;RTC_DS1307 rtc;//(clk, din, dc, ce, rst)LCD5110 lcd(6, 5, 4, 2, 3);// Buat instance radio RDA5807 chip radioRDA5807M;/// dapatkan parser RDSRDSParser rds;extern unsigned char SmallFont[];extern uint8_t signal5[];extern uint8_t signal4[];extern uint8_t signal3[];extern uint8_t signal2[];extern uint8_t signal1[];//--------------------------SETUP---- ------------------------------//pengaturan batal(){ analogReference(EKSTERNAL); Serial.begin(9600); Kawat.mulai(); // Inisialisasi Radio radio.init(); radio.debugEnable(); //inisialisasi Layar lcd.InitLCD(); lcd.clrScr(); //lcd.setContrast(45); //sesuaikan jika default tidak bagus lcd.setFont(SmallFont); lcd.enableSleep(); //mode siaga power_state =0; //jangan "menghidupkan" unit (mode siaga) saat catu daya terhubung //inisialisasi keypad keyboard.addStatedEventListener(keypadEvent); // Tambahkan event listener untuk keypad keypad ini.setHoldTime(1500); pinMode(ledPin, OUTPUT); // Menetapkan pin digital sebagai output. pinMode(blPin, OUTPUT); // Menetapkan pin digital sebagai output. digitalWrite(ledPin, RENDAH); // Matikan LED. digitalWrite(blPin, RENDAH); // Matikan BL (mode stand-by) ledPin_state =digitalRead(ledPin); // Simpan status LED awal. TINGGI saat LED menyala. //batalkan komentar jika rtc perlu disesuaikan /*if (! rtc.isrunning()) { Serial.println("RTC TIDAK berjalan!"); // baris berikut menetapkan RTC ke tanggal &waktu sketsa ini dikompilasi rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Baris ini menetapkan RTC dengan tanggal &waktu yang eksplisit, misalnya untuk menetapkan // 21 Januari 2014 pukul 3 pagi, Anda akan memanggil://rtc.adjust(DateTime(2018, 3, 13, 22, 33, 0) ); }*/ // membaca nilai frekuensi frekuensi terakhir =mem.readInt(201); volume =2; //tingkat volume pada menu mulai =1; //menampilkan mode VOLUMME di awal jika (volume <0) volume =0; jika (volume> 15) volume =15; jika (frekuensi <0) frekuensi =0; jika (frekuensi> 210) frekuensi =210; WriteReg(0x02, 0xC00d); // tulis 0xC00d ke Reg.2 ( soft reset, aktifkan,RDS, ) //bbz canal(frekuensi); // mengatur rantai informasi untuk data RDS. radio.attachReceiveRDS(RDS_process); rds.attachServicenNameCallback(NamaLayanan Tampilan); //rds.attachTimeCallback(Waktu Tampilan); // untuk penggunaan di masa mendatang. sangat tidak akurat ketika sinyal RDS lemah. rds.attachTextCallback(DisplayText);}//-------------akhir Setup-------------- -----------------------////------------------------ --LOOP----------------------------------------//void loop(){ if ( frekuensi !=frekuensiLama) { frekuensiLama =frekuensi; mem.writeInt(201, frekuensi); kanal (frekuensi); } if (volume !=volumeOld) { volumeOld =volume; WriteReg(5, 0x84D0 | volume); } //membaca tombol char keyboard =keypad.getKey(); //periksa radio data RDS.checkRDS(); // membaca pemeriksaan suhu setiap 0,6 detik sebanyak 5 kali dan menghitung rata-rata float rata-rata; unsigned long timenow =milis(); if ((unsigned long)(timenow - timeprevious)> 600) { timeprevious =timenow; sampel[temparray] =analogRead(A7); temporay++; } if (temparray ==5) { // menghitung rata-rata pembacaan rata-rata =0; for (int i =0; i <5; i++) { rata-rata +=sampel[i]; } printTemp(rata-rata); temporay =0; } // 4 detik timeout untuk tampilan MEM dan masukkan unsigned long dabar =millis(); if (mempress ==1) { timeprev =dabar; memdisplay =1; mempres =0; } if (memdisplay ==1) { if ((unsigned long)(dabar - timeprev) <4000) { memdisplay =1; } else { memdisplay =0; } } /*Instruksi penyesuaian waktu:1. Jalankan monitor serial 2. Atur 9600 boud 3. Tekan enter untuk mengaktifkan pembacaan serial 4. Tulis hXX, di mana XX adalah pembacaan jam saat ini pada beberapa server waktu dan tekan enter untuk menyesuaikan jam RTC. Serial monitor harus menulis "Jam XX" 5. Tulis mXX, di mana XX adalah menit saat ini yang dibaca di beberapa server waktu dan tekan enter untuk menyesuaikan menit RTC. Serial monitor harus menulis "Menit XX" 6. Tulis sXX, di mana XX adalah pembacaan detik saat ini pada beberapa server waktu dan tekan enter untuk menyesuaikan detik RTC. Monitor serial harus menulis "Detik XX" 7. Anda hanya dapat menyesuaikan jam. Yaitu. ketika waktu musim panas diubah. 8. Anda dapat menyesuaikan detik hanya jika Anda perlu mengoreksi waktu saja. 9. Jika RTC harus disesuaikan dari nol (tahun, bulan, hari, dll), hapus tanda komentar pada baris pernyataan penyesuaian RTC dan unggah sketsa. */ DateTime sekarang =rtc.now(); if (Serial.available()> 0) { char t =Serial.read(); switch (t) { case ('h'):{ unsigned int jam =Serial.parseInt(); rtc.adjust(DateTime(now.year(), now.month(), now.day(), hours, now.minute(), now.second())); Serial.println(F("Jam")); Serial.println(jam); merusak; } case ('m'):{ unsigned int menit =Serial.parseInt(); rtc.adjust(DateTime(now.year(), now.month(), now.day(), now.hour(), mins, now.second())); Serial.println(F("Menit")); Serial.println(mnt); merusak; } case ('s'):{ unsigned int sec =Serial.parseInt(); rtc.adjust(DateTime(now.year(), now.month(), now.day(), now.hour(), now.minute(), sec)); Serial.println(F("Detik")); Serial.println(dtk); merusak; } } } //menampilkan berbagai informasi pada LCD printSignalStrength(); printLines(); printWaktu(); printFreq(); printStereo(); printMode(); printMenu(); tanggal cetak(); lcd.update();}//-------------Akhir Loop-------------- ----------------------//void printSignalStrength() //dari 0000 hingga 1111 (0-63){ unsigned int sig; status baca(); sig =status[1] / 1000; if ((sig>=0) &&(sig <=12)) { lcd.drawBitmap(1, 1, signal1, 17 , 6); } if ((sig>=13) &&(sig <=24)) { lcd.drawBitmap(1, 1, signal2, 17 , 6); } if ((sig>=25) &&(sig <=36)) { lcd.drawBitmap(1, 1, signal3, 17 , 6); } if ((sig>=37) &&(sig <=48)) { lcd.drawBitmap(1, 1, signal4, 17 , 6); } if (sig>=49) { lcd.drawBitmap(1, 1, signal5, 17 , 6); }}void printLines(){ lcd.drawLine(0, 9, 84, 9); lcd.drawLine(0, 39, 84, 39);}void printTemp(float average) //bisa dioptimalkan :){ average /=5; rata-rata =1023 / rata-rata - 1; rata-rata =51700 / rata-rata; mengapung steinhart; steinhart =rata-rata / 50000; // (R/Ro) steinhart =log(steinhart); // ln(R/Ro) steinhart /=3950; // 1/B * ln(R/Ro) steinhart +=1.0 / (25 + 273.15); // + (1/Ke) steinhart =1,0 / steinhart; // membalikkan steinhart -=273,15; // konversi celcius int tmp =bulat(steinhart); lcd.printNumI(tmp, 60, 1, 2); lcd.print(F("~C"), 72, 1;}/// Perbarui teks ServiceName pada layar LCD ketika dalam mode RDS.void DisplayServiceName(char *name){ lcd.print(name, 18, 22);}void DisplayText(char *text){ //scroll baris kedua RDS lcd.print(text, txtl, 30); txtl =txtl - 66; if (txtl ==-396) txtl =0;}void printTime(){ DateTime now =rtc.now(); lcd.printNumI(sekarang.jam(), 24, 1, 2, '0'); lcd.print(":", 36, 1); lcd.printNumI(now.minute(), 42, 1, 2, '0');}void printDate(){ if (dspl ==1) { //memeriksa apakah tombol tampilan ditekan ClearRDS(); DateTime sekarang =rtc.now(); lcd.printNumI(sekarang.tahun(), 12, 22, 4); lcd.print(".", 36, 22); lcd.printNumI(sekarang.bulan(), 42, 22, 2, '0'); lcd.print(".", 54, 22); lcd.printNumI(sekarang.hari(), 60, 22, 2, '0'); int dw =sekarang.dayOfTheWeek(); sakelar (dw) { kasus 0:lcd.print(F("Sekmadienis"), CENTER, 30); //minggu F() makro untuk menyimpan sdram break; kasus 1:lcd.print(F("Pirmadienis"), CENTER, 30); //senin dll... istirahat; kasus 2:lcd.print(F("Antradienis"), CENTER, 30); merusak; kasus 3:lcd.print(F("Treciadienis"), CENTER, 30); merusak; kasus 4:lcd.print(F("Ketvirtadienis"), CENTER, 30); merusak; kasus 5:lcd.print(F("Penktadienis"), CENTER, 30); merusak; kasus 6:lcd.print(F("Sestadienis"), CENTER, 30); merusak; } lcd.update(); penundaan (4000); //tidak optimal ClearRDS(); dspl =0; }}void printMode(){ lcd.print(F("MODE "), 0, 41);}void printMenu(){ if (menu ==1) { lcd.print(F("VOLUME "), 30, 41); if (volume <0) { lcd.print(F("XX"), 72, 41); } else lcd.printNumI(volume + 1, 72, 41, 2, '0'); } if (menu ==2) { lcd.print(F("AUTO-TUNE"), 30, 41); } if (menu ==3) { lcd.print(F("MAN.-TUNE"), 30, 41); } if (menu ==4) { lcd.print(F(" BASS "), 30, 41); if (bass ==0) { lcd.print(F("OFF"), 66, 41); } else lcd.print(F("ON"), 66, 41); }}void printFreq() //menampilkan frekuensi saat ini{ int frHundr, frDec; unsigned int fr; fr =870 + frekuensi; frHundr =fr / 10; frDec =fr % 10; lcd.printNumI(frHundr, 30, 12, 3); lcd.print(F("."), 48, 12); lcd.printNumI(frDec, 54, 12, 1); lcd.print(F("MHz"), 66, 12);}void printStereo(){ if (memdisplay ==1) { //jika tombol MEM ditekan lcd.print(F("MEM>"), 0 , 12); } //Deteksi stereo jika ((status[0] &0x0400) ==0) lcd.print(F("( )"), 0, 12); //berarti MONO else lcd.print (F("(ST)"), 0, 12); //berarti STEREO}pencarian kosong(byte direct) //pencarian otomatis{ byte i; //mencari ke atas atau ke bawah jika (!direc) WriteReg(0x02, 0xC30d); else WriteReg(0x02, 0xC10d); for (i =0; i <10; i++) { delay(200); status baca(); if (status[0] &0x4000) { frekuensi =status[0] &0x03ff; merusak; } }}kanal kosong( int kanal) //frekuensi langsung{ byte numberH, numberL; nomorH =kanal>> 2; numberL =((kanal &3) <<6 | 0x10); Wire.beginTransmission (0x11); Kawat.tulis (0x03); Wire.write(nomorH); // tulis frekuensi menjadi bit 15:6, setel bit tune Wire.write(numberL); Wire.endTransmission();}//RDA5807_adrs=0x10;// I2C-Address RDA Chip untuk Accessint Readstatus(){ Wire.requestFrom(0x10, 12); for (int i =0; i <6; i++) { status[i] =256 * Wire.read () + Wire.read(); } Wire.endTransmission();}//RDA5807_adrr=0x11;// I2C-Address RDA Chip untuk Accessvoid WriteReg(byte reg, unsigned int valor){ Wire.beginTransmission(0x11); Wire.write(reg); Wire.write(keberanian>> 8); Wire.write(keberanian &0xFF); Kawat.endTransmisi(); //delay(50);}void RDS_process(uint16_t block1, uint16_t block2, uint16_t block3, uint16_t block4) { rds.processData(block1, block2, block3, block4);}void ClearRDS(){ lcd.print(" ", 0, 22); lcd.print(" ", 0, 30);}// Merawat beberapa acara khusus.void keypadEvent(tombol KeypadEvent, KeyState kpadState ) { switch (kpadState) { /* Cara lain untuk mengatur waktu:1. Tekan dan tahan tombol D selama minimal 2 detik, saat Anda mendengar sinyal waktu berakhirnya jam, atau melihat detik terakhir jam pada beberapa jam yang akurat. 2. Lepaskan tombol D untuk mengatur jj.00.00. 3. Penyesuaian lagi, jika jam Anda terlambat dari 15 menjadi 1 menit, menit dan detik akan menjadi 00 dan jam akan bertambah 1. 4. Jika jam Anda terburu-buru dari 1 menjadi 15 menit, hanya menit dan detik yang akan menjadi 00 . */ case HOLD:if (key =='D' &&power_state ==1) { adj =1; } merusak; case RELEASED:if (key =='D' &&adj ==1) { DateTime now =rtc.now(); if (now.minute()>=45 &&now.minute() <=59) { rtc.adjust(DateTime(now.year(), now.month(), now.day(), now.hour() + 1, 0, 0)); } if (now.minute()>=1 &&now.minute() <=15) { rtc.adjust(DateTime(now.year(), now.month(), now.day(), now.hour( ), 0, 0)); } adj =0; } merusak; case DITEKAN:if (key =='M' &&power_state ==1) { memdisplay =0; menu++; if (menu> MAXmenu)menu =1; } if (kunci =='>' &&power_state ==1) { memdisplay =0; switch (menu) { case 1:if (volume <0) { if (bass ==0) { WriteReg(0x02, 0xD00D); volume =0; } if (bass ==1) { WriteReg(0x02, 0xC00D); volume =0; } } lain volume++; jika (volume> 15)volume =15; merusak; kasus 2:cari(0); HapusRDS(); merusak; kasus 3:frekuensi++; jika (frekuensi> 210)frekuensi =210; // batas frekuensi atas ClearRDS(); merusak; kasus 4:jika (bass ==0) { bass =1; WriteReg(0x02, 0xD00D); } merusak; } } if (kunci =='<' &&power_state ==1) { memdisplay =0; switch (menu) { kasus 1:volume--; if (volume <0) { WriteReg(0x02, 0x800D); //volume =0; } merusak; kasus 2:cari(1); HapusRDS(); merusak; kasus 3:frekuensi--; jika (frekuensi <0)frekuensi =0; HapusRDS(); merusak; kasus 4:jika (bass ==1) { bass =0; WriteReg(0x02, 0xC00D); } merusak; } } // Lampu LED hidup/mati if (key =='L' &&power_state ==1) { digitalWrite(ledPin, !digitalRead(ledPin)); ledPin_state =digitalRead(ledPin); // Ingat status LED, menyala atau tidak menyala. } // menyalakan atau mematikan "daya" (mode siaga) if (kunci =='P') { digitalWrite(blPin, !digitalRead(blPin)); power_state =digitalRead(blPin); if (power_state ==0) { lcd.enableSleep(); digitalWrite(ledPin, RENDAH); } else lcd.disableSleep(); volume =2; menu =1; } if (key =='1' &&power_state ==1) { switch (memdisplay) { case 0:frequency =mem.readInt(110); HapusRDS(); merusak; kasus 1:mem.writeInt(110, frekuensi); memdisplay =0; merusak; } } if (key =='2' &&power_state ==1) { switch (memdisplay) { case 0:frequency =mem.readInt(120); HapusRDS(); merusak; kasus 1:mem.writeInt(120, frekuensi); memdisplay =0; merusak; } } if (key =='3' &&power_state ==1) { switch (memdisplay) { case 0:frequency =mem.readInt(130); HapusRDS(); merusak; kasus 1:mem.writeInt(130, frekuensi); memdisplay =0; merusak; } } if (key =='4' &&power_state ==1) { switch (memdisplay) { case 0:frequency =mem.readInt(140); HapusRDS(); merusak; kasus 1:mem.writeInt(140, frekuensi); memdisplay =0; merusak; } } if (key =='5' &&power_state ==1) { switch (memdisplay) { case 0:frequency =mem.readInt(150); HapusRDS(); merusak; kasus 1:mem.writeInt(150, frekuensi); memdisplay =0; merusak; } } if (key =='6' &&power_state ==1) { switch (memdisplay) { case 0:frequency =mem.readInt(160); HapusRDS(); merusak; kasus 1:mem.writeInt(160, frekuensi); memdisplay =0; merusak; } } if (kunci =='m' &&power_state ==1) { mempress =1; } else { mempres =0; } if (key =='I' &&power_state ==1) { dspl =1; } merusak; }}
Simbol kekuatan sinyalC/C++
#jika didefinisikan(__AVR__) #include  #define imagedatatype const uint8_t#elif didefinisikan(__PIC32MX__) #define PROGMEM #define imagedatatype const unsigned char#elif didefinisikan(__arm__) #define PROGMEM #define PROGMEM # const unsigned char#endifimagedatatype signal5[] PROGMEM={0xC1, 0xC2, 0xC4, 0xFF, 0xC4, 0xC2, 0xC1, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0xF8, 0xC0, 0xFC, 0xC0, // 0x00FE (16) piksel , };imagedatatype signal4[] PROGMEM={0xC1, 0xC2, 0xC4, 0xFF, 0xC4, 0xC2, 0xC1, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0xF8, 0xC0, 0xFC, 0xC0, // 0x0010 (16) piksel0xC0, };imagedatatype signal3[] PROGMEM={0xC1, 0xC2, 0xC4, 0xFF, 0xC4, 0xC2, 0xC1, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0xF8, 0xC0, 0xC0, 0xC0, // 0x0010 (16) piksel0xC0, };imagedatatype signal2[] PROGMEM={0xC1, 0xC2, 0xC4, 0xFF, 0xC4, 0xC2, 0xC1, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, // 0x0010 (16) piksel0xC0, }; imagedatatype signal1[] PROGMEM={0xC1, 0xC2, 0xC4, 0xFF, 0xC4, 0xC2, 0xC1, 0xC0, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, // 0x0010 (16) piksel0xC0, };

Skema


Proses manufaktur

  1. Radio
  2. Sirkuit Terintegrasi
  3. JX Wave Generator
  4. MotionSense
  5. PuzzleBox
  6. Pengatur Pancuran
  7. Pemindai Suhu IR Nirkabel
  8. Tangki WalaBeer
  9. Lab Mikrokontroler
  10. MOSMusic