Entradas de una matriz

Re: Entradas de una matriz

de Juan Agustín Rivero Szwaicer -
Número de respuestas: 0

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);

*lo unico malo es que en los compiladores que hay en la fing no funciona :/

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