val Postat Martie 2 Partajează Postat Martie 2 As fi tentat sa-l refac, dar nu-mi place modul de schimbare al programelor cu un singur buton. Puteti sa ma ajutati in adaugarea a inca unui buton pentru "Ch -" ? Link spre comentariu
fratello Postat Martie 2 Partajează Postat Martie 2 (editat) Cred ca in aceste "locuri" ar trebui umblat... Dar ma depaseste scrierea codului adecvat. Prevstream() chiar nu stiu cum ar trebui sa arate. // Control buttons #define BUTTONS_NUM 4 // in loc de 3 const int BUTTONS_PINS[BUTTONS_NUM] = {34, 35, 32, 33}; // Stream actions void prevStream() { config.stream_id++; if(config.stream_id =< config.stream_count) { config.stream_id=0; } streamChanged=true; } if(buttons) { DEBUG_PRINT("[BUTTON] Pressed "); DEBUG_PRINTLN(String(buttons)); switch(buttons) { case 1: // BUTTONS 1 - Volume UP if(config.volume < MAX_VOLUME) { config.volume = config.volume+1; } break; case 2: // BUTTONS 2 - Volume DOWN if(config.volume > MIN_VOLUME) { config.volume = config.volume-1; } break; case 3: // BUTTONS 1+2 - Play/Pause togglePlay(); break; case 4: // BUTTONS 3 - Next stream nextStream(); break; case 5: // BUTTONS 4 - Prev.stream prevStream(); break; Editat Martie 2 de fratello Link spre comentariu
val Postat Martie 3 Partajează Postat Martie 3 @fratello, pentru descărcare fișierelor pentru radioul Elektor este suficientă înregistrarea pe site sau mai sunt și alte condiții? Link spre comentariu
modoran Postat Martie 3 Partajează Postat Martie 3 De pe elektor e suficient sa ai cont că sa poți descarca Link spre comentariu
Stefan Postat Martie 5 Partajează Postat Martie 5 Ieri mi-a sosit WROVER-ul și pot spune că prezența PSRAM-ului se simte, adică nu se mai blochează pe streaming AAC chiar cu un display mai mare și jucat pe web. Poza este de dimineață când nu apucasem sa conectez DAC-ul 98357A. Link spre comentariu
gigimargaus Postat Martie 6 Partajează Postat Martie 6 Salut. Frumos proiect. Doresc si eu sa-l fac. Vad ca sunt mai multe variante, Imi puteti spune care este cera mai performanta si stabila combinatie? In viitor doresc sa adaug si un radio clasic in jurul unui DSP RF, asa ca o varianta de "placa de baza"(board) cat mai performanta este preferabila. Multumesc. Link spre comentariu
fratello Postat Martie 6 Partajează Postat Martie 6 IMHO : -performanta : YoRadio dar numai cu WROVER (...fiindca PSRAM) -"low cost" : varianta Elektor, stabila, dar cu destule limitari, mai ales pe partea de afisare M-am apucat sa modific vers.Elektor pt display OLED (0,96 sau 1.3"), mi se pare o "risipa" folosirea displayului TFT color. Va anunt daca imi iese ceva... Link spre comentariu
gigimargaus Postat Martie 6 Partajează Postat Martie 6 Salut. Multumesc pentru raspunsul rapid. Am googalit dupa ESP32- WROVER si a rezultat o multime de variante. Puteti sa-mi spuneti care varianta este cea mai performanta pentru acest proiect si eventual cu resurse extra pentru adaugarea in viitor a unui radio RF. As dorii si o sugestie pentru un display mai mare. De unde le-ati procurat. Multumesc. Link spre comentariu
fratello Postat Martie 6 Partajează Postat Martie 6 Am reusit sa pornesc si sa afisez ceva pe oledul de 0.96" Dar nu reusesc sa merg mai departe, sa afisez timpul si postul de radio. Ba reusesc sa afisez doar timpul, ba reusesc sa le afisez pe amandoua, dar cand schimb postul se suprapune scrisul...Iar daca postul are un nume mai lung (Kiss Fm live) se afiseaza un rand mai jos .... Poate reuseste cineva sa il faca sa afiseze corect, va rog ! Eu nu inteleg unde trebuie sa comand stergerea (updatarea) displayului. Am modificat scree.ino : // ------------------------------------- ROUTINES de GESTION de l'ECRAN TFT ------------------------------------------ void init_screen() { display.begin(SSD1306_SWITCHCAPVCC, 0X3C); display.clearDisplay(); display.setTextSize(2); display.setTextColor(WHITE); display.setCursor(0,0); display.println("ESP32Radio"); display.display(); delay(2000); } void cadre_screen() { display.clearDisplay(); } void aff_name(uint8_t station, uint8_t posY) { uint8_t x; // tft.setTextColor(ST77XX_RED); // tft.setTextSize(2); display.setTextSize(1); String affName = Name; affName.trim(); uint8_t l = affName.length(); x = (screenWidth - l*11)/2 - 4; //character length = 5+1 // tft.fillRect(1,posY,screenWidth-2,16,0); //x,y,width,height,color // tft.setCursor(x,posY); // tft.println(affName); display.setCursor(x,posY); display.println(affName); } void aff_volume(uint8_t posY) { char volumestring[10]; uint8_t x; sprintf(volumestring,"Vol:%d/%d",cur_volume, MAX_VOLUME); x = (screenWidth - String(volumestring).length()*6)/2; //character length = 5+1 // tft.setTextSize(1); // tft.setTextColor(ST77XX_GREEN); // tft.fillRect(1,posY,screenWidth/2-8,8,0); //x,y,width,height,color // tft.setCursor(10,posY); display.setCursor(10,posY); if (cur_volume != 0){ // tft.println(volumestring); display.println(volumestring); }else{ // tft.setTextColor(ST77XX_RED); // tft.println(" MUTE"); display.println(" MUTE"); // tft.setTextColor(ST77XX_GREEN); } } void aff_mute(uint8_t posY) { uint8_t x; // tft.setTextSize(1); // tft.fillRect(1,posY,screenWidth/2-8,8,0); //x,y,width,height,color // tft.setCursor(10,posY); display.setCursor(10,posY); // tft.setTextColor(ST77XX_RED); // tft.println(" MUTE"); display.println(" MUTE"); // tft.setTextColor(ST77XX_GREEN); } void aff_channel(uint8_t posY) { uint8_t x; char channelstring[20]; sprintf(channelstring,"Channel:%d/%d",cur_station,maxStation); x = (screenWidth - String(channelstring).length()*6)/2; //character length = 5+1 // tft.setTextSize(1); // tft.setTextColor(ST77XX_GREEN); // tft.fillRect(screenWidth/2-5,posY,screenWidth/2-1,8,0); //x,y,width,height,color // tft.setCursor(screenWidth/2-5,posY); display.setCursor(screenWidth/2-5,posY); // tft.println(channelstring); display.setTextSize(1); display.println(channelstring); } void aff_time(uint8_t posY) { readTime(); if (Minute != Minute_old) { Minute_old = Minute; sprintf(NTPtime,"%02d/%02d/%04d %02d:%02d",Jour,Mois,Annee,Heure,Minute); //format NTPtime // tft.setTextColor(ST77XX_YELLOW); // tft.setTextSize(1); display.setTextSize(1); uint8_t x = (screenWidth - String(NTPtime).length()*6)/2; //character length = 5+1 // tft.fillRect(1,posY,screenWidth-x,8,0); //x,y,with,heigh - clear all line // tft.setCursor(x,posY); display.setCursor(x,posY); // tft.println(NTPtime); display.println(NTPtime); } } void aff_info(String info, int posY) { uint8_t x; // tft.setTextSize(1); // tft.setTextColor(ST77XX_ORANGE); x = (screenWidth - info.length()*6)/2; //character length = 5+1 // tft.fillRect(1,posY,screenWidth-2,8,0);//x,y,width,height,color // tft.setCursor(x,posY); display.setCursor(x,posY); // tft.println(info); display.println(info); } void Message(String message, uint8_t posY, uint8_t size) { // tft.setTextSize(size); uint8_t x; x = (screenWidth - message.length()*6*size)/2; //character length = 5+1 // tft.fillRect(1,posY,screenWidth-x+2,8*size,0); //x,y,width,heigh - clear all line // tft.setCursor(x,posY); // tft.println(message); display.setCursor(x,posY); display.println(message); } si in programul principal : void loop(){ if (!modeAP){ // only if not AP mode audio.loop(); aff_time(8); check_buttons(); check_IR(); display.display(); if ((millis()- t0_rssi) >= DELAY_RSSI){ t0_rssi = millis(); rssi = WiFi.RSSI(); // updates rssi every 2s (DELAY_RSSI) } }else{ if(flagSerial){ flagSerial = false; Serial.println("Waiting for WiFi credentials !"); // updates message every 2s (DELAY_RSSI) } } } Link spre comentariu
fratello Postat Martie 6 Partajează Postat Martie 6 Scuze....Schema si softul (la care fac referire mai sus) sunt pt versiunea Elektor ; disponibile la acest link - https://we.tl/t-Tk1flNh7HK Link spre comentariu
fratello Postat Martie 8 Partajează Postat Martie 8 Asta e tot ce m-am priceput sa fac sa afiseze. Trebuie sa verific daca am mutat corect pinii pt volum (+si-) Link spre comentariu
val Postat Martie 9 Partajează Postat Martie 9 Arata bine, felicitari. Puteti posta varianta dumneavoastra ? Link spre comentariu
fratello Postat Martie 9 Partajează Postat Martie 9 @Val : Va trimisesem schema si soft (originale) pe Wetransfer (v-am dat linkul prin PM). Voi posta aici versiunea mea, dupa ce verific functionarea butoanelor. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum