Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
/********* Pleasedontcode.com ********** Pleasedontcode thanks you for automatic code generation! Enjoy your code! - Terms and Conditions: You have a non-exclusive, revocable, worldwide, royalty-free license for personal and commercial use. Attribution is optional; modifications are allowed, but you're responsible for code maintenance. We're not liable for any loss or damage. For full terms, please visit pleasedontcode.com/termsandconditions. - Project: Audio Menu - Source Code NOT compiled for: ESP32 DevKit V1 - Source Code created on: 2024-10-15 21:16:25 ********* Pleasedontcode.com **********/ /****** SYSTEM REQUIREMENTS *****/ /****** SYSTEM REQUIREMENT 1 *****/ /* use TFT ILI9488 SPI and PT2314 chip for audio int */ /* vol,bass,treble,gain,loudness,mute,attnR,attnL */ /* channel,bal_l,bal_r menu,options update display */ /* rotar values */ /****** END SYSTEM REQUIREMENTS *****/ /********* User code review feedback ********** #### Feedback 1 #### - add Ticker.h for ms,menu cases display draw menu0-4 add menu set tings ,audio,clock, rotary handle volume ,bass,treble,gain,loud, mute,in,i,bal_l,bal_r #### Feedback 2 #### - add // Function prototypes void IRAM_ATTR encoderISR(); // Inte rrupt Service Routine for encoder void IRAM_ATTR buttonISR(); / / Interrupt Service Routine for button press void updateDisplay Ticker(); // Function to update display using Ticker void load Settings(); // Function to load set #### Feedback 3 #### - add // Rotary encoder object Rotary myEnc(encoderPinA, encoderP inB); // Audio settings int volume = 10; int bass = 0; int treb le = 0; int gain = 0; int balanceL = 100; // Left balance (bal_l ) int balanceR = 100; // Right balance (bal_r) bool mute = false ; bool loudness = false; int inputSelect ********* User code review feedback **********/ /****** DEFINITION OF LIBRARIES *****/ #include
// Library for rotary encoder #include
// TFT library for ILI9488 display #include
// Library for PT2314 audio processor #include
// Library for timing events /****** FUNCTION PROTOTYPES *****/ void setup(void); void loop(void); void IRAM_ATTR encoderISR(); // Interrupt Service Routine for encoder void IRAM_ATTR buttonISR(); // Interrupt Service Routine for button press void updateDisplayTicker(); // Function to update display using Ticker void loadSettings(); // Function to load settings // Menu states enum MenuState { MENU_MAIN, MENU_SETTINGS, MENU_AUDIO, MENU_CLOCK, MENU_EXIT }; // Current menu state MenuState currentMenu = MENU_MAIN; /***** DEFINITION OF DIGITAL INPUT PINS *****/ const uint8_t ro_KY_040_CLK_PIN_D4 = 4; // Rotary encoder CLK pin const uint8_t ro_KY_040_DT_PIN_D13 = 13; // Rotary encoder DT pin const uint8_t ro_KY_040_SW_PIN_D14 = 14; // Rotary encoder switch pin /****** DEFINITION OF LIBRARIES CLASS INSTANCES *****/ SimpleEncoder encoder(ro_KY_040_SW_PIN_D14, ro_KY_040_CLK_PIN_D4, ro_KY_040_DT_PIN_D13); // Encoder instance TFT_eSPI tft = TFT_eSPI(); // TFT display instance PT2314 audioProcessor; // PT2314 audio processor instance Ticker ticker; // Ticker instance for periodic tasks // Rotary encoder object Rotary myEnc(ro_KY_040_CLK_PIN_D4, ro_KY_040_DT_PIN_D13); // Initialize rotary encoder // Audio settings variables int volume = 10; // Volume level int bass = 0; // Bass level int treble = 0; // Treble level int gain = 0; // Gain level int balanceL = 100; // Left balance (bal_l) int balanceR = 100; // Right balance (bal_r) bool mute = false; // Mute status bool loudness = false; // Loudness status int inputSelect = 0; // Input selection // Function to draw the main menu void drawMenu() { tft.fillScreen(TFT_BLACK); // Clear screen tft.setTextColor(TFT_WHITE); tft.setTextSize(2); tft.setCursor(10, 10); switch (currentMenu) { case MENU_MAIN: tft.println("Main Menu"); tft.println("1. Settings"); tft.println("2. Audio"); tft.println("3. Clock"); tft.println("4. Exit"); break; case MENU_SETTINGS: tft.println("Settings Menu"); tft.println("Adjust settings"); break; case MENU_AUDIO: tft.println("Audio Menu"); tft.printf("Volume: %d\nBass: %d\nTreble: %d\n", volume, bass, treble); break; case MENU_CLOCK: tft.println("Clock Menu"); tft.println("Set the time"); break; case MENU_EXIT: tft.println("Exiting..."); break; } } // Function to update audio settings based on encoder value void updateAudioSettings(int value) { if (value >= 0 && value <= 63) { audioProcessor.setVolume(value); // Set volume based on encoder value volume = value; // Update local variable } else if (value > 63 && value <= 127) { audioProcessor.setBass(value - 64); // Set bass if value exceeds 63 bass = value - 64; // Update local variable } else if (value < 0 && value >= -63) { audioProcessor.setTreble(-value); // Set treble if value is negative treble = -value; // Update local variable } } // Interrupt Service Routine for encoder void IRAM_ATTR encoderISR() { encoder.update(); // Update encoder state } // Interrupt Service Routine for button press void IRAM_ATTR buttonISR() { encoder.buttonPressed(); // Handle button press } // Function to update display using Ticker void updateDisplayTicker() { drawMenu(); // Redraw the menu periodically } // Function to load settings (placeholder for future implementation) void loadSettings() { // Load settings from EEPROM or other storage } void setup(void) { // Initialize serial communication for debugging Serial.begin(9600); // Initialize the TFT display tft.init(); tft.setRotation(1); // Set rotation of the display tft.fillScreen(TFT_BLACK); // Clear screen with black color // Initialize the audio processor if (audioProcessor.begin()) { Serial.println("PT2314 initialized successfully."); } else { Serial.println("Failed to initialize PT2314."); } // Set initial audio settings audioProcessor.setVolume(volume); // Set initial volume audioProcessor.setBass(bass); // Set initial bass audioProcessor.setTreble(treble); // Set initial treble audioProcessor.setMute(mute); // Unmute audio // Attach interrupt service routines attachInterrupt(digitalPinToInterrupt(ro_KY_040_CLK_PIN_D4), encoderISR, CHANGE); attachInterrupt(digitalPinToInterrupt(ro_KY_040_SW_PIN_D14), buttonISR, FALLING); // Draw the initial menu drawMenu(); // Start the ticker to update the display periodically ticker.attach(1.0, updateDisplayTicker); // Update display every second } void loop(void) { // Check if the encoder value is changing if (encoder.CHANGING) { // Get the current value from the encoder int value = encoder.VALUE; // Update audio settings based on encoder value updateAudioSettings(value); // Update the display with the current settings drawMenu(); } // Handle menu navigation if (encoder.BUTTON_PRESSED) { // Change menu state based on current state switch (currentMenu) { case MENU_MAIN: currentMenu = MENU_SETTINGS; // Go to settings menu break; case MENU_SETTINGS: currentMenu = MENU_AUDIO; // Go to audio menu break; case MENU_AUDIO: currentMenu = MENU_CLOCK; // Go to clock menu break; case MENU_CLOCK: currentMenu = MENU_EXIT; // Go to exit menu break; case MENU_EXIT: currentMenu = MENU_MAIN; // Return to main menu break; } drawMenu(); // Redraw the menu } } /* END CODE */
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)