Skip to content

Commit

Permalink
Merge pull request #142 from clifford1one/main
Browse files Browse the repository at this point in the history
agregar apuntes clifford1one
  • Loading branch information
montoyamoraga authored Sep 10, 2024
2 parents 555cfbb + 074eb8b commit f335000
Showing 1 changed file with 139 additions and 1 deletion.
140 changes: 139 additions & 1 deletion 07-clifford1one/clase-04/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,15 @@ XIV. juan pareschi.
4. Juegos de arcade de ritmo (buscar Pop'n'Music, Taiko no Tatsujin o japanese rhythm games arcade en google) o controles de juego en general, pensar sobre todo como el usuario toma e interactúa con el objeto





# ¿QUÉ ES HEROE GUITARRA?
Heroe Guitarra es un dispositivo electrónico inspirado en el modo de uso mas común de un instrumento: un acorde accionable y una pulsación. HEROE GUITARRA tiene 3 carriles en donde están posicionados los acordes que deberemos accionar, éstos acordes estarán repartidos aleatoriamente.




![texto](./procesoHG-v2.png).

El modelo avanzó hacia una morfología más ergonómica, la cual permite un mejor agarre gracias a su tamaño disminuido respecto a la versión anterior.
Expand All @@ -115,6 +124,9 @@ El objeto final se compondrá de:

Los cambios realizados responden a la nueva mecánica del juego. La versión actual del juego (v1.1.0) consiste en una mecánica de coordinación entre ambas manos. (como en el guitar hero original) Además, con la nueva morfología de heroeGuitarra se ahorra es materiales, costos, y tiempo de fabricación.

![image](https://github.com/user-attachments/assets/9420c443-f8cf-45e3-9eea-44f709370fb8)


![texto](./croquisHG-5.jpeg).

En el caso de Heroe Guitarra 1.1.0 el "strum bar" y los "fret buttons" son emulados por el potenciómetro y pushbutton respectivamente. De esta forma, el usuario, con el dedo pulgar de una mano debe seleccionar el carril donde se ejecutará la acción(con el potenciómetro) y con el dedo índice de la otra mano deberá ejecutar la acción(con el pushbutton).
Expand Down Expand Up @@ -166,9 +178,18 @@ https://www.arduino.cc/reference/es/language/functions/digital-io/pinmode/
https://www.w3schools.com/js/js_if_else.asp


##DEFINICIÓN
Guitarra Héroe consiste en un juego de un jugaro que se juega con ambas manos. En pantalla se muestran 3 carriles, con el potenciómetro debes apuntar y seleccionar el carril que tenga una casilla encendida mas cercana al señalizador. Una vez seleccionada se debe usar el gatillo para ejecutar la acción, de esta forma "apagar" la casilla, y poder pasar a la siguiente etapa.

#CÓDIGO
Fue un proceso bastante complicado, el cual se compuso por varias fases, en las que iba aprendiendo distintas cosas del funcionamiento general, tanto de los botones como del arduino, y sus actuadores y sensores.

¿Cómo se usa?
Se utiliza con ambas manos, con una mano debes utilizar el potenciómetro para seleccionar el carril donde quieres ejecutar la acción, mientras que simultáneamente, con el dedo índice de la otra mano debes utilizar el gatillo para ejecutar la acción misma. Debes ir ejecutando acciones en el carril correspondiente de abajo a arriba, de modo que los LEDs se apagen, hasta haber completado la pantalla.

![image](https://github.com/user-attachments/assets/eb5e87e3-c12c-4d7f-89bf-3ad0f98fe9fb)


```ino
int ledPin = 11;
int potPin = A1;
Expand Down Expand Up @@ -355,8 +376,125 @@ int botonValue = digitalRead(botonWeno);
```
En este còdigo, con el slider puedo seleccionar el carril. El paso siguiente es que al apretar el boton en el carril ocrrecto, se apague el led.


```ino
int pulsadorPin = 4; // Variable que guarda el número del pin al que conectamos el pulsador.
int valorPulsador = 0; // Variable donde almacenaremos la lectura del estado del pulsador.

void setup() {
Serial.begin(9600); // Inicializamos el puerto serie.
pinMode(pulsadorPin, INPUT_PULLUP); // Declaramos la variable inputPin como entrada y activamos su resistencia interna Pullup.
}

void loop(){
valorPulsador = digitalRead(pulsadorPin); // Lectura digital de pulsadorPin

if (valorPulsador == HIGH) {
Serial.println("Pulsado"); // Si detecta que pulsamos el pulsador imprime por el monitor serie "pulsado".
}
else {
Serial.println("No pulsado"); // En caso contrario imprime por el monitor serie "No pulsado".
}
delay(1000); // Espera un segundo al final del bucle
}

```
Como no lograba hacer funcionar el pulsador, utilicé este código aislado, que utiliza el serial.println para avisar qué se está detectando del botón. Al hacer esto pude comprobar que el botón no funcionaba como debería, por lo que decidimos descartar su uso en el código final
![image](https://github.com/user-attachments/assets/94380704-9bfb-4b87-86e1-af71cbcae946)


##CÓDIGO FINAL

```INO
/*
Single Frame
Displays single frames using matrix.loadFrame
See the full documentation here:
https://docs.arduino.cc/tutorials/uno-r4-wifi/led-matrix
*/

#include "Arduino_LED_Matrix.h" // Incluye the LED_Matrix library
#include "framesv2.h" // Incluye el archivo con los códigos de los frames en lenguaje hexadecimal

int potPin = A0; //declaro que el pin del potenciómetro es el "A0"
ArduinoLEDMatrix matrix; // Create an instance of the ArduinoLEDMatrix class
//int botonWeno = 2; Originalmente declaraba el pin del pulsador

bool ogDerSeen = false; //Variable que utilizaré como "flag", que sirve para indicar que una vez que se haya cumplido cierta condición, el código se ejecute a partir de cierta línea
//bool fase2Seen = false; //Ésta era otra flag, utilizada para una fase mas avanzada del juego(por temas de tiempo fue descartada.

void setup() {
Serial.begin(9600); // Se inicializa la comunicación
matrix.begin(); // Se inicializa la matriz LED
}

void loop() {

int potValue = analogRead(potPin); // Acá le pido que, lea el valor(potValue) desde el pin del potenciómetro(potPin).

int carril = map(potValue, 0, 1023, 0, 255); //Ésta línea sirve para hacer una conversión proporcional entre los valores emitidos por el potenciómetro, y los valores leídos por el pin análogo

if (ogDerSeen == false) { //Declaro que, si, el frame "ogDerSeen" no ha sido mostrado, pasa lo siguiente
if (potValue > 140 && potValue < 401) {
matrix.loadFrame(ogIzq);
} //Declaro que, si, el valor del potenciómetro está entre 142 y 400, muestre el frame "ogIzq".

// Load and display the "danger" frame on the LED matrix
else if (potValue > 400 && potValue < 639) {
matrix.loadFrame(ogMed);
} //Declaro que, si, el valor del potenciómetro está entre 401 y 638, muestre el frame "ogMed".

else if (potValue > 638 && potValue < 890) {
matrix.loadFrame(ogDer);
ogDerSeen = true;//aca declaro la variable "ogDerSeen" como HIGH, para usarlo como referencia de la fase.

} //Declaro que, si, el valor del potenciómetro está entre 639 y 889, muestre el frame "ogDer".
}


//FASE 2, esto es marcado por la flag "ogDerSeen".
if(ogDerSeen == true) { //Declaro que, si, la variable "ogDerSeen" está HIGH, el código corre a partir de aquí.
// Load and display the "danger" frame on the LED matrix
if (potValue > 638 && potValue < 890) {
matrix.loadFrame(ogDer);
} //aca le pido que si el valor esta entre 400 y 639, se "coloque" en el carril del medio

else if (potValue > 400 && potValue < 639) {
matrix.loadFrame(fase2);
//fase2Seen = true;
}

else if (potValue > 140 && potValue < 401) {
matrix.loadFrame(faseExp);
//fase2Seen = true;
}
/*
if(fase2Seen == true) {
if (potValue > 140 && potValue < 401) {
matrix.loadFrame(fase3);
}
else if(potValue > 400 && potValue < 639){
matrix.loadFrame(fase4);
}
else if(potValue > 638 && potValue < 890){
matrix.loadFrame(fase5);
}
}*/ //Este es un intento por crear más faces que alarguen la duración del juego. Sin embargo por limitaciones de tiempo no se pudo implementar correctamente.
}
}






/*if (potValue > 638 && potValue < 890 && botonValue == HIGH) {
matrix.loadFrame(finFase1);
} // aca quiero pedirle que si està en el carril derecho(es decir, que el valor del pot sea entre 638 y 890) y que si el botòn es pulsado, que muestre otro frame
}
*/ //Aquí se encuentra un intento por incluir el botón dentro de las mecanicas del juego. FInalmente no pudo ser implementado.

```
En este código se optó por un camino alternativo, debido a que la idea original no se pudo implementar de la manera en que se pensó. La opción del botón se reemplazó por seleccionar el carril con el potenciómetro, y una vez se selecciona el carril correcto se pasa a la siguiente etapa.

0 comments on commit f335000

Please sign in to comment.