Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Grupo: 4IM4
Marco Teórico
Arduino es una plataforma de creación de electrónica de código libre, puesto que
está basada en hardware y software libre puesto que es fácil y flexible de utilizar
hacia creadores y desarrolladores puesto que permite la creación de
microordenadores de una sola placa a la que se les puede dar un diferente uso.
El hardware libre son dispositivos cuyas especificaciones y diagramas son de
acceso público por lo cual cualquier persona puede replicarlos dándonos la
posibilidad de crear propias placas llegando a ser diferentes a las que vende la
empresa, pero de igual manera funcionales a partir se su misma base.
Así mismo el Software libre son aquellos programas informáticos cuyo código es
accesible al público en general para quien quiera usarlo o modificarlo. Arduino
ofrece la plataforma Arduino IDE (Entorno de Desarrollo Integrado), que es un
entorno de programación con el que cualquiera puede crear aplicaciones para las
placas Arduino, de manera que se les puede dar todo tipo de utilidades.
Funcionamiento
El Arduino es una placa basada en un microcontrolador ATMEL. Los
microcontroladores son circuitos integrados en los que se pueden grabar
instrucciones, las cuales las escribes con el lenguaje de programación que puedes
utilizar en el entorno Arduino IDE. Estas instrucciones permiten crear programas
que interactúan con los circuitos de la placa.
El microcontrolador de Arduino posee lo que se llama una interfaz de entrada, que
es una conexión en la que podemos conectar en la placa diferentes tipos de
periféricos. La información de estos periféricos que conectes se trasladará al
microcontrolador, el cual se encargará de procesar los datos que le lleguen a través
de ellos.
El tipo de periféricos que puedas utilizar para enviar datos al microcontrolador
depende en gran medida de qué uso le estés pensando dar. Pueden ser cámaras
para obtener imágenes, teclados para introducir datos, o diferentes tipos de
sensores.
También cuenta con una interfaz de salida, que es la que se encarga de llevar la
información que se ha procesado en el Arduino a otros periféricos. Estos periféricos
pueden ser pantallas o altavoces en los que reproducir los datos procesados, pero
también pueden ser otras placas o controladores.
Materiales
1 Placa Arduino
1 Pantalla LCD de 16X2
Jumpers Macho-Macho
1 Potenciómetro de 10K
1 Push Button
1 Resistencia de 220Ω
Pines macho
Soldadura
1 cautin
Pasta para soldar
Programa Arduino version 1.8.19
Diagrama Esquemático
Código (Sketch)
Para el sketch utilizaremos el programa oficial de Arduino versión 1.8.19
y comenzaremos a declarar el puerto en donde se encuentra el arduino para que asi
el sketch funcione con el arduino que estamos trabajando.
Configuraremos el sketch con lo que quisiéramos que se vea en la pantalla lcd para
esto tenemos que declarar códigos.
Para el código del monito utilizaremos el lenguaje en binario ya que en la pantalla
LCD un solo cuadro de luz representan varios leds.
Quedandonos asi:
#include <LiquidCrystal.h>
#define PIN_BUTTON 2
#define PIN_AUTOPLAY 1
#define PIN_READWRITE 10
#define PIN_CONTRAST 12
#define SPRITE_RUN1 1
#define SPRITE_RUN2 2
#define SPRITE_JUMP 3
#define SPRITE_JUMP_UPPER '.' // Use the '.' character for the head
#define SPRITE_JUMP_LOWER 4
#define SPRITE_TERRAIN_EMPTY ' ' // User the ' ' character
#define SPRITE_TERRAIN_SOLID 5
#define SPRITE_TERRAIN_SOLID_RIGHT 6
#define SPRITE_TERRAIN_SOLID_LEFT 7
#define TERRAIN_WIDTH 16
#define TERRAIN_EMPTY 0
#define TERRAIN_LOWER_BLOCK 1
#define TERRAIN_UPPER_BLOCK 2
#define HERO_POSITION_OFF 0 // Hero is invisible
#define HERO_POSITION_RUN_LOWER_1 1 // Hero is running on lower row (pose
1)
#define HERO_POSITION_RUN_LOWER_2 2 // (pose 2)
void initializeGraphics(){
static byte graphics[] = {
// Run position 1
B01100,
B01100,
B00000,
B01110,
B11100,
B01100,
B11010,
B10011,
// Run position 2
B01100,
B01100,
B00000,
B01100,
B01100,
B01100,
B01100,
B01110,
// Jump
B01100,
B01100,
B00000,
B11110,
B01101,
B11111,
B10000,
B00000,
// Jump lower
B11110,
B01101,
B11111,
B10000,
B00000,
B00000,
B00000,
B00000,
// Ground
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
B11111,
// Ground right
B00011,
B00011,
B00011,
B00011,
B00011,
B00011,
B00011,
B00011,
// Ground left
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
B11000,
};
int i;
// Skip using character 0, this allows lcd.print() to be used to
// quickly draw multiple characters
for (i = 0; i < 7; ++i) {
lcd.createChar(i + 1, &graphics[i * 8]);
}
for (i = 0; i < TERRAIN_WIDTH; ++i) {
terrainUpper[i] = SPRITE_TERRAIN_EMPTY;
terrainLower[i] = SPRITE_TERRAIN_EMPTY;
}
}
byte digits = (score > 9999) ? 5 : (score > 999) ? 4 : (score > 99) ? 3 : (score > 9) ? 2 : 1;
lcd.setCursor(16 - digits,0);
lcd.print(score);
terrainUpper[HERO_HORIZONTAL_POSITION] = upperSave;
terrainLower[HERO_HORIZONTAL_POSITION] = lowerSave;
return collide;
}
void setup(){
pinMode(PIN_READWRITE, OUTPUT);
digitalWrite(PIN_READWRITE, LOW);
pinMode(PIN_CONTRAST, OUTPUT);
digitalWrite(PIN_CONTRAST, LOW);
pinMode(PIN_BUTTON, INPUT);
digitalWrite(PIN_BUTTON, HIGH);
pinMode(PIN_AUTOPLAY, OUTPUT);
digitalWrite(PIN_AUTOPLAY, HIGH);
initializeGraphics();
lcd.begin(16, 2);
}
void loop(){
static byte heroPos = HERO_POSITION_RUN_LOWER_1;
static byte newTerrainType = TERRAIN_EMPTY;
static byte newTerrainDuration = 1;
static bool playing = false;
static bool blink = false;
static unsigned int distance = 0;
if (!playing) {
drawHero((blink) ? HERO_POSITION_OFF : heroPos, terrainUpper, terrainLower,
distance >> 3);
if (blink) {
lcd.setCursor(0,0);
lcd.print("Press Start");
}
delay(250);
blink = !blink;
if (buttonPushed) {
initializeGraphics();
heroPos = HERO_POSITION_RUN_LOWER_1;
playing = true;
buttonPushed = false;
distance = 0;
}
return;
}
if (buttonPushed) {
if (heroPos <= HERO_POSITION_RUN_LOWER_2) heroPos =
HERO_POSITION_JUMP_1;
buttonPushed = false;
}
digitalWrite(PIN_AUTOPLAY, terrainLower[HERO_HORIZONTAL_POSITION + 2]
== SPRITE_TERRAIN_EMPTY ? HIGH : LOW);
}
delay(50);
}
Construcción
Para la construcción se hizo primero una simulación en tinkercad en donde se
hicieron pruebas para un mejor funcionamiento.
Conclusión
En conclusión, desarrollar un juego en Arduino con una pantalla LCD puede ser
una experiencia emocionante y gratificante. Arduino es una plataforma de
desarrollo versátil y económica que ofrece muchas posibilidades para crear juegos
interactivos.
El uso de una pantalla LCD proporciona una interfaz visual que permite al jugador
interactuar con el juego de una manera más intuitiva. La pantalla puede mostrar
información importante como el estado del juego, puntuaciones, niveles, y otros
elementos visuales que enriquecen la experiencia de juego.
Al crear un juego en Arduino con una pantalla LCD, es importante considerar la
limitada capacidad de procesamiento y memoria de Arduino. Esto puede afectar la
complejidad y la cantidad de elementos gráficos que se pueden mostrar. Sin
embargo, con un diseño inteligente y optimización, es posible crear juegos
divertidos y desafiantes.
Además, el desarrollo de juegos en Arduino fomenta el aprendizaje y la
experimentación con programación, electrónica y diseño. Es una excelente manera
de adquirir habilidades técnicas mientras te diviertes.
En resumen, el desarrollo de un juego en Arduino con una pantalla LCD puede ser
una experiencia enriquecedora y creativa. Con imaginación, paciencia y
conocimientos básicos de programación, es posible crear juegos interactivos y
entretenidos que pueden proporcionar horas de diversión.