Encender leds por grupos

Buenas aquí otro novatillo con el starter kit y varias dudas xD. Estoy todavía jugando a encender y apagar leds, pero me gustaría complicarlo un poco para hacer algo más elaborado.

Estoy haciendo un montaje con 6 leds a modo de prueba y para darle un poco de gracia intento crear un patrón para que vayan alternando los que se encienden y apagan.
Hasta ahí todo bien y funcionando, pero para controlar 6 leds y hacer un par de efectos habré escrito como 40 veces digitalWrite high, digitalWrite low lo que me parece algo muy chapucero y pesado incluso haciendo un copia-pega.

Entonces me pregunto si se puede escribir de alguna manera una función que enciendan varios a la vez y apague otros sin tener que escribir tantas veces digitalWrite.
Investigando como hacer esto he visto un artículo donde usando port manipulation parece que se puede hacer lo que digo, pero se recomienda no hacerlo porque es fácil cometer errores en el código y tocar los pines 0 y 1 puede dar problemas...así que no sé.

Bueno eso es todo, lo demás seguiré mirando.

Si, se puede. Si tus leds pertenecen al mismo PORT puedes usar instrucciones AVR de manejo de PORT.
Tambien puedes definir un array con los pines y barrerlos con un ciclo para comandarlos de forma rápida pero la primer opción es la que preguntas.

Busca : Arduino PORT Manipulacion o PORT Registers

Gracias!!! me pondré a investigar sobre eso. No hay peligro de avería por usar esa función no? es solo para estar seguro que a veces no sé sabe jeje.

Los ejemplos que he visto con array me resultan parecidos a usar for, salvando las distancias. Con array es posible operar simultáneamente varios pines para encender o apagar algo, o en esos casos sólo es posible algo secuencial?? Es que, me ha llamado la atención que cuando la gente se pone a programar patrones lo más habitual es imitar la luz de policía, y en esos casos hacien bucles pequeños o van a dolor con digitalWrite.

Saludos varios.

No hay peligro de avería por usar esa función no?

Como es posible que alguien cree un set de instrucciones (ATMEL u hoy MICROCHIP) tal que al usarlas se autodestruya un dispositivo? IMPOSIBLE salvo que tu deliberadamente construyas algo externo que al accionar un simple pin generes algo que lo haga.
Pero entonces le pongo un gramo de C4 y un detonador... hago un simple blink con un delay largo y BOOM

O sea no!!

Con array es posible operar simultáneamente varios pines para encender o apagar algo, o en esos casos sólo es posible algo secuencial??

Simultáneamente no. Es como si pusieras tantos digitalWrites (de los que odias) sin el loop. Lo mismo.
Lo único que es simultáneo es PORT.

Buenas he estado alejado un tiempo mientras leía un poco más sobre todo esto, que tengo mucho para leer jajaja.

surbyte:
[....]le pongo un gramo de C4 y un detonador... hago un simple blink con un delay largo y BOOM

A ver, entiendo que no me haya expresado bien pero no me seas trocho. No dije eso pensando que algo fuera a explotar ni nada catastrófico solo quería estar seguro de no dejar la placa inservible por tocar algo reservado a los que saben.

surbyte:
[...]digitalWrites (de los que odias)[...]

No odio tanto a digitalWrite, es buena gente, pero he leído en varios mensajes (alguno tuyo :wink:) que escribir 20 lineas cuando puedes hacer lo mismo en 8 es un poco chapucero y desperdicia recursos de la placa.

De momento esto es lo único que he planteado para ver como funciona, poco a poco lo intento hacer más completo

void setup() {
 DDRB=B111111; //configra todos los pines(13->8) como salida(1)

}

void loop() {
  //PINB registro, maneja todos los pines a la vez
  PINB=B110011; //Enciende 13,12,9 y 8
  delay(1000);
  PINB=B001100; //Enciende 11 y 10, apaga 13,12,9 y 8
  delay(1000);
  PINB=B010101;
  delay(1000);
  PINB=B101010;
  delay(1000);
}

Saludos.

No odio tanto a digitalWrite, es buena gente, pero he leído en varios mensajes (alguno tuyo :wink:) que escribir 20 lineas cuando puedes hacer lo mismo en 8 es un poco chapucero y desperdicia recursos de la placa.

Mis respuestas tienen que ver con lo que veo, no se puede generalizar.
Si veo un código de 15k donde se repite 100 veces digitalWrite(pin, estado) imagina... que puedo decir.
Pero a veces uno critica desde la postura del conocimiento y para la persona que lo hizo es maravilloso porque funciona. No será todo lo eficiente que se desea pero funciona.

Si buscas verás que ayer dije que usar interrupciones para leer el estado de un switch es HORRIBLE y para mi lo es pero de nuevo, para la persona que lo usa tal vez sea la única solución porque esta abrumado por tanto información.
El tema es que no se puede superar años de estudio con 1 dia/1semana/1mes... seguimos? Falta conocimiento. Y eso lleva tiempo.

Si esto es un ejemplo de prueba esta mal.

PINB es para leer el estado del puerto B.
Debes usar PORTB = B110011; //Enciende 13,12,9 y 8