Arduino - Aprendiendo Entradas y Salidas

 
Vista:

Aprendiendo Entradas y Salidas

Publicado por NaiN (2 intervenciones) el 05/07/2021 19:46:05
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
//Que tal, tengo este problema: segun deberia al pulsar un boton encender el led que le corresponde, sin embargo, al pulsar el boton el LED se queda encendido, a pesar de reestablecerlo a LOW. Podrian decirme mi error.
 
 
 
//Delcaración de Los Pines de los LED
byte boton0=0;
byte boton1=1;
byte boton2=2;
byte boton3=3;
byte boton4=4;
byte boton5=5;
byte boton6=6;
byte led7=7;
byte led8=8;
byte led9=9;
byte led10=10;
byte led11=11;
byte led12=12;
byte led13=13;
int estado0=0;
int estado1=0;
int estado2=0;
int estado3=0;
int estado4=0;
int estado5=0;
int estado6=0;
 
int i; //Variable del Contador del FOR
long vel=1000; //Velocidad de las Luces
 
 
void setup() {
                            //DEFINIMOS ENTRADAS Y SALIDAS
  pinMode (boton0,INPUT);
  pinMode (boton1,INPUT);
  pinMode (boton2,INPUT);
  pinMode (boton3,INPUT);
  pinMode (boton4,INPUT);
  pinMode (boton5,INPUT);
  pinMode (boton6,INPUT);
  pinMode (led7,OUTPUT);
  pinMode (led8,OUTPUT);
  pinMode (led9,OUTPUT);
  pinMode (led10,OUTPUT);
  pinMode (led11,OUTPUT);
  pinMode (led12,OUTPUT);
  pinMode (led13,OUTPUT);
 
digitalWrite(led7,LOW);
digitalWrite(led8,LOW);
digitalWrite(led9,LOW);
digitalWrite(led10,LOW);
digitalWrite(led11,LOW);
digitalWrite(led12,LOW);
digitalWrite(led13,LOW);
 
}
void loop() {
  // put your main code here, to run repeatedly:
                            // AQUI INICIA EL CODIGO
// guardar el estado de las variables de entrada
estado0 = digitalRead(boton0);
estado1 = digitalRead(boton1);
estado2 = digitalRead(boton2);
estado3 = digitalRead(boton3);
estado4 = digitalRead(boton4);
estado5 = digitalRead(boton5);
estado6 = digitalRead(boton6);
 
if (estado0 == HIGH)
{
  digitalWrite(led7,HIGH);
  delay(vel);
  digitalWrite(led7,LOW);
  }
 
  if (estado1 == HIGH)
{
  digitalWrite(led8,HIGH);
  delay(vel);
  digitalWrite(led8,LOW);
  }
 
 if (estado2 == HIGH)
{
  digitalWrite(led9,HIGH);
  delay(vel);
  digitalWrite(led9,LOW);
  }
 
if (estado3 == HIGH)
{
  digitalWrite(led10,HIGH);
  delay(vel);
  digitalWrite(led10,LOW);
  }
 
  if (estado4 == HIGH)
{
  digitalWrite(led11,HIGH);
  delay(vel);
  digitalWrite(led11,LOW);
  }
 
 if (estado5 == HIGH)
{
  digitalWrite(led12,HIGH);
  delay(vel);
  digitalWrite(led12,LOW);
  }
 
 if (estado6 == HIGH)
{
  digitalWrite(led13,HIGH);
  delay(vel);
  digitalWrite(led13,LOW);
  }
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Gio
Val: 17
Ha aumentado su posición en 4 puestos en Arduino (en relación al último mes)
Gráfica de Arduino

Aprendiendo Entradas y Salidas

Publicado por Gio (9 intervenciones) el 06/07/2021 06:02:24
Hola NaiN, tu código está correcto, tal vez el problema está en que no has conectado una resistencia PULL DOWN en cada botón. Otra cosa que no te beneficia, es que el pin 0 del arduino, no funciona como entrada, por lo que si estás usando ARDUINO UNO, tendrás que hacer uso de 6 botones y 6 LEDs en vez de 7.

Lo malo de tu código es que es muy largo, puedes reducirlo haciendo uso de Arrays. Por ejemplo, para declarar los pines de los LEDs, tienes que hacer lo siguiente:

1
const byte LED = { 12, 11, 10, 9, 8, 7 };

Y por ejemplo, para encender el primer LED (del pin 13) tienes que hacer lo siguiente:

1
digitalWrite(LED[0], HIGH);

Si te fijas, el array LED almacena, en este caso, 6 valores y para acceder a uno u otro, tienes que llamar el array por su nombre y especificar a que valor quieres acceder, para ello debes colocar entre corchetes que valor quieres. Ten en cuenta que para el primer valor, debes poner entre corchetes el numero [0], para el segundo valor el numero [1] y así sucesivamente.

En resumen, el primer LED es LED[0], el segundo LED es LED[1], etc.


Tu código quedaría algo así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//Delcaración de Los Pines de los LED
const byte BOTON[] = { 1,  2,  3,  4, 5, 6 };
const byte LED[]   = { 12, 11, 10, 9, 8, 7 };
const byte n = sizeof(LED); //Cantidad de LEDs y botones
 
unsigned int vel=1000; //Velocidad de las Luces
 
 
void setup() {
	//DEFINIMOS ENTRADAS Y SALIDAS
	for(byte i=0; i < n; i++){
		pinMode (BOTON[i], INPUT);
		pinMode (LED[i], OUTPUT);
		digitalWrite(LED[i],LOW);
	}
}
 
 
void loop() {
	//AQUI INICIA EL CODIGO
	for(byte i=0; i < n; i++){
		if(digitalRead(BOTON[i]) == HIGH){
			digitalWrite(LED[i], HIGH);
			delay(vel);
			digitalWrite(LED[i], LOW);
		}
	}
}

Y tus conexiones serían las siguientes por si necesitas una mano en esto también:

Conexiones

Espero que mi aporte te sea de ayuda, un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Aprendiendo Entradas y Salidas

Publicado por NaiN (2 intervenciones) el 06/07/2021 16:25:29
Muchas gracias, lo voy a checar y te agradezco mucho por tu ayuda.
Voy a leer sobre los arrays.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Gio
Val: 17
Ha aumentado su posición en 4 puestos en Arduino (en relación al último mes)
Gráfica de Arduino

Aprendiendo Entradas y Salidas

Publicado por Gio (9 intervenciones) el 06/07/2021 22:07:11
Perfecto, mucho ánimo!

El tema de los arrays ("arreglos" o "matrices" en español) es sencillo pero puede generar algo de confusión al principio, una vez que los entiendes, los usarás para casi todo.

En resumen, los arrays son variables o constantes que almacenan mas de un solo valor, por ejemplo para almacenar un registro de temperaturas.


Para declarar (crear) un array vacío (sin valores iniciales) se hace de la siguiente forma:
1
int nombreDeMiArray[10];
En este caso, he creado un array de tipo "int" que me permite almacenar hasta 10 valores numéricos en su interior.

Para declarar (crear) un array con valores preestablecidos (iniciales) se hace de la siguiente forma:
1
int nombreDeMiArray[] = { 10, 255, 1001, -300, 0, 9 };
En este caso, he creado un array de tipo "int" que almacena 6 valores numéricos en su interior y esa será su capacidad máxima, oséa que si luego quiero almacenar un 7mo número (luego de donde se almacena el 9), no podré. Si te fijas, lo valores van expresados entre llaves, y los corchetes no pueden faltar, por lo que en este caso debes ponerlos vacíos por dentro.

Para usar un array, se hace de la siguiente forma:
1
2
3
4
5
6
7
8
9
10
//LO DECLARAMOS
    int miArray[6];
 
//LE ASIGNAMOS UN VALOR EN CADA POSICION
    miArray[0] = 10;
    miArray[1] = 12;
    miArray[2] = 14;
    miArray[3] = 16;
    miArray[4] = 18;
    miArray[5] = 20;
Si te fijas, el primer valor está en la posición [0] y la sexta posición está en [5], esto es porque dentro de sus corchetes se trabaja desde el 0, oséa que si creas un array de 6 posiciones, estas irán del 0 al 5.

Ahora, si yo hago un println para ver el tercer valor almacenado (posición 2) en el monitor, lo haría de la siguiente forma:
1
println(miArray[2]); //ESTO IMPRIMIRIA EL NUMERO 14 EN PANTALLA

Y si quisieras cambiar todos sus valores, de una forma mas sencilla, puedes hacer uso de las llaves, como en el siguiente ejemplo:
1
miArray[] = { 20, 22, 24, 26, 28, 30 };

Ahora si hicieras println de la posición 2, se mostraría en pantalla el numero 24.


Aquí tienes documentación oficial sobre los arrays en arduino: https://www.arduino.cc/reference/en/language/variables/data-types/array/ por si quieres seguir investigando.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar