Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Alumnos:
Carlos Manuel Novelo Ferrer
Jesús Cuauhtémoc Que Vera
Ricardo Habid Chanona Lavalle
Jesús Roberto Moreno Montero
Práctica 3
Fecha:29/09/2022.
Marco teórico
Microcontroladores
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
● 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.
Potenciómetro
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
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.
https://www.geekfactory.mx/tienda/componentes/interruptores/push-button-est
andar-4-pines-pulsador-boton/
de 2022, de https://microcontroladoress.com/
https://www.ingmecafenix.com/electronica/lcd/