Me gustaria saber ya que tengo la duda de como leer una entrada de una matriz, ya que después tengo que asignarle ese valor a cada pin por separado sabiendo que se lee la matriz de izquierda a derecha de arriba hacia abajo.
Gracias.
Me gustaria saber ya que tengo la duda de como leer una entrada de una matriz, ya que después tengo que asignarle ese valor a cada pin por separado sabiendo que se lee la matriz de izquierda a derecha de arriba hacia abajo.
Gracias.
All el elemento (i,j) de la matriz, es decir el elemento de la fila i y la columna j,
se accede como: matriz[i][j]
(En otras palabras el primer índice del arreglo es la fila y el segundo la columna).
Gracias por responder rápidamente y una consulta mas , la velocidad angular de la rueda tenemos que medirla o es posible que nos faciliten esa información ? Pregunto ya que sino me equivoco eran todas iguales.
No, tienen que calcular la velocidad de giro,
o el tiempo de vuelta en realidad, usando el módulo de sensor hall que les dimos hoy.
La idea es que lo hagan con una interrupción como ya vimos, es parecido a como hicieron con el fin de carrera, pero van a tener que hacer un par de cambios para que funcione bien (en clase comentamos algunos de estos cambios, como usar micro en vez de millis).
La matriz puede llevar el nombre que quieras, ejemplo:
int dibujo [largo de la columna] [largo de la fila];
Entonces para los pines haces lo siguiente:
digitalWrite(pin,HIGH/LOW) donde en vez de escribirle high o low le pones "dibujo[i] [j]" donde j conviene que se refiera al led que vayas utilizando. Esta bien que armes la matriz con ceros y unos ya que es lo mismo escribir digitalWrite(pin,HIGH) que digitalWrite(pin,1) y asi tambien con LOW. Eso sí, te tenes que acordar que si te querés referir al ultimo casillero de todos de la matriz seria:
dibujo [largodelacolumna - 1] [largodelafila - 1]. Ya que empezás a contar desde el [0] [0].
En cuanto a la velocidad tenes que utilizar dos variables; una para el tiempo que mediste (t_ant) y otra para el que estas por medir (t). También tenes que utilizar una tercer variable que mida el tiempo que hay entre esos dos valores (dt, diferencia de tiempo). La velocidad en sí no se mide, lo que te interesa medir es cuanto demora la rueda en dar una vuelta, o lo que es lo mismo, cuanto tiempo hay entre pulso y pulso (lo que hicimos con el sensor final de carrera). Ese tiempo es el que se guarda en la variable dt. En ese tiempo tenes que desplegar toda la secuencia de luces de cada fila de toda la matriz. Si no llegas porque la primera vuelta midió un tiempo grande y ahora la vuelta que vas a dar demora menos, la proyección de la imagen se te va a ir "atrasando", como se vio en la clase que la flor se iba girando de a poco.
Todas esas mediciones de tiempo y tener que mandar desplegar la imagen desde cero lo tenes que hacer en la función de interrupción. Primero ajustas el pin de interrupción en void setup() con la instrucción:
attachInterrupt(nro. del pin - 2, nombre de la función de interrupción, en que casos querés que la función se active);
*dice nro. del pin - 2 porque si el pin de interrupción es el 2 le tenes que escribir cero y si es el 3 un uno, pero solo se pueden usar esos pines.
o más "intuitivo":
attachInterrupt(digitalPinToInterrupt(nro. del pin), nombre de la función de interrupción, en que casos querés que la función se active);
En que casos querés que la función se active:
*los que te pueden interesar son estos
"RISING": cuando el sensor pasa de LOW a HIGH
"FALLING": al revés (creo que te va a convenir usar este, en caso de que el sensor se quede activado mas tiempo de lo que debe)
Para escribir la función de interrupción tenés que poner después de la función void loop():
void nombredelafuncióndeinterrupción() *no te olvides de los paréntesis acá. Puede llevar el nombre que vos quieras
{y acá haces las mediciones de tiempo y retomas a cero la proyección de la imagen}
Se me hizo larga la respuesta, espero que te haya servido que es lo importante :D