¿Como puedo controlar con un dipswitch la secuencia de un juego de luces?

Gracias por la bienvenida.
Les paso el código en C con el programa MikroC, lo que intento hacer es que cada bit del puerto B controle una secuencia de luces.

Código:
unsigned char rot_izq[]={0b00000001,0b00000010,0b00000100,0b00001000,0b00010000,0b00100000,0b01000000,0b10000000};
unsigned char rot_der[]={0b10000000,0b01000000,0b00100000,0b00010000,0b00001000,0b00000100,0b00000010,0b00000001};
unsigned char out_in[]={0b10000001,0b01000010,0b00100100,0b00011000,0b00100100,0b01000010,0b10000001};
unsigned char in_out[]={0b00011000,0b00100100,0b01000010,0b10000001,0b01000010,0b00100100,0b00011000};
unsigned char left_right[]={0b00001111,0b11110000,0b00001111,0b11110000,0b00001111,0b11110000,0b00001111,0b11110000};
unsigned char on_off[]={0b11111111,0b00000000,0b11111111,0b00000000,0b11111111,0b00000000,0b11111111,0b00000000};

void main() {
TRISC=0x00;
PORTC=0x00;
OPTION_REG=OPTION_REG & 0x7F;
ANSELH=0x00;
PORTB=0xFF;

while(1){
if(RB0==1){
 PORTC=rot_izq[];
 delay_ms(300);
 if(RB1==1){
  PORTC=rot_der[];
  delay_ms(300);
  if(RB2==1){
   PORTC=out_in[];
   delay_ms(300);
   if(RB3==1){
    PORTC=in_out[];
    delay_ms(300);
    if(RB4==1){
     PORTC=left_right[];
     delay_ms(300);
     if(RB5==1){
      PORTC=on_off[];
      delay_ms(300);
     }
    }
   }
  }
 }
}
}

}
 
Última edición por un moderador:
hola amigo bueno yo de pic y micro c no se mucho pero lo que puedo leer del codigo faltan cosas a mi ver ¿¿¿¿ y no podrias poner el codigo completo y a que micro pertenece ?????? y minimamente detallado en que ports están las llaves minidips conectadas ..... o mejor aun un buen diagrama
 
Última edición:
Como bien comenta locodelafonola aporta más información y repasa la definición de array:

El formato para declarar un array unidimensional es:
tipo nombre[n];
donde: n >= 1
Para acceder a un elemento del array:
nombre;
donde: 0 <= i < n
Por ejemplo, la declaración:
int A[4];
define un array de tipo entero de dimensión 4. Y ya podríamos acceder al primer
componente del array por medio de: A[0], al segundo elemento por: A[1] y al último
elemento por A[3].

En el programa de arriba a PORTC=rot_der[] no le dices que elemento del array tiene que sacar
PORTC=rot_der[x];;


Para inicializar un array es correcto asignarle los valores iniciales entre llaves, asi como definir su longitud:
int A[4] = {0, 1, 2, 3};
 
Última edición:
hola victor ...bueno mira .. yo consulte un tema similar... que nunca tuve respuesta .... justamente por un juego de luces... lo mio es con atmega .... y en lenguaje ASM .... pero los array funcionan de una manera similar ..... también están en binario .....y esa parte me funciona perfecto ..el problema lo tengo en los port cuando quiero .... reformar la salidas ....y en el caso del amigo supongo que falta algo ..por las instrucciones """ if(RB 0 .,1., 2.,3.,4 y 5 ==1""" ... supongo que allí están interviniendo otros puertos ..... pero son suposiciones ..... esa librería no esta completa a mi parecer
 
Un de los problemas de Gerogearbm es que no tiene definido ni la longitud del array aunque según que compilador te lo acepta así. y a PORTC no le da ningún valor del array: rot_izq[]; tendría que ser rot_izq[0];o [1] o...

En cuanto a lo que me comentas de atmega, mándame un privado y lo miramos si te sigue interesando.
Saludos
 
Deberias proporcionar tu diagrama, cuando uno pide ayuda en temas de electronica siempre debe proporcionar 3 cosas:

-Diagrama electrico/electronico
-Programación
-Que quieres hacer
 
Atrás
Arriba