Diseño de Contador de Encoder
2:05
BI: Dairo Arenas Ortiz
durante 1 segundo.error en la posicion X
donde X es la posición que no se leyó. Además se enciende el LED rojo hasta que el usuario pulse el botón de reset.error en los pines X X X ...
donde cada X indica una posición faltante. Al concluir se enciende el LED rojo (durante 1 segundo) para marcar la finalización de la prueba.Cpp
#include // Pines asignados (modifícalos según tu hardware) const int PIN_ENCODER_A = 2; const int PIN_ENCODER_B = 3; const int PIN_MODE_BUTTON = 4; const int PIN_RESET_BUTTON = 5; const int PIN_LED_ROJO = 6; const int PIN_LED_VERDE = 7; // Variables globales del encoder y modos volatile int encoderPos = 0; // posición del encoder (0 a 249) int lastEncoderPos = -1; // para comparar en modo manual // Prototipos de funciones void manualMode(); void autoMode(); void updateEncoder(); void setup() { // Inicializar el monitor serial (o la pantalla que uses) Serial.begin(9600); // Mensaje de bienvenida durante 1 segundo Serial.println("BI: Dairo Arenas Ortiz"); delay(1000); // Configuración de pines pinMode(PIN_ENCODER_A, INPUT); pinMode(PIN_ENCODER_B, INPUT); pinMode(PIN_MODE_BUTTON, INPUT_PULLUP); pinMode(PIN_RESET_BUTTON, INPUT_PULLUP); // Configurar pines de LEDs pinMode(PIN_LED_ROJO, OUTPUT); pinMode(PIN_LED_VERDE, OUTPUT); // Encender LED verde para indicar circuito activo digitalWrite(PIN_LED_VERDE, HIGH); digitalWrite(PIN_LED_ROJO, LOW); // Si deseas usar interrupciones para el encoder, configúralas aquí // Por ejemplo: // attachInterrupt(digitalPinToInterrupt(PIN_ENCODER_A), updateEncoder, CHANGE); } void loop() { // Esperar la pulsación del botón de modo if (digitalRead(PIN_MODE_BUTTON) == LOW) { delay(50); // debounce // Se mide la duración de la pulsación: unsigned long pressTime = millis(); while (digitalRead(PIN_MODE_BUTTON) == LOW) { } unsigned long duration = millis() - pressTime; if (duration maxVal) maxVal = scanned[i]; } String errorMsg = "error en los pines "; bool errorFound = false; for (int expected = minVal; expected <= maxVal; expected++) { bool found = false; for (int i = 0; i < scanCount; i++) { if (scanned[i] == expected) { found = true; break; } } if (!found) { errorMsg += String(expected) + " "; errorFound = true; } } if (errorFound) { Serial.println(errorMsg); } else { Serial.println("No se detectaron errores en el modo automatico"); } // Enciende el LED rojo para indicar la finalización del modo automático digitalWrite(PIN_LED_ROJO, HIGH); delay(1000); digitalWrite(PIN_LED_ROJO, LOW); } // Función ficticia que simula la actualización de la posición del encoder // Reemplaza esta función por la lógica real (por ejemplo, mediante interrupciones o usando una librería específica) void updateEncoder() { // Ejemplo básico: se incrementa o decrementa la posición con base en la lectura de los pines A y B // (La lógica de un encoder requiere decodificación de las señales; este es solo un placeholder) int a = digitalRead(PIN_ENCODER_A); int b = digitalRead(PIN_ENCODER_B); if (a == b) { encoderPos = (encoderPos + 1) % 250; } else { encoderPos = (encoderPos - 1 + 250) % 250; } }
Serial.println() por las funciones de tu librería de display.INPUT_PULLUP, por lo que se asume que la conexión de los botones hace que el pin se ponga en LOW al presionarlos.Ready.
Reviews
Properties
Properties describe core aspects of the project.
Pricing & Availability
Distributor | Qty 1 |
|---|
Assets
No assets added.
Controls
Welcome 👋
Flux helps you build PCBs faster with an AI teammate!
Create your account to collaborate, stay updated, fork your own version, and get instant answers from our AI agent.