-
PROHARDVER!
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
Beggar
csendes tag
Sziasztok!
Már napok óta küzdök egy menüszerkezettel arduinoval, sehogy sem akarja a végleges formát ölteni. Eljutottam odáig, hogy a menüben már lehet mászkálni, de a kiválasztott almenü értékét nem tudom módosítani, kiolvasni memóriából rendesen. Ha valakinek van egy kész ötlete, azt is szívesen fogadom.A menü szerkezete így néz ki:
"Input Select"-
|- TV
|- Media Player
|- Instrument
|- Aux 1
|- Aux 2
Equalizer-
|- Bass (értéke lehet 0-63)
|- Treble (értéke lehet 0-63)
|- Balance (értéke lehet 0-63)
|- Loudness (értéke 0-1)Az én megoldásom részben a következő:
#include <EEPROM.h>
#include <LiquidCrystal.h>
char* main_menu[] = {" Input Select ", " Equalizer "};
char* menu_items[2][6] = {
{" TV ", " Media Player ", " Instrument ", " Aux 1 ", " Aux 2 ", " Exit "},
{" Bass ", " Treble ", " Balance ", " Loudness ", " Exit " }
};
const int btn_up_pin = 9;
const int btn_down_pin = 8;
const int btn_enter_pin = 7;
const int btn_esc_pin = 6;
//const int backlight = 10;
const int lcd_contrast_pin = 11;
const int lcd_power_pin = 10;
const int backlight_value = 0;
// memoria címek ---------
const int addr_volume = 0;
const int addr_inp = 1;
const int addr_equ_0 = 2;
const int addr_equ_1 = 3;
const int addr_equ_2 = 4;
const int addr_equ_3 = 5;
// -----------------------
int on_menu = 0;
char* menu_item = "";
char* main_itme = "";
char* sub_item = "";
int main_menu_counter = 0;
int main_counter = 0;
int sub_menu_counter = 0;
int sub_counter = 0;
int volume_counter = 0;
int temp_value = 0;
int btn_up = 0;
int btn_down = 0;
int btn_enter = 0;
int btn_esc = 0;
long action_timer = 0;
LiquidCrystal lcd(13, 12, 5, 4, 3, 2);
void setup() {
Serial.begin(9600);
pinMode(btn_up_pin, INPUT);
pinMode(btn_down_pin, INPUT);
pinMode(btn_enter_pin, INPUT);
pinMode(btn_esc_pin, INPUT);
pinMode(lcd_contrast_pin, OUTPUT);
pinMode(lcd_power_pin, OUTPUT);
//analogWrite(backlight, backlight_value);
lcd.begin(16, 2);
on_menu = 0;
}
char mem_read(int mainmenu, int submenu = 0){
int ret_val = 0;
char ret_temp;
if(mainmenu == 0 && submenu == 0){
ret_val = EEPROM.read(1);
}
if(mainmenu == 1 && submenu == 0){
ret_val = EEPROM.read(2);
}
if(mainmenu == 1 && submenu == 1){
ret_val = EEPROM.read(3);
}
if(mainmenu == 1 && submenu == 2){
ret_val = EEPROM.read(4);
}
if(mainmenu == 1 && submenu == 3){
ret_val = EEPROM.read(5);
}
return ret_val;
}
void loop() {
btn_up = digitalRead(btn_up_pin);
btn_down = digitalRead(btn_down_pin);
btn_enter = digitalRead(btn_enter_pin);
btn_esc = digitalRead(btn_esc_pin);
if(on_menu > 0){
digitalWrite(lcd_power_pin, HIGH);
digitalWrite(lcd_contrast_pin, LOW);
}
if(on_menu == 0){
digitalWrite(lcd_power_pin, LOW);
analogWrite(lcd_contrast_pin, 254);
}
if(menu_item == " Exit ") {
if(on_menu == 1){
menu_item = "";
main_menu_counter = 0;
sub_menu_counter = 0;
on_menu = 0;
}
if(on_menu == 2){
menu_item = "";
sub_menu_counter = 0;
on_menu = 1;
}
}
if(on_menu == 1){ // -------------------------------------------------
if(btn_up == HIGH && on_menu == 1){
if(main_menu_counter < ((sizeof(main_menu)/2)-1)){
main_menu_counter++;
delay(250);
}
}
if(btn_down == HIGH && on_menu == 1){
if(main_menu_counter > 0){
main_menu_counter--;
delay(250);
}
}
lcd.setCursor(0,0);
lcd.write(main_menu[main_menu_counter]);
lcd.setCursor(0,1);
lcd.write(" ");
if(btn_enter == HIGH && on_menu == 1){
menu_item = main_menu[main_menu_counter];
main_counter = main_menu_counter;
on_menu = 2;
delay(250);
}
} // #################################################################
if(on_menu == 2){ // -------------------------------------------------
if(btn_up == HIGH && on_menu == 2){
if(sub_menu_counter < ((sizeof(menu_items[main_counter])/2)-1)){
sub_menu_counter++;
delay(250);
}
}
if(btn_down == HIGH && on_menu == 2){
if(sub_menu_counter > 0){
sub_menu_counter--;
delay(250);
}
}
lcd.setCursor(0,0);
lcd.write(main_menu[main_counter]);
lcd.setCursor(0,1);
lcd.write(menu_items[main_counter][sub_menu_counter]);
if(btn_enter == HIGH && on_menu == 2){
menu_item = menu_items[main_counter][sub_menu_counter];
sub_counter = sub_menu_counter;
on_menu = 3;
delay(250);
}
} // #################################################################
if(on_menu == 3){ // -------------------------------------------------
lcd.setCursor(0,0);
lcd.write(menu_items[main_counter][sub_counter]);
lcd.setCursor(1,1);
temp_value = mem_read(main_counter, sub_counter);
lcd.write(temp_value);
//lcd.write(" ");
} // #################################################################
if(on_menu == 0){
//analogWrite(backlight, 0);
lcd.setCursor(0,0);
lcd.write(" Home Amplifier ");
lcd.setCursor(0,1);
lcd.write(" ");
if(btn_enter == HIGH && on_menu == 0){
on_menu = 1;
delay(250);
}
}
if(btn_esc == HIGH){
menu_item = "";
main_menu_counter = 0;
sub_menu_counter = 0;
on_menu = 0;
}
Serial.print("on_menu: ");
Serial.print(on_menu);
Serial.print(" lcd_power_pin: ");
Serial.print(digitalRead(lcd_power_pin));
Serial.print(" temp_value: ");
Serial.print(temp_value);
Serial.println("");
delay(50);
} // loop endElőre köszönök minden nemű segítséget!
Új hozzászólás Aktív témák
- Dell 24" 1920x1080 full HD - webkamerás konferencia monitor hangszóróval! - gyári garancia 2028ig
- Dell Latitude 5590, 15,6" FULL HD IPS, I5-8350U CPU, 16GB DDR4, 256GB NVMe SSD, WIN 11 ÚJ AKKU
- Dell 27" UltraSharp U2713HM QHD 2560x1440 IPS DP/DVI/HDMI/VGA monitor - PIVOT is - több db
- ThinkPad T14 Gen1 14" FHD IPS Ryzen 5 PRO 4650U 16GB 256GB NVMe ujjlolv IR kam gar
- Gamer pc 1080p
- Bomba ár! Dell Latitude 5400 - i5-8GEN I 16GB I 512SSD I 14" HD I HDMI I Cam I W11 I Gari!
- BESZÁMÍTÁS! GIGABYTE AORUS ELITE Z790 i7 14700K 64GB DDR5 1TB SSD 7900XTX 24GB be quiet! SB802 1000W
- AKCIÓ! MSI B450 R5 5500 16GB DDR4 512GB SSD RTX 2070 8GB GDDR6 Rampage Shiva Zalman 500W
- Bomba ár! Lenovo ThinkPad T470s - i5-6GEN I 8GB I 256GB SSD I 14" FHD I Cam I W10 I Garancia!
- AKCIÓ! AMD Ryzen 5 2600 6 mag 12 szál processzor garanciával hibátlan működéssel
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged