Creo que ya es hora de cambiar ese montón de digitalWrite por la manipulación directa de puertos. Por ejemplo, en vez de esto:
digitalWrite(26, HIGH);
digitalWrite(25, LOW);
digitalWrite(24, LOW);
digitalWrite(23, LOW);
digitalWrite(22, LOW);
Usa esto:
PORTA = B00010000;
// PORTA 76543210
// 1 = encendido
Supongo que usas un Arduino Mega, verdad?
De ser así, puedes tomar de referencia el primer post de este hilo: PortManipulation page lacks information about Arduino Mega - Website and Forum - Arduino Forum
¿Para qué? Déjame y te explico:
"Manipulación de puertos" es una técnica de programación para microcontroladores Atmel, la cual modifica directamente un registro de un grupo de 8 pines. Este registro indica cual pin debe estar encendido y cual debe estar apagado. Al ser una instrucción de más bajo nivel, se ejecuta 10 veces más rápido que digitalWrite; ¡y además se puede manipular más de un pin al mismo tiempo!
Muy bien, ¿pero cómo se hace esto?
Si observas con atención al segundo pedazo de código que he posteado, notarás que el valor de la variable PORTA empieza con la letra 'B', seguido de una secuencia de 0's y 1's; esto es dar un valor en código binario.
PORTA y cualquier otro registro, son variables de tipo byte; y como un byte tiene 8 bits (bit: cada 1 o 0 de la secuencia), por lo tanto, la secuencia siempre debe ser de ocho cifras (en este caso, ocho "bits"). Un bit en '1', es un pin encendido (en HIGH).
Ahora observa el comentario de abajo. Después de "PORTA", verás que hay números debajo de los ya mencionados "bits"; estos números indican la posición de cada cifra. Esto será útil cuando vayas a consultar en la referencia que te acabo de dar en un enlace (link).
Ejemplo de cómo hacerlo
Digamos que quieres encender el pin 26; y apagar el 22, 23, 24 y 25. En vez de hacerlo con digitalWrite uno por uno (y además de que es más lento); lo mejor sería hacer todo al mismo tiempo, ¿no crees?.
Bien, ahora si vamos el hilo; veremos lo siguiente:
22 PORTA 0
23 PORTA 1
24 PORTA 2
25 PORTA 3
26 PORTA 4
27 PORTA 5
28 PORTA 6
29 PORTA 7
Podremos notar que el registro "PORTA" maneja todos los pines que necesitamos controlar, por consiguiente, podremos controlarlos todos en una sola línea de código (y muy pocos ciclos de la CPU).
Como sólo queremos encender el pin 26, el resto estarán apagados (en cero). Ahora notaremos que en el pin 26 dice "PORTA 4"; este ''4' significa la posición del bit que controla este pin. Ese bit es el que hay que poner en '1'. Por esta razón, es que la línea de código debe quedar así:
PORTA = B00010000;
Ahora explicado:
// Encender solamente el pin 26, o sea, el bit 4 del registro "PORTA"
PORTA = B00010000;
// PORTA 76543210 no es por nada que coloqué estos números
Si crees que la explicación ha sido un poco larga, es para poder ayudarte con el tema. En el sitio web de Arduino también tienen documentación sobre esto, pero está en inglés y sin información para el Arduino Mega.
Espero haber hecho un buen trabajo; sino, postea tus dudas... ¡sin pena!
