Mini-concurso POV (09/10)

Durante los meses de noviembre y diciembre de 2009 los participantes de los talleres de robótica pueden participar en el mini-concurso POV organizado por la rama.

El mini-concurso consiste en construir un POV usando la placa principal y los módulos construidos en los talleres. Con él se deberá mostrar un texto o una imagen en el aire utilizando unos pocos LEDs (habitualmente se utilizan entre 4 y 8).

Normativa

Esta normativa podría ser modificada en cualquier momento por los organizadores de los talleres:

  • Solamente se pueden utilizar placas principales y módulos construidos durante los talleres. No se pueden diseñar otros circuitos electrónicos ni hacer modificaciones a los circuitos originales.
  • Se pueden utilizar múltiples módulos similares en el circuito.
  • Se permite programar los circuitos en cualquier lenguaje de programación y cualquier compilador.
  • Se puede utilizar como base el código fuente de ejemplo disponible, pero el código desarrollado por cada participante no podrá ser compartido con otros participantes hasta el final del concurso.
  • Sólo pueden presentarse los participantes de los talleres de robótica.
  • Los POVs deberán terminarse antes de que termine el año, aunque los ganadores serán los primeros que lo terminen.
  • Los organizadores de los talleres y la junta directiva de la Rama no pueden participar.
  • El código fuente de los circuitos ganadores deberá ser entregado a los organizadores. Este código fuente será publicado en internet.

Premios

  • Un servo Futaba S3003 para la persona que los construya más rápidamente.
  • Los organizadores, si lo consideran oportuno, podrán dar más premios a otros participantes en función de la calidad, utilidad, o cualquier otro factor.

Ganador: Beltrán

POV construido usando una placa principal (MBP18), siete LEDs (LTIND-A) y cuatro botones (SISW-SPST).

[Descargar fichero .c]

#include <pic16f88.h>

typedef unsigned int config;
config at _CONFIG1 __CONFIG = _CP_OFF & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_IO;

void delay(){
    long i;
//    for(i=0; i<1; i++){}
}

void main(){
	unsigned char doing = 1;
	unsigned char msg = 0;
	unsigned char msgsw = 0;
	ANSEL = 0;
	TRISA = 0xFF;
	TRISA7 = 0;
	TRISB = 0;

	RA7 = 1; PORTB = 0b00000000;
	while(1){
	if(msgsw){
		switch(msg){
			case 0:
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();

				PORTB=0b01111110; delay(); delay();
				PORTB=0b01001010; delay(); delay();
				PORTB=0b01001100; delay(); delay();
				PORTB=0b00110000; delay(); delay();
				PORTB=0b00000000; delay(); delay();
				PORTB=0b01111110; delay(); delay();
				PORTB=0b01001010; delay(); delay();
				PORTB=0b01001010; delay(); delay();
				PORTB=0b01000010; delay(); delay();
				PORTB=0b00000000; delay(); delay();
				PORTB=0b01111110; delay(); delay();
				PORTB=0b01000000; delay(); delay();
				PORTB=0b01000000; delay(); delay();
				PORTB=0b01000000; delay(); delay();
				PORTB=0b00000010; delay(); delay();
				PORTB=0b01111110; delay(); delay();
				PORTB=0b01111110; delay(); delay();
				PORTB=0b00000010; delay(); delay();
				PORTB=0b00000000; delay(); delay();
				PORTB=0b01111110; delay(); delay();
				PORTB=0b00010010; delay(); delay();
				PORTB=0b00101100; delay(); delay();
				PORTB=0b01000010; delay(); delay();
				PORTB=0b00000000; delay(); delay();
				PORTB=0b01111110; delay(); delay();
				PORTB=0b00010010; delay(); delay();
				PORTB=0b00010010; delay(); delay();
				PORTB=0b01111110; delay(); delay();
				PORTB=0b00000000; delay(); delay();
				PORTB=0b01111110; delay(); delay();
				PORTB=0b00001100; delay(); delay();
				PORTB=0b00110000; delay(); delay();
				PORTB=0b01111110; delay(); delay();
				PORTB=0b00000000; delay(); delay();

				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay(); break;
			case 1:
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();

				PORTB = 0b11111110; delay();
				PORTB = 0b10010010; delay();
				PORTB = 0b00010000; delay();
				PORTB = 0b10010010; delay();
				PORTB = 0b11111110; delay();
				PORTB = 0b10000010; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b01110000; delay();
				PORTB = 0b10001000; delay();
				PORTB = 0b10001000; delay();
				PORTB = 0b10001000; delay();
				PORTB = 0b01110000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b10000000; delay();
				PORTB = 0b10000010; delay();
				PORTB = 0b11111110; delay();
				PORTB = 0b10000000; delay();
				PORTB = 0b10000000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b11010000; delay();
				PORTB = 0b10101000; delay();
				PORTB = 0b10101000; delay();
				PORTB = 0b10101000; delay();
				PORTB = 0b11110000; delay();
				PORTB = 0b10000000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b10000010; delay();
				PORTB = 0b11111110; delay();
				PORTB = 0b10001110; delay();
				PORTB = 0b00010000; delay();
				PORTB = 0b10001110; delay();
				PORTB = 0b11111110; delay();
				PORTB = 0b10000010; delay();
				PORTB = 0b00001000; delay();
				PORTB = 0b01111000; delay();
				PORTB = 0b10000000; delay();
				PORTB = 0b10000000; delay();
				PORTB = 0b01001000; delay();
				PORTB = 0b11111000; delay();
				PORTB = 0b10000000; delay();
				PORTB = 0b10001000; delay();
				PORTB = 0b11111000; delay();
				PORTB = 0b10010000; delay();
				PORTB = 0b00001000; delay();
				PORTB = 0b10001000; delay();
				PORTB = 0b11110000; delay();
				PORTB = 0b10000000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b01110000; delay();
				PORTB = 0b10001000; delay();
				PORTB = 0b10001000; delay();
				PORTB = 0b10010010; delay();
				PORTB = 0b11111110; delay();
				PORTB = 0b10000000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b01110000; delay();
				PORTB = 0b10001000; delay();
				PORTB = 0b10001000; delay();
				PORTB = 0b10001000; delay();
				PORTB = 0b01110000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00000000; delay();

				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay(); break;
			case 2:
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();

				PORTB = 0b10000010; delay();
				PORTB = 0b11111110; delay();
				PORTB = 0b10010010; delay();
				PORTB = 0b10010010; delay();
				PORTB = 0b10010010; delay();
				PORTB = 0b01101100; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00011000; delay();
				PORTB = 0b00111100; delay();
				PORTB = 0b01111100; delay();
				PORTB = 0b11111000; delay();
				PORTB = 0b01111100; delay();
				PORTB = 0b00111100; delay();
				PORTB = 0b00011000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b10000010; delay();
				PORTB = 0b11111110; delay();
				PORTB = 0b10001110; delay();
				PORTB = 0b00110000; delay();
				PORTB = 0b11000010; delay();
				PORTB = 0b11111110; delay();
				PORTB = 0b00000010; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00000000; delay();

				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay(); break;
			case 3:
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();

				PORTB = 0b11111111; delay();
				PORTB = 0b00111100; delay();
				PORTB = 0b00111100; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00111100; delay();
				PORTB = 0b00111100; delay();
				PORTB = 0b11111111; delay();
				PORTB = 0b11111111; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00100100; delay();
				PORTB = 0b00100100; delay();
				PORTB = 0b00111100; delay();
				PORTB = 0b00111100; delay();
				PORTB = 0b11111111; delay();
				PORTB = 0b11111111; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00100100; delay();
				PORTB = 0b00100100; delay();
				PORTB = 0b00111100; delay();
				PORTB = 0b00111100; delay();
				PORTB = 0b11111111; delay();
				PORTB = 0b11111111; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00000000; delay();
				PORTB = 0b00100100; delay();
				PORTB = 0b00100100; delay();
				PORTB = 0b00111100; delay();
				PORTB = 0b00111100; delay();
				PORTB = 0b11111111; delay();

				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay();
				PORTB=0b00000000; delay(); break;
		}
	}
	if(RA0 == 0) {msgsw = 0; RA7 = 1;}                      //Rojo - apagar (piloto on).
	if(RA1 == 0) {msgsw = 1; RA7 = 0;}                      //Verde - encender (piloto off).
	if(RA2 == 0) {msg++; if(msg > 3) {msg = 0;} delay();}   //Negro1 - Mensaje siguiente.
	if(RA3 == 0) {msg--; if(msg < 0) {msg = 3;} delay();}   //Negro2 - Mensaje previo.

	}
}