Ultimo día de actualizaciones

Llegando a esta altura del proyecto intentaremos en el día de hoy dejar listo el afinador para armar la ficha técnica e ir preparando la presentación en clase. Teniendo como meta terminar con la ultima actualización de la interface viendo si podemos conseguir hacer que el mecanismo con botones pueda funcionar de la manera que hemos previsto anteriormente. Obteniendo de esa manera una mejor presentación y funcionalidades mas del artefacto pudiendo seleccionar que cuerda es la que deseamos afinar, dando mejor utilidad y facilidad de manejo.

Siguiendo los pasos para llevar el prototipo a la realidad nos disponemos a realizar la conexión de los botones

Luego ajustamos el código para que cada botón este asignado a una cuerda en particular ,siguiendo la referencia de notas (E2,A2,D3,G3,B3,E4).

#include <Arduino.h>
#include <LiquidCrystal_I2C.h>
#include "config.h"
#include "audio.h"
#include "display.h"

LiquidCrystal_I2C lcd(0x27, 16, 2);

// Pines de botones
#define BUTTON_E6 2
#define BUTTON_A5 3
#define BUTTON_D4 4
#define BUTTON_G3 5
#define BUTTON_B2 6
#define BUTTON_E1 7

int selectedString = -1;

void setup() {
  Serial.begin(9600);

  lcd.init();
  lcd.backlight();
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("BandMate listo!");
  delay(1000);

  audioSetup();

  pinMode(BUTTON_E6, INPUT_PULLUP);
  pinMode(BUTTON_A5, INPUT_PULLUP);
  pinMode(BUTTON_D4, INPUT_PULLUP);
  pinMode(BUTTON_G3, INPUT_PULLUP);
  pinMode(BUTTON_B2, INPUT_PULLUP);
  pinMode(BUTTON_E1, INPUT_PULLUP);
}

void loop() {
  checkButtons();
  processAudio();
  displayUpdate(selectedString);
  delay(50);
}

// Función para leer botones y actualizar cuerda seleccionada
void checkButtons() {
  int previous = selectedString;

  if (digitalRead(BUTTON_E6) == LOW) selectedString = 0;
  else if (digitalRead(BUTTON_A5) == LOW) selectedString = 1;
  else if (digitalRead(BUTTON_D4) == LOW) selectedString = 2;
  else if (digitalRead(BUTTON_G3) == LOW) selectedString = 3;
  else if (digitalRead(BUTTON_B2) == LOW) selectedString = 4;
  else if (digitalRead(BUTTON_E1) == LOW) selectedString = 5;
  else selectedString = -1;

  // Mostrar mensaje temporal si cambió la selección
  if (selectedString != previous && selectedString != -1) {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("Afinar ");
    lcd.print(getStringInfoByIndex(selectedString));
    delay(1000); // 1 segundo de feedback
  }
}

// Función auxiliar para convertir índice a texto
const char* getStringInfoByIndex(int index) {
  switch(index) {
    case 0: return "6ta cuerda";
    case 1: return "5ta cuerda";
    case 2: return "4ta cuerda";
    case 3: return "3ra cuerda";
    case 4: return "2da cuerda";
    case 5: return "1ra cuerda";
    default: return "Desconocida";
  }
}

Con estas nuevas actualizaciones podríamos dar por concluido lo que respecta a mejoras , ahora queda enfocarse en hacer la ficha técnica e ir preparando la presentación. Dejándonos conformes con el desempeño del equipo por como nos enfocamos y pudimos superar todos los obstáculos que se presentaron durante estos meses del proyecto.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *