¿Definición de interfaz en Arduino?

3

Estoy escribiendo un nuevo proyecto de Arduino que utiliza una pantalla de cristal LCD de 16x2 con un KeyShield. Me gustaría construir una estructura de menú en la que el usuario pueda navegar usando los botones.

Soy nuevo en Arduino pero tengo 5 años de experiencia en C #. Lo que me gustaría hacer es lo siguiente:

Defina una interfaz llamada Screen y herede cada pantalla, como LanguageScreen , TurnOffAfterScreen , MainScreen , etc. Cada pantalla especializada implementa un método llamado drawScreen que se encargará del contenido de la pantalla. .

Ahora me gustaría tener una clase llamada ScreenController que maneje la navegación entre las pantallas. En esta clase me gustaría almacenar las pantallas en una matriz Screen screens[3] .

Cuando el usuario presiona el botón Select en el KeyShield, el Controlador llamará al método drawScreen de la siguiente pantalla algo como esto:

void showNextScreen()
{
   currentScreen++;
   screens[currentScreen]->drawScreen();
}

¿Es esto posible hacer en un proyecto Arduino? ¿Estoy esperando demasiado? :)

    
pregunta papaiatis

2 respuestas

2
class Screen {
public:
   virtual void drawScreen() = 0;  // Needs to be implemented by each subclass

   virtual ~Screen() {}            // Destructor
};

class LanguageScreen : public Screen {
public:
   virtual void drawScreen();
};

class MainScreen : public Screen {
public:
   virtual void drawScreen();
};

void LanguageScreen::drawScreen() {
   // Draw language screen
}

void MainScreen::drawScreen() {
   // Draw main screen
}

MainScreen     mainScreen;
LanguageScreen languageScreen;
Screen *const  screens[2]   = {&mainScreen, &languageScreen};
int            currenScreen = 0;
    
respondido por el microtherion
0

C ++ usando clases en un microcontrolador con memoria limitada generalmente no se considera una estrategia de desarrollo viable. Hay literalmente formas ilimitadas de construir un "sistema de menú" en una pantalla sin tener que recurrir al estilo de programación OOP que requiere muchos recursos.

Editar: Estoy sorprendido por la reacción del lector al dar un montón de votos negativos a mi respuesta. Puedo decirles que con más de 30 años de experiencia en el desarrollo de soluciones de código y firmware para microcontroladores de muchos tipos, es verdad la afirmación de mi respuesta. Hay un montón de aplicaciones que utilizan MCU de bajo rendimiento (en comparación con sus hermanos mayores en PC y similares) donde el programa a veces incluso debe codificarse en lenguaje ensamblador para realizar el trabajo de manera eficiente y de baja latencia.

    
respondido por el Michael Karas

Lea otras preguntas en las etiquetas