Está en la página 1de 14

Profesor: José Daniel Pinzón Vivas

Alumnos:
Carlos Manuel Novelo Ferrer
Jesús Cuauhtémoc Que Vera
Ricardo Habid Chanona Lavalle
Jesús Roberto Moreno Montero

Materia: Programación estructurada de Microcontroladores

Práctica 3

Fecha:29/09/2022.
Marco teórico
Microcontroladores

El campo de la Ingeniería Electrónica es fundamental en los avances tecnológicos, cuyo


desarrollo y evolución se ha llevado a cabo de forma acelerada en las últimas décadas.

Los microcontroladores son uno de los dispositivos con más potencial para la solución
de problemáticas. Son pequeños chips o dispositivos que pueden ser programados
para realizar acciones o instrucciones que nosotros deseemos. Son de bajo costo,
prácticos y poderosos para circuitos que necesitan ahorrar espacio físico. Además, son
utilizados para mejorar la fiabilidad del funcionamiento y disminuir el consumo en los
circuitos.

Push Buttons

Un push button o pulsador es un tipo de interruptor momentáneo. Los contactos


dentro del interruptor se cierran al ejercer una fuerza sobre este (encendido – ON) y se
abren al retirar dicha fuerza (apagado – OFF). Es esencial para realizar prácticas y
prototipos electrónicos y también es un componente que se encuentra muy
frecuentemente en placas de circuito impreso dentro de muchos aparatos (televisores,
reproductores de audio, controles remotos, etc).

Puede usarse una de las siguientes configuraciones:

● Con resistencia pull-up: para generar un estado lógico alto (high) cuando está
inactivo y un estado bajo (low) cuando está activo.
● Con resistencia pull-down: para generar un estado lógico bajo (low) cuando está
inactivo y un estado alto (high) cuando está activo.

Display LCD 16x2

El LCD(Liquid Crystal Display) o pantalla de cristal líquido es un dispositivo empleado


para la visualización de contenidos o información de una forma gráfica, mediante
caracteres, símbolos o pequeños dibujos dependiendo del modelo.
Consta de 16 terminales las cuales podemos dividir en pines de alimentación, control y
bus de datos bidireccional.

Potenciómetro

Un potenciómetro es un resistor eléctrico variable de tres terminales y un contacto


deslizante o giratorio que permite ajustar el voltaje o tensión eléctrica. También permite
ajustar el amperaje o intensidad eléctrica.

En muchos dispositivos eléctricos los potenciómetros son los que establecen el nivel de
salida. Por ejemplo, en un altavoz el potenciómetro ajusta el volumen y en un televisor
se puede utilizar para controlar el brillo.
Materiales
● Arduino Uno R3
● Display LCD 16x2
● 4 Push Buttons
● 1 Resistencia de 220 Ω
● 4 Resistencias de 10 kΩ
● Protoboard
● Cables
● Potenciometro

Evidencias

Figura 1 y 2. Diseño del circuito en Físico

Figura 3. Diseño del circuito en Tinkercad


Link a youtube evidencia circuito fisico:https://youtu.be/cS6cvQtjYE8

Link a youtube evidencia Tinkercad:https://youtu.be/n7vKbl2Vxwo

Código:

1. #define ttower 3
2. #define CLYDE 4
3. #define BUZZ 6
4. #define UP 8
5. #define DOWN 9
6. #define LEFT 7
7. #define RIGHT 10
8. #include <LiquidCrystal.h>
9.
10. LiquidCrystal lcd_1(12, 11, 5, 4, 3, 2);
11.int x;
12. int y;
13. int espera = 600;
14. unsigned long tiempo;
15. int nivel;
16. int enemigo1x;
17. int enemigo2x;
18. int enemigo3x;
19. int enemigo1y;
20. int enemigo2y;
21. int enemigo3y;
22. int enemigo4x;
23. int enemigo4y;
24. int enemigo5x;
25. int enemigo5y;
26.
27. byte pac1[] = {
28. B00100,
29. B10100,
30. B10110,
31. B11111,
32. B10110,
33. B10100,
34. B00100,
35. B00000
36. };
37.
38. byte pac2[] = {
39. B00000,
40. B10100 ,
41. B10110,
42. B11111,
43. B10110,
44. B10100 ,
45. B00000,
46. B00000
47. };
48.
49. byte pac3[] = {
50. B00000 ,
51. B10000 ,
52. B10110 ,
53. B11111 ,
54. B10110 ,
55. B10000 ,
56. B00000 ,
57. B00000
58. };
59.
60. byte clyde[] = {
61. B00100,
62. B00101,
63. B01101,
64. B11111,
65. B01101,
66. B00101,
67. B00100,
68. B00000
69. };
70. byte Tower[] = {
71. B00100,
72. B01110,
73. B11111,
74. B11011,
75. B10101,
76. B10101,
77. B10001,
78. B10001
79.
80. };
81.
82. void setup()
83. {
84. pinMode(A0,INPUT);
85. randomSeed(analogRead(A0));
86. nivel = 1;
87. pinMode(BUZZ,OUTPUT);
88. pinMode(UP,INPUT);
89. pinMode(DOWN,INPUT);
90. pinMode(LEFT,INPUT);
91. pinMode(RIGHT,INPUT);
92. lcd_1.begin(16, 2);
93. lcd_1.createChar(0, pac1);
94. lcd_1.createChar(1, pac2);
95. lcd_1.createChar(2, pac3);
96. lcd_1.createChar(3, Tower);
97. lcd_1.createChar(4, clyde);
98.
99.
100. crearNivel();
101. tiempo=millis();
102. x = 0;
103. y = 0;
104. lcd_1.setCursor(x, y);
105. }
106.
107. void loop()
108. {
109.
110. pacman();
111. if(millis()-tiempo >= espera){
112. lcd_1.setCursor(x, y);
113. lcd_1.write(' ');
114. x++;
115. lcd_1.scrollDisplayLeft();
116. tiempo = millis();
117.
118. if(x > 38){
119. nivel++;
120. espera*=0.8;
121. x=0;
122. y=0;
123. crearNivel();
124. }}
125. }
126. void setLevel1(){
127. lcd_1.setCursor(0, 0);
128. for(int i =0; i < 7; i++){
129.
130. lcd_1.write(205);
131. }
132.
133. lcd_1.setCursor(0, 1);
134. for(int i =0; i < 7; i++){
135. lcd_1.write(205);
136. }
137. enemigo1x = random(39);
138. enemigo2x = random(39);
139. enemigo3x = random(39);
140. enemigo1y = random(2);
141. enemigo2y = random(2);
142. enemigo3y = random(2);
143. lcd_1.setCursor(enemigo1x, enemigo1y);
144. lcd_1.write(CLYDE);
145. lcd_1.setCursor(enemigo2x, enemigo2y);
146. lcd_1.write(CLYDE);
147. lcd_1.setCursor(enemigo3x, enemigo3y);
148. lcd_1.write(CLYDE);
149. lcd_1.setCursor(39, 0);
150. lcd_1.write('|');
151. lcd_1.setCursor(39, 1);
152. lcd_1.write('|');
153. }
154. void setLevel2(){
155. lcd_1.setCursor(0, 0);
156. for(int i =0; i < 7; i+2){
157. lcd_1.write(205);
158. }
159. lcd_1.setCursor(0, 1);
160. for(int i =0; i < 7; i+2){
161. lcd_1.write(205);
162. }
163. enemigo1x = random(39);
164. enemigo2x = random(39);
165. enemigo3x = random(39);
166. enemigo4x = random(39);
167. enemigo1y = random(2);
168. enemigo2y = random(2);
169. enemigo3y = random(2);
170. enemigo4y = random(2);
171.
172. lcd_1.setCursor(enemigo1x, enemigo1y);
173. lcd_1.write(CLYDE);
174. lcd_1.setCursor(enemigo2x, enemigo2y);
175. lcd_1.write(ttower);
176. lcd_1.setCursor(enemigo3x, enemigo3y);
177. lcd_1.write(CLYDE);
178. lcd_1.setCursor(enemigo4x, enemigo4y);
179. lcd_1.write(CLYDE);
180. lcd_1.setCursor(39, 0);
181. lcd_1.write('|');
182. lcd_1.setCursor(39, 1);
183. lcd_1.write('|');
184.
185. }
186.
187. void setLevel3(){
188. lcd_1.setCursor(0, 0);
189. for(int i =0; i < 7; i+3){
190. lcd_1.write(205);
191. }
192. lcd_1.setCursor(0, 1);
193. for(int i =0; i < 7; i+3){
194. lcd_1.write(205);
195. }
196. enemigo1x = random(39);
197. enemigo2x = random(39);
198. enemigo3x = random(39);
199. enemigo4x = random(39);
200. enemigo5x = random(39);
201. enemigo1y = random(2);
202. enemigo2y = random(2);
203. enemigo3y = random(2);
204. enemigo4y = random(2);
205. enemigo5y = random(2);
206. lcd_1.setCursor(enemigo1x, enemigo1y);
207. lcd_1.write(CLYDE);
208. lcd_1.setCursor(enemigo2x, enemigo2y);
209. lcd_1.write(ttower);
210. lcd_1.setCursor(enemigo3x, enemigo3y);
211. lcd_1.write(ttower);
212. lcd_1.setCursor(enemigo4x, enemigo4y);
213. lcd_1.write(ttower);
214. lcd_1.setCursor(enemigo5x, enemigo5y);
215. lcd_1.write(CLYDE);
216. lcd_1.setCursor(39, 0);
217. lcd_1.write('|');
218. lcd_1.setCursor(39, 1);
219. lcd_1.write('|');
220.
221. }
222. void checkButtons(){
223. if(digitalRead(DOWN)==HIGH){
224. lcd_1.setCursor(x, y);
225. lcd_1.write(' ');
226. y = 1;
227. lcd_1.setCursor(x, y);
228. lcd_1.write(1);
229.
230. }
231. if(digitalRead(UP)==HIGH){
232. lcd_1.setCursor(x, y);
233. lcd_1.write(' ');
234. y = 0;
235. lcd_1.setCursor(x, y);
236. lcd_1.write(1);
237.
238. }
239. if(digitalRead(RIGHT)==HIGH){
240. lcd_1.setCursor(x, y);
241. lcd_1.write(' ');
242. x++;
243. lcd_1.setCursor(x, y);
244. lcd_1.write(1);
245. if(x > 38){
246. nivel++;
247. espera*=0.8;
248. crearNivel();
249. }
250. }
251. if(digitalRead(LEFT)==HIGH){
252. lcd_1.setCursor(x, y);
253. lcd_1.write(' ');
254. x--;
255. lcd_1.setCursor(x, y);
256. lcd_1.write(1);
257.
258. }
259. if((x==enemigo1x && y == enemigo1y) || (x==enemigo2x &&
y==enemigo2y) || (x==enemigo3x && y==enemigo3y)){
260. lcd_1.clear();
261. lcd_1.print(" GAME OVER");
262.
263. while(1){
264. }
265. }
266. }
267. void pacman(){
268. for(char i = 0; i <= 2; i++){
269.
270. lcd_1.setCursor(x, y);
271. lcd_1.write(i);
272. checkButtons();
273. delay(200);
274. }
275. lcd_1.setCursor(x, y);
276. lcd_1.write(1);
277. checkButtons();
278. delay(200);
279. }
280. void crearNivel(){
281. lcd_1.clear();
282. lcd_1.home();
283. lcd_1.print("NIVEL ");
284. lcd_1.print(nivel);
285. delay(1000);
286. switch(nivel){
287. case 1:
288. setLevel1();
289. break;
290. case 2:
291. setLevel2();
292. break;
293. case 3:
294. setLevel3();
295. break;
296. default:
297. break;
298. }
299. }

Conclusiones
Podemos concluir que las pantallas LCD son dispositivos digitales de salida, es
decir su funcionamiento consta de recibir instrucciones de texto que se desea
expresar por medio de la programación. Requerimos de varias conexiones de
alimentación pues al querer visualizar el juego en el display los cables llegan a
taparlo. Para que podamos ejecutar el juego utilizamos una librería externa llamada
LiquidCrystal.

Referencias.

● Geek Factory. (2022, 9 septiembre). Push button estándar 4 pines (pulsador,

botón). Recuperado 12 de septiembre de 2022, de

https://www.geekfactory.mx/tienda/componentes/interruptores/push-button-est

andar-4-pines-pulsador-boton/

● 🥇 ¿Qué es un MICROCONTROLADOR? Tipos, aplicaciones, etc. (2022, 8

septiembre). Todo Sobre Microcontroladores. Recuperado 12 de septiembre

de 2022, de https://microcontroladoress.com/

● Mecafenix, I. (2022, 15 junio). ¿Qué es un LCD de 16×2? Ingeniería Mecafenix.

Recuperado 29 de septiembre de 2022, de

https://www.ingmecafenix.com/electronica/lcd/

También podría gustarte