Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Op Arduino gebaseerde FM-radio voor douchecabine

Componenten en benodigdheden

Arduino Nano R3
× 1
RDA Microelectronics RDA5807 FM-radiomodule
× 1
NXP NOKIA 5110 LCD 3V-5V versie
× 1
Kleine RTC-module (DS1307 + 24c32 EEPROM)
× 1
PAM8403 - 2X3W klasse D versterker
× 1
Texas Instruments LM2596 DC-DC Step Down Converter-module
× 1
LIR2032 3.6V oplaadbare batterij
× 1
Weerstand 100 ohm
× 1
Weerstand 1k ohm
× 1
Weerstand 10k ohm
× 6
Weerstand 100k ohm
× 1
Infineon IRLZ44 power Mosfet
× 1
PEIYING PY1010C 60W 4Ohm luidsprekers.
× 1
12V 3A voeding gevonden in schroot.
× 1
2200 uF 25V condensatoren
× 2
Condensator 100 µF
× 1
3W LED-lampen ter vervanging van bestaande G4 10W-halogenen
× 1

Over dit project

Een paar jaar geleden heb ik een Chinese douchecabine gekocht waarin het TR028-bedieningssysteem met radio is geïnstalleerd. Helaas vond ik op een mooie dag dit systeem volledig dood. Niemand kon het repareren, dus kocht ik een andere, goedkopere doucheradio. Het stierf na ongeveer een jaar.

Mijn familie had vroeger een radio in de douchecabine, dus ik begon te bestuderen hoe deze radio's werden gemaakt. In het TR028-systeem vond ik een vreemde TEA5767-module. Sommige zoekopdrachten laten me weten dat het een kleine goedkope FM-radiomodule is. In de zoekresultaten vond ik nog een interessante FM-radiomodule - RDA5807. Het lijkt erg op TEA5767, maar heeft functies voor RDS, volumeregeling en basversterking. Dus mijn beslissing was om RDA5807 te gebruiken in mijn nieuwe project.

Ik zocht op internet en vond verschillende projecten waar de RDA5807-module werd gebruikt:

  • Hoofdproject dat mijn visie inspireerde.
  • Variatie waarbij ik een geweldig teken voor signaalsterkte vond en meer nuttige informatie.
  • Nog een variatie.
  • Geweldige bibliotheek met radiomodules
  • Nuttige informatie (in het Russisch).
  • Nog één

Het was mogelijk om een ​​van deze projecten te herhalen, maar niemand voldeed precies aan mijn visie.

Mijn visie was:

  • Het apparaat met touchscreen om een ​​waterdichte constructie te garanderen. (Ik gebruikte een behuizing met aanraakpaneel van de dode TR0289).
  • Radio
  • Verschillende voorinstellingen voor favoriete radiozenders
  • Volumeregeling
  • Automatische zoekfunctie voor radiostations
  • Mogelijkheid om gezochte radiozender te onthouden
  • Een klok om de huidige tijd te zien.
  • Aan/Uit-functie
  • Lichtregeling
  • Enkele kleine informatieweergave zoals temperatuur in een cabine, RDS.

Op Aliexpress kocht ik RDA5807, Tiny RTC met 32kb EEPROM, PAM8403, NOKIA 5110 LCD, LM2596-modules voor minder dan € 10 en begon met experimenten.

Wat ik uiteindelijk heb:

  • FM-radio met 2 rijen (!) RDS
  • 6 voorinstellingen voor favoriete radiostations
  • Automatisch of handmatig afstemmen
  • Mogelijkheid om favoriete radiozender op te slaan in een van de 6 voorkeurzenders
  • Volume- en basversterking
  • Bediening douchecabineverlichting
  • Een klokmierenkalender
  • RSSI (indicator voor radiosignaalsterkte)
  • Stereomodus-indicator
  • Aan/Uit-functie

Enkele foto's van het project

Voor de NOKIA 5110-weergave vond ik een mooie bibliotheek

Begrepen hoe het TR028-aanraakscherm werkt. Eigenlijk is het een toetsenbord met 2 kolommen X 7 rijen. Om het te bedienen heb ik deze bibliotheek gebruikt.

Geassembleerd bord geplaatst in de doos. Je kunt zien dat ik de USB-aansluiting heb gedesoldeerd en de kabel direct heb gesoldeerd. Het is voor de mogelijkheid om een ​​pc aan te sluiten en toekomstige softwareverbeteringen.

Hoe het werkt:

  • De radio gaat niet aan nadat de voeding is aangesloten. Dit voorkomt het afspelen van de radio als de powerline niet stabiel is of de stroom uitvalt. Om de radio voor de eerste keer aan te zetten, moet u de voeding aansluiten en na enkele seconden op de aan/uit-toets drukken. De radio speelt het laatst afgespeelde radiostation af met een volume op niveau 03. De bedieningsmodus is VOLUME-regeling. Om de radio uit te zetten, drukt u gewoon op de aan/uit-toets. Het apparaat schakelt LCD, LCD-achtergrondverlichting, versterker en LED/halogeenlamp uit.
  • Als u een radiostation wilt zoeken, kunt u de automatische of handmatige afstemmingsmodus kiezen door op de knop "Mod" te drukken. Door op de knoppen "<" of ">" te drukken, zoekt de radio naar een radiostation met afnemende of toenemende frequentie. Om een ​​gevonden radiostation op te slaan, druk je op de "Mem"-knop en je hebt 4 seconden om een ​​van de zes voorkeurszenders te selecteren die je wilt opslaan.
  • Druk op de I (info)-toets om de huidige datum te zien. De datum wordt 4 seconden weergegeven. Dit deel van de code kan worden geoptimaliseerd omdat het een delay()-functie gebruikt.
  • Als u de klok wilt aanpassen, houdt u de D-toets ten minste 2 seconden ingedrukt wanneer u een uursignaal hoort (tijdsignalen) of de laatste seconden van een uur op een nauwkeurige klok ziet. Laat de D-toets los om hh.00.00 in te stellen. Als uw klok te laat was van 15 naar 1 minuten, worden minuten en seconden ingesteld op 00 en worden de uren met 1 verhoogd en als uw klok haast had van 1 naar 15 minuten, worden alleen minuten en seconden ingesteld op 00 na de aanpassingsprocedure .

Wat zou ik veranderen:

  • De resonator op de RTC-module heeft een betere nauwkeurigheid, maar de functie voor het aanpassen van de klok kan dit probleem oplossen.
  • De 5110 LCD naar een grotere en helderdere. Dit kan een 1, 8" of 2,0" kleuren-LCD zijn, omdat het soms moeilijk is om informatie te lezen op de NOKIA 5110 LCD die in het project wordt gebruikt.
  • De PAM8403-versterker voor PAM8610 met een uitgangsvermogen van 2x15 W of TDA7297 met dezelfde kenmerken.

Conclusie:

Ik ben blij hoe mijn nieuwe project werkt. Er werden geen problemen waargenomen na 1 maand werken, behalve de nauwkeurigheid van de klok.

Ik ben geen programmeur, dus de code kan beter worden geoptimaliseerd. Mijn C/C++ programmeerervaring is ongeveer een jaar, zelf geleerd. Het is mijn eerste nuttige project met het Arduino-platform en het eerste project dat ik op de hub deel. Begrijp me alsjeblieft en vergeef me voor mogelijke fouten en mijn slechte Engels.

Als je vragen hebt, aarzel dan niet om ze te stellen in opmerkingen of PM.

Update 1.:Kleine hardware- en software-updates.

Hardware - installeerde een 2A-zekering op 12V-lijn. Gewoon om veiligheidsredenen.

Software - regel 586 toegevoegd menu = 1; Hierdoor wordt de modus teruggezet naar VOLUME nadat u op de aan/uit-toets hebt gedrukt.

Update 2:

Helaas gaat het LCD-scherm in mijn radio het begeven.

Dus ik ben op zoek naar een goedkoop NOKIA 5110 LCD-alternatief. Ik zal geen nieuwe 5110 LCD installeren omdat deze klein en moeilijk te lezen is. Ik denk dat ik ga experimenteren met 1,8" TFT LCD. De goede dingen - het is groter, helderder, heeft een betere resolutie. De slechte dingen - ik weet zeker dat de 1,8" TFT meer bronnen zal verbruiken die van cruciaal belang zijn.

Uw adviezen met betrekking tot LCD-vervangers zijn welkom.

Code

  • Projectschets
  • Signaalsterkte symbolen
ProjectschetsArduino
/////////////////////////////////////////////// //////////////////// Arduino gebaseerd douche FM Radio Project //// Arduino NANO, RDA5807M, RTC, EEPROM, LCD5110, Thermistor //////// ////////////////////////////////////////////////// /////////#include  //http://www.rinkydinkelectronics.com/library.php?id=48#include  //https://github. com/cyberp/AT24Cx#include  //Arduino IDE include#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//definieer de bekkens op de knoppen van de keypadschar-toetsen [7][2] ={ {'L', 'P'}, //LED, POWER {'I', 'D'}, //INFO, DISPLAY {'1', '2 '}, // voorinstellingen {'3', '4'}, //van 1 {'5', '6'}, // tot 6 {'M', 'm'}, //M ODE, MEM {'<', '>'} //omlaag, omhoog};byte rowPins[7] ={11, 12, 10, 17, 9, 16, 8}; // verbind met de rij pinouts van de keypadbyte colPins [2] ={15, 14}; // verbind met de kolom pinouts van het toetsenbord// Toetsenbord kpd =Toetsenbord ( makeKeymap (toetsen), rowPins, colPins, RIJEN, COLS ); Toetsenbord toetsenbord =Toetsenbord ( makeKeymap (sleutels), 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 frequency, frequencyOld;int txtl =0, temparray =0; int samples[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);// Maak een instantie van een RDA5807-chipradioRDA5807M-radio;/// verkrijg een RDS-parserRDSParser rds;extern unsigned char SmallFont[];extern uint8_t signal5[];extern uint8_t signal4[];extern uint8_t signaal3[];extern uint8_t signaal2[];extern uint8_t signaal1[];//--------------------------SETUP---- ------------------------------//void setup () {analogeReferentie (EXTERN); Serieel.begin(9600); Draad.begin(); // Initialiseer de Radio radio.init(); radio.debugEnable(); // initialiseer het scherm lcd.InitLCD (); lcd.clrScr(); //lcd.setContrast(45); // aanpassen als standaard niet goed is lcd.setFont (SmallFont); lcd.enableSleep(); // standby-modus power_state =0; //schakel het apparaat niet in (stand-by-modus) wanneer de voeding is aangesloten // initialiseer het toetsenbord van het toetsenbord.addStatedEventListener(keypadEvent); // Voeg een gebeurtenislistener toe voor dit toetsenbord keypad.setHoldTime(1500); pinMode (ledPin, UITGANG); // Stelt de digitale pin in als uitvoer. pinMode (blPin, UITGANG); // Stelt de digitale pin in als uitvoer. digitalWrite (ledPin, LAAG); // Schakel de LED uit. digitalWrite(blPin, LAAG); // Zet de BL uit (stand-by-modus) ledPin_state =digitalRead (ledPin); // Bewaar initiële LED-status. HOOG wanneer LED brandt. //uncomment als rtc moet worden aangepast /*if (! rtc.isrunning()) { Serial.println("RTC is NIET actief!"); // volgende regel stelt de RTC in op de datum en tijd waarop deze schets is gecompileerd rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Deze regel stelt de RTC in met een expliciete datum en tijd, bijvoorbeeld om // 21 januari 2014 om 03:00 uur in te stellen die u zou noemen://rtc.adjust(DateTime(2018, 3, 13, 22, 33, 0) ); }*/ // lees waarde van laatste frequentie frequentie =mem.readInt(201); volume =2; // volumeniveau bij startmenu =1; // toont de VOLUMME-modus bij het starten als (volume <0) volume =0; als (volume> 15) volume =15; als (frequentie <0) frequentie =0; als (frequentie> 210) frequentie =210; WriteReg (0x02, 0xC00d); // schrijf 0xC00d in Reg.2 (zachte reset, inschakelen, RDS,) //bbz-kanaal (frequentie); // stel de informatieketen voor RDS-gegevens in. radio.attachReceiveRDS(RDS_process); rds.attachServicenNameCallback(DisplayServiceName); //rds.attachTimeCallback (DisplayTime); // voor toekomstig gebruik. zeer onnauwkeurig wanneer het RDS-signaal zwak is. rds.attachTextCallback(DisplayText);}//-----------------------einde van Setup-------------- ----------------------////------------------------ --LOOP----------------------------------------//void loop(){ if (frequentie !=frequencyOld) { frequencyOld =frequentie; mem.writeInt(201, frequentie); kanaal (frequentie); } if (volume !=volumeOld) { volumeOld =volume; WriteReg(5, 0x84D0 | volume); } //lees de toetsenbordtekentoets =keypad.getKey(); //controleer op RDS-gegevens radio.checkRDS(); // leest de temperatuursonde elke 0,6 sec 5 keer en berekent het gemiddelde vlottergemiddelde; unsigned long timenow =millis(); if ((unsigned long)(timenow - timeprevious)> 600) { timeprevious =timenow; samples[temparray] =analogRead(A7); tijdelijke ++; } if (temparray ==5) { // berekenen van het gemiddelde van de meetwaarden gemiddelde =0; for (int i =0; i <5; i++) {gemiddelde +=steekproeven[i]; } printTemp (gemiddelde); tijdelijke matrix =0; } // 4 sec time-out voor MEM-weergave en voer unsigned long dabar =millis(); if (mempress ==1) { timeprev =dabar; memdisplay =1; mempress =0; } if (memdisplay ==1) { if ((unsigned long)(dabar - timeprev) <4000) { memdisplay =1; } anders { memdisplay =0; } } /* Instructies voor het aanpassen van de tijd:1. Voer seriële monitor uit 2. Stel 9600 boud in 3. Druk op enter om seriële uitlezing te activeren 4. Schrijf hXX, waarbij XX de huidige uuraflezing is op een tijdserver en druk op enter om RTC-uren aan te passen. Seriële monitor zou "Hours XX" moeten schrijven 5. Schrijf mXX, waarbij XX de huidige minutenwaarde is op een tijdserver en druk op enter om de RTC-minuten aan te passen. Seriële monitor moet "Minutes XX" 6 schrijven. Schrijf sXX, waarbij XX de huidige secondenwaarde is op een tijdserver en druk op enter om de RTC-seconden aan te passen. Seriële monitor moet "Seconden XX" 7 schrijven. U kunt alleen uren aanpassen. D.w.z. toen de zomertijd werd gewijzigd. 8. U kunt alleen seconden aanpassen als u alleen de tijd wilt corrigeren. 9. Als RTC vanaf nul moet worden aangepast (jaar, maand, dag, enz.), verwijder dan de commentaarregels van de RTC-aanpassingsverklaring en upload de schets. */ DateTime nu =rtc.now(); if (Serial.available()> 0) { char t =Serial.read(); switch (t) { case ('h'):{ unsigned int hours =Serial.parseInt(); rtc.adjust(DateTime(now.year(), now.month(), now.day(), hours, now.minute(), now.second())); Serial.println(F("Uren")); Serial.println(uren); pauze; } case ('m'):{ unsigned int mins =Serial.parseInt(); rtc.adjust(DateTime(now.year(), now.month(), now.day(), now.hour(), mins, now.second())); Serial.println(F("Minuten")); Serial.println(minuten); pauze; } case ('s'):{ unsigned int sec =Serial.parseInt(); rtc.adjust(DateTime(nu.jaar(), nu.maand(), nu.dag(), nu.uur(), nu.minuten(), sec)); Serial.println(F("Seconden")); Serieel.println(sec); pauze; } } } // verschillende informatie weergeven op LCD printSignalStrength(); printLines(); printTime(); printFreq(); printStereo(); printModus(); printMenu(); print datum(); lcd.update();}//------------------------Einde van lus -------------- ----------------------//void printSignalStrength() //van 0000 tot 1111 (0-63){ unsigned int sig; Leesstatus(); 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); }} ongeldig printLines(){ lcd.drawLine(0, 9, 84, 9); lcd.drawLine(0, 39, 84, 39);}void printTemp (float average) // kan worden geoptimaliseerd :) gemiddelde =1023 / gemiddelde - 1; gemiddelde =51700 / gemiddelde; vlotter steinhart; steinhart =gemiddeld / 50000; // (R/Ro) steinhart =log(steinhart); // ln(R/Ro) steinhart /=3950; // 1/B * ln(R/Ro) steinhart +=1,0 / (25 + 273,15); // + (1/To) steinhart =1,0 / steinhart; // steinhart omkeren -=273.15; // Celsius conversie int tmp =rond (steinhart); lcd.printNumI(tmp, 60, 1, 2); lcd.print(F("~C"), 72, 1);}/// Werk de tekst ServiceName op het LCD-scherm bij in de RDS-modus.void DisplayServiceName(char *name){ lcd.print(name, 18, 22);}void DisplayText(char *text){ //scroll tweede RDS-regel lcd.print(text, txtl, 30); txtl =txtl - 66; if (txtl ==-396) txtl =0;}void printTime(){ DateTime now =rtc.now(); lcd.printNumI(nu.uur(), 24, 1, 2, '0'); lcd.print(":", 36, 1); lcd.printNumI(now.minute(), 42, 1, 2, '0');}void printDate(){ if (dspl ==1) { //controleert of de displaytoets is ingedrukt ClearRDS(); DateTime nu =rtc.now(); lcd.printNumI(nu.jaar(), 12, 22, 4); lcd.print(".", 36, 22); lcd.printNumI(nu.maand(), 42, 22, 2, '0'); lcd.print(".", 54, 22); lcd.printNumI(nu.day(), 60, 22, 2, '0'); int dw =nu.dayOfTheWeek(); switch (dw) { geval 0:lcd.print(F("Sekmadienis"), CENTER, 30); // sunday F() macro om sdram break op te slaan; geval 1:lcd.print(F("Pirmadienis"), CENTER, 30); //maandag enz... pauze; geval 2:lcd.print(F("Antradienis"), CENTER, 30); pauze; geval 3:lcd.print(F("Treciadienis"), CENTER, 30); pauze; geval 4:lcd.print(F("Ketvirtadienis"), CENTER, 30); pauze; geval 5:lcd.print(F("Penktadienis"), CENTER, 30); pauze; geval 6:lcd.print(F("Sestadienis"), CENTER, 30); pauze; } lcd.update(); vertraging (4000); //niet optimaal 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 (bas ==0) { lcd.print(F("OFF"), 66, 41); } else lcd.print(F("ON"), 66, 41); }} ongeldig printFreq () // geeft huidige frequentie weer {int frHundr, frDec; niet ondertekend int fr; fr =870 + frequentie; 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) { //if MEM-toets werd ingedrukt lcd.print(F("MEM>"), 0 , 12); } // Stereodetectie else if ((status[0] &0x0400) ==0) lcd.print(F("( )"), 0, 12); //betekent MONO else lcd.print (F ("(ST)"), 0, 12); //betekent STEREO}nietig zoeken (byte direc) //automatisch zoeken{ byte i; // zoek omhoog of omlaag als (!direc) WriteReg (0x02, 0xC30d); anders WriteReg (0x02, 0xC10d); voor (i =0; i <10; i++) {vertraging (200); Leesstatus(); if (status[0] &0x4000) { frequency =status[0] &0x03ff; pauze; } }}nietig kanaal (int kanaal) //directe frequentie{ byte nummerH, nummerL; getalH =kanaal>> 2; getalL =((kanaal &3) <<6 | 0x10); Wire.beginTransmission (0x11); Draad.schrijven (0x03); Wire.write(nummerH); // schrijf frequentie in bits 15:6, stel tune bit Wire.write (nummerL) in; Wire.endTransmission();}//RDA5807_adrs=0x10;// I2C-Address RDA Chip voor sequentiële 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 voor willekeurige Accessvoid WriteReg (byte reg, unsigned int valor){ Wire.beginTransmission (0x11); Wire.write(reg); Wire.write (moed>> 8); Wire.write (valor &0xFF); Wire.endTransmission(); //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);}// Zorgen voor een aantal speciale evenementen.void keypadEvent (KeypadEvent key, KeyState kpadState) { switch (kpadState) { /* Een andere manier om de tijd aan te passen:1. Houd ingedrukt toets D minstens 2 seconden ingedrukt, wanneer u de signalen van de eindtijd van het uur hoort, of de seconden van het laatste uur op een nauwkeurige klok ziet. 2. Laat toets D los om hh.00.00 in te stellen. 3. Na aanpassing, als uw klok te laat was van 15 naar 1 minuut, zullen minuten en seconden 00 zijn en uren worden verhoogd met 1. 4. Als uw klok haast had van 1 tot 15 minuten, zullen alleen minuten en seconden 00 zijn */ case HOLD:if (key =='D' &&power_state ==1) { adj =1; } pauze; 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)); } bijvoeglijk naamwoord =0; } pauze; case INGEDRUKT:if (key =='M' &&power_state ==1) { memdisplay =0; menu++; if (menu> MAXmenu)menu =1; } if (key =='>' &&power_state ==1) { memdisplay =0; schakelaar (menu) { geval 1:if (volume <0) { if (bas ==0) { WriteReg (0x02, 0xD00D); volume =0; } if (bas ==1) { WriteReg (0x02, 0xC00D); volume =0; } } anders volume++; als (volume> 15)volume =15; pauze; geval 2:zoeken (0); WissenRDS(); pauze; geval 3:frequentie++; als (frequentie> 210)frequentie =210; // bovenste frequentielimiet ClearRDS(); pauze; geval 4:if (bas ==0) { bas =1; WriteReg (0x02, 0xD00D); } pauze; } } if (key =='<' &&power_state ==1) { memdisplay =0; schakelaar (menu) { geval 1:volume--; if (volume <0) { WriteReg (0x02, 0x800D); // volume =0; } pauze; geval 2:zoeken(1); WissenRDS(); pauze; geval 3:frequentie--; als (frequentie <0) frequentie =0; WissenRDS(); pauze; geval 4:if (bas ==1) { bas =0; WriteReg (0x02, 0xC00D); } pauze; } } // LED-lampjes aan/uit if (key =='L' &&power_state ==1) {digitalWrite(ledPin,!digitalRead(ledPin)); ledPin_state =digitalRead (ledPin); // Onthoud LED-status, aan of uit. } // zet "power" aan of uit (stand-by-modus) if (key =='P') { digitalWrite (blPin, !digitalRead (blPin)); power_state =digitalRead (blPin); if (power_state ==0) { lcd.enableSleep(); digitalWrite (ledPin, LAAG); } else lcd.disableSleep(); volume =2; menu =1; } if (key =='1' &&power_state ==1) { switch (memdisplay) { case 0:frequency =mem.readInt(110); WissenRDS(); pauze; geval 1:mem.writeInt(110, frequentie); memdisplay =0; pauze; } } if (key =='2' &&power_state ==1) { switch (memdisplay) { case 0:frequency =mem.readInt(120); WissenRDS(); pauze; geval 1:mem.writeInt(120, frequentie); memdisplay =0; pauze; } } if (key =='3' &&power_state ==1) { switch (memdisplay) { case 0:frequency =mem.readInt(130); WissenRDS(); pauze; geval 1:mem.writeInt(130, frequentie); memdisplay =0; pauze; } } if (key =='4' &&power_state ==1) { switch (memdisplay) { case 0:frequency =mem.readInt(140); WissenRDS(); pauze; geval 1:mem.writeInt(140, frequentie); memdisplay =0; pauze; } } if (key =='5' &&power_state ==1) { switch (memdisplay) { case 0:frequency =mem.readInt(150); WissenRDS(); pauze; geval 1:mem.writeInt(150, frequentie); memdisplay =0; pauze; } } if (key =='6' &&power_state ==1) { switch (memdisplay) { case 0:frequency =mem.readInt(160); WissenRDS(); pauze; geval 1:mem.writeInt(160, frequentie); memdisplay =0; pauze; } } if (key =='m' &&power_state ==1) { mempress =1; } anders { mempress =0; } if (key =='I' &&power_state ==1) { dspl =1; } pauze; }}
Signaalsterkte symbolenC/C++
#if gedefinieerd(__AVR__) #include  #define imagedatatype const uint8_t#elif defined(__PIC32MX__) #define PROGMEM #define imagedatatype const unsigned char#elif defined(__arm__) #define PROGMEM #define imagedatatype const unsigned char#endifimagedatatype signal5[] PROGMEM={0xC1, 0xC2, 0xC4, 0xFF, 0xC4, 0xC2, 0xC1, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0xF8, 0xC0, 0xFC, 0xC00, /) , };beelddatatype signaal4[] PROGMEM={0xC1, 0xC2, 0xC4, 0xFF, 0xC4, 0xC2, 0xC1, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0xF8, 0xC0, 0xFC, 0xC0, (16) // 0x0010 };beelddatatype signaal3[] PROGMEM={0xC1, 0xC2, 0xC4, 0xFF, 0xC4, 0xC2, 0xC1, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0xF8, 0xC0, 0xC0, 0xC0, (16)/0x0010;beelddatatype signaal2[] PROGMEM={0xC1, 0xC2, 0xC4, 0xFF, 0xC4, 0xC2, 0xC1, 0xC0, 0xE0, 0xC0, 0xF0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, //}0x0010, (16) beelddatatype signaal1[] PROGMEM={0xC1, 0xC2, 0xC4, 0xFF, 0xC4, 0xC2, 0xC1, 0xC0, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, // 0x0010 (16) pixels0xC0, };

Schema's


Productieproces

  1. Radio
  2. Geïntegreerd circuit
  3. JX Wave Generator
  4. MotionSense
  5. PuzzleBox
  6. Doucheregelaar
  7. Draadloze IR-temperatuurscanner
  8. WalaBeer Tank
  9. Microcontrollers Lab
  10. MOSMusic
  11. SmartWristband