Paso 6: programación
Este proyecto utiliza la biblioteca rápido spi disponible en: http://code.google.com/p/fastspi/A continuación se muestra un video que demuestra la gama completa de capacidades:
No he hecho nada especial con la programación. Mi código incluye un montón de variables que definen los extremos de las tiras para corregir para ellos ser picado hacia arriba y fuera de orden. Este es el código que utiliza para la demostración en la página de introducción. Hay mucho margen de mejora.
#include < FastSPI_LED.h >
#define NUM_LEDS 178
struct CRGB {}
unsigned char b;
unsigned char r;
unsigned char g;
}; A veces los chipsets de alambre una clase hacia atrás de manera
struct CRGB * LED; struct CRGB {unsigned char r; unsigned char g; unsigned char b;};
#define PIN 3
#define SSS 1
#define SSE 25
#define CSS 26
#define CSE 46
#define STS 47
#define STE 73
#define BTS 74
#define BTE 107
#define TTS 108
#define TTE 137
#define LFS 138
#define LFE 157
#define RFS 158
#define RFE 177
#define en 500
#define apagado 100
barra de iluminación nula (int s, int e, int del int off, int r, int g, int b);
void bottomTube();
void topTube();
void seatTube();
void chainStay();
void seatStay();
void leftFork();
void rightFork();
void clearDisplay();
int currentBar = 0;
int lastBar = 0;
HFI int = 0;
elección de int = 0;
int reloj = 0; en sentido antihorario
void setup()
{
FastSPI_LED.setLeds(NUM_LEDS);
FastSPI_LED.setChipset(CFastSPI_LED::SPI_TM1809);
FastSPI_LED.setPin(PIN);
FastSPI_LED.init();
FastSPI_LED.start();
LEDs = (struct CRGB*)FastSPI_LED.getRGBData();
}
void loop() {}
Si (currentBar == 0 & & lastBar == 0)
{
lastBar = 4;
currentBar = 5;
reloj = 0; en sentido antihorario
}
{Switch(currentBar)}
caso 1: caso inicio de //main
{if(Clock==0)}
HFI = 2;
}
rotura;
caso 2: caso inicio de //main
{if(Clock==0)}
opción = random(2);
if(Choice==0)
HFI = 3;
otra cosa
HFI = 4;
}
Else {}
HFI = 1;
}
rotura;
caso 3: caso inicio de //main
if(lastBar==2|| lastBar == 4) {}
opción = random(2);
if(Choice==0)
HFI = 1;
otra cosa
HFI = 5;
}
Else {}
opción = random(2);
if(Choice==0)
HFI = 2;
otra cosa
HFI = 4;
}
rotura;
caso 4: caso inicio de //main
{if(Clock==0)}
opción = random(3);
if(Choice==0)
HFI = 5;
if(choice==2) más
HFI = 6;
otra cosa
HFI = 7;
}
Else {}
opción = random(2);
if(Choice==0)
HFI = 3;
otra cosa
HFI = 2;
}
rotura;
caso 5: Inicio caso //main
{if(Clock==0)}
opción = random(2);
if(Choice==0)
HFI = 1;
otra cosa
HFI = 3;
}
Else {}
opción = random(3);
if(Choice==0)
HFI = 4;
if(choice==2) más
HFI = 6;
otra cosa
HFI = 7;
}
rotura;
caso 6: Inicio caso //main
{if(Clock==0)}
HFI = 7;
}
Else {}
opción = random(3);
if(Choice==0)
HFI = 4;
if(choice==2) más
HFI = 5;
otra cosa
HFI = 7;
}
rotura;
caso 7: Inicio caso //main
{if(Clock==0)}
opción = random(3);
if(Choice==0)
HFI = 4;
if(choice==2) más
HFI = 5;
otra cosa
HFI = 6;
}
Else {}
HFI = 6;
}
rotura;
}
Switch(currentBar) {//light currentBar
caso 1: lightBar(SSS,SSE,ON,OFF,50,50,50); rotura;
caso 2: lightBar(CSS,CSE,ON,OFF,50,50,50); rotura;
caso 3: lightBar(STS,STE,ON,OFF,50,50,50); rotura;
caso 4: lightBar(BTS,BTE,ON,OFF,50,50,50); rotura;
caso 5: lightBar(TTS,TTE,ON,OFF,50,50,50); rotura;
caso 6: lightBar(RFS,RFE,ON,OFF,50,50,50); rotura;
caso 7: lightBar(LFS,LFE,ON,OFF,50,50,50); rotura;
}
lastBar = currentBar;
currentBar = HFI;
/*
{Switch(lastBar)}
caso 2: Inicio de //Subcase
opción = random(2);
{if(Choice==0)}
HFI = 3;
}
otra cosa
HFI = 5;
rotura; Subcase final
caso 3: Inicio de //Subcase
HFI = 2;
rotura; Subcase final
caso 5: Inicio de //Subcase
HFI = 2;
rotura; Subcase final
}
rotura; extremo principal del caso
caso 5: Inicio caso //main
{Switch(lastBar)}
caso 1: Inicio de //Subcase
opción = random(3);
{if(Choice==0)}
HFI = 4;
}
else {} if(choice==1)
HFI = 6;
}
otra cosa
HFI = 7;
rotura; Subcase final
caso 3: Inicio de //Subcase
opción = random(3);
{if(Choice==0)}
HFI = 4;
}
else {} if(choice==1)
HFI = 6;
}
otra cosa
HFI = 7;
rotura; Subcase final
caso 4: Inicio de //Subcase
opción = random(2);
{if(Choice==0)}
HFI = 1;
}
otra cosa
HFI = 3;
rotura; Subcase final
caso 6: Inicio de //Subcase
opción = random(2);
{if(Choice==0)}
HFI = 1;
}
otra cosa
HFI = 3;
rotura; Subcase final
caso 7: Inicio de //Subcase
opción = random(2);
{if(Choice==0)}
HFI = 1;
}
otra cosa
HFI = 3;
rotura; Subcase final
barra de iluminación nula (int s, int e, int del int off, int r, int g, int b) {}
para (int i = s; i < = e; i ++) {}
LEDs [i] .r = r;
LEDs [i] .g = g;
LEDs [i] .b = b;
}
FastSPI_LED.show();
Delay(del);
clearDisplay();
Delay(OFF);
}
void bottomTube() {}
{
para (int i = 74; i < = 108; i ++) {}
LEDs [i] .r = 50;
LEDs [i] .g = 50;
LEDs [i] .b = 50;
}
FastSPI_LED.show();
}
}
void topTube() {}
{
para (int i = 108; i < = 140; i ++) {}
LEDs [i] .r = 50;
LEDs [i] .g = 50;
LEDs [i] .b = 50;
}
FastSPI_LED.show();
}
}
void seatTube() {}
para (int i = 48; i < = 74; i ++)
{
LEDs [i] .r = 50;
LEDs [i] .g = 50;
LEDs [i] .b = 50;
}
FastSPI_LED.show();
}
void chainStay() {}
{
para (int i = 22; i < = 47; i ++) {}
LEDs [i] .r = 50;
LEDs [i] .g = 50;
LEDs [i] .b = 50;
}
FastSPI_LED.show();
}
}
void seatStay() {}
{
para (int i = 1; i < = 22; i ++) {}
LEDs [i] .r = 50;
LEDs [i] .g = 50;
LEDs [i] .b = 50;
}
FastSPI_LED.show();
}
}
void leftFork() {}
{
para (int i = 159; i < = 178; i ++) {}
LEDs [i] .r = 50;
LEDs [i] .g = 50;
LEDs [i] .b = 50;
}
FastSPI_LED.show();
}
}
void rightFork() {}
{
para (int i = 140; i < = 159; i ++) {}
LEDs [i] .r = 50;
LEDs [i] .g = 50;
LEDs [i] .b = 50;
}
FastSPI_LED.show();
}
}
void clearDisplay() {}
{
para (int i = 0; i < = 177; i ++) {}
LEDs [i] .r = 0;
.g LED [i] = 0;
.b LED [i] = 0;
}
FastSPI_LED.show();
}
}
No esenciales información acerca del código
El programa que tengo aquí es sólo ejecuta un completo de bar a la vez y cambiar a un bar adyacente en el sentido de la marcha. Por ejemplo el primer bar podría ser la estancia del asiento, la segunda puede entonces ser ya sea el tubo superior, tubo del asiento o cadena de permanecer como una dirección todavía no se ha establecido. Decir que el tubo superior fue la segunda barra. Se ha establecido un sentido de la marcha y la tercera barra puede ser el tubo inferior o uno de los tenedores. La barra iluminada entonces sigue adelante nunca doblar sobre sí mismo.