Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
pantalla OLED y menu con encoder
#1
hola a todos.
estoy intentando hacer con una pantalla OLED de 0.96" un menu con tres opciones y dos submenus. El problema que tengo es que una vez en los submenus una vez que selecciono la opción deseada, esta se tendria que hacer una serie de cosas. (basicamente elegir un tiempo.), este último tramo  no se como hacerlo. He de decir que he copiado el codigo y lo he modificado un poquito, por eso no se como acabarlo.
adjunto el código.
a ver si me podeis ayudar un poquito.


Código:
// prueba 3.1 varios menus y pantalla OLED i encoder
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels


//#define NUM_MENU 3

#define OLED_RESET 13

Adafruit_SSD1306 display(OLED_RESET);

#if (SSD1306_LCDHEIGHT != 32)

#error("Height incorrect, please fix Adafruit_SSD1306.h!");

#endif

const char menu1[] PROGMEM = "Fototrampeo";
const char menu2[] PROGMEM = "Droopwater";
const char menu3[] PROGMEM = "star";

const char sub11[] PROGMEM = "Atras";
const char sub12[] PROGMEM = "Retardo disparador";
const char sub13[] PROGMEM = "Tiempo obturando";

const char sub21[] PROGMEM = "Atras";
const char sub22[] PROGMEM = "Retardo disparador2";
const char sub23[] PROGMEM = "Tiempo obturando2";



const char * const menus[] PROGMEM =
{
   menu1,
   menu2,
   menu3,

   sub11, // sub menu for menu1
   sub12,
   sub13,

   sub21, // sub menu for menu2
   sub22,
   sub23,

};
int button_pin = 7;
int button_state = 0;
int button_state_last = 1;
int subMenu = 0;
int NUM_MENU = 3;

int val=-1;
int encoder0PinA = 3;
int encoder0PinB = 4;
int encoder0Pos = 0;
int encoder0PinALast = LOW;
int n = LOW;


void setup() {

 pinMode( button_pin , INPUT_PULLUP);
 
 pinMode (encoder0PinA, INPUT);
 pinMode (encoder0PinB, INPUT);

 display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialize with the I2C addr 0x3D (for the 128x64)

 Serial.begin (9600);
}

void loop() {

 button_state = digitalRead( button_pin );

 Serial.println( button_state );


 updateKnob();
 buttonPush();

if( val != encoder0Pos ){
   val = encoder0Pos;
   updateMenu();
   //delay(100);
}
}
void updateKnob()
{
  n = digitalRead(encoder0PinA);
 if ((encoder0PinALast == LOW) && (n == HIGH)) {
   if (digitalRead(encoder0PinB) == LOW) {
      if( encoder0Pos > 0 ){
          encoder0Pos--;
      }else{
          encoder0Pos = NUM_MENU-1;
      }
   } else {
     if( encoder0Pos < (NUM_MENU-1) ){
         encoder0Pos++;
     }else{
         encoder0Pos = 0;
     }
   }
   Serial.print (encoder0Pos);
   Serial.println();
 }
 encoder0PinALast = n;
 
}
void updateMenu(){
 
  display.clearDisplay();

  display.setTextSize(1);
 
 if( subMenu == 0 ){
      drawMenu(0);
 }
 else if( subMenu == 1){
      drawMenu(3);
 }
 else if( subMenu == 2){
      drawMenu(6);
 }
   
  display.display();
 
}
void buttonPush()
{
   if( (button_state == 0) && ( button_state_last != 0) ){
        button_state_last = 0;
       
        if( (subMenu == 0) && ( encoder0Pos == 0)){ // sub menu 1
             
             subMenu = 1;
             NUM_MENU = 3;
             val = -1;
        }
        else if( (subMenu == 0) && ( encoder0Pos == 1)){ // sub menu 2
             
             subMenu = 2;
             NUM_MENU = 3;
             // NUM_MENU = 2;
             val = -1;
        }
        else if( ((subMenu != 0) && ( encoder0Pos == 0)) ){ // Back to main menu
             subMenu = 0;
             NUM_MENU = 3;
             val = -1;
        }
       
       
   }

   
   button_state_last = button_state;
   
}
void drawMenu(int start){
 
  char tBuffer[22];
 
  for(int i=0; i < NUM_MENU;i++){
 
       //display.setCursor(5,(i*20)+5);
       display.setCursor(5,(i*10)+1);
       display.setTextColor(WHITE);
       if( (encoder0Pos) == i ){
         display.setTextColor(BLACK, WHITE);
       }
       display.println(strcpy_P(tBuffer, (char*)pgm_read_word(&(menus[i+start]))));
             
  }
 
}
Citar


Temas similares...
Tema Autor Respuestas Vistas Último mensaje
  [TUTO] Pantalla 150 Leds WS2812 cansi22 27 20,427 06-10-2019, 08:14 PM
Último mensaje: yomaker
  CONSULTA Pantalla mks y ram1.4 no me van ni motores ni nada ayuda Mikele3 1 380 17-07-2018, 10:36 PM
Último mensaje: neoxM3
  El mando pantalla 16*4 gira al reves. scesar 8 1,760 07-01-2017, 06:52 PM
Último mensaje: scesar
  Pitido al conectar mi pantalla smart full gráfic al ordenador Deme88 0 629 22-11-2016, 10:52 AM
Último mensaje: Deme88
  Acelerometro con pantalla oled antonio_gt_9.2 3 894 14-11-2016, 10:36 PM
Último mensaje: Miquel