Lätt cykel: Programmerbar RGB LED Strips på cykelns ram (6 / 7 steg)
Steg 6: programmering
Detta projekt använder snabb spi-biblioteket finns på: http://code.google.com/p/fastspi/En video som visar alla de funktioner visas här:
Jag har gjort något speciellt med programmering. Min kod innehåller en massa variabler som definierar ändarna av remsorna att rätta till dem som hackade upp och i ordning. Detta är koden jag använde för demo på sidan introduktion. Det finns gott om utrymme för förbättringar.
#include < FastSPI_LED.h >
#define NUM_LEDS 178
struct CRGB {
unsigned char b;
unsigned char r;
unsigned char g;
}; Ibland chipsets tråd i en baklänges en slags sätt
struct CRGB * lysdioder; struct CRGB {unsigned char r, unsigned char g, unsigned char b;}.
#define stift 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 på 500
#define av 100
void lightBar (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;
int nextBar = 0;
int val = 0;
int clock = 0; moturs
void setup()
{
FastSPI_LED.setLeds(NUM_LEDS);
FastSPI_LED.setChipset(CFastSPI_LED::SPI_TM1809);
FastSPI_LED.setPin(PIN);
FastSPI_LED.init();
FastSPI_LED.start();
lysdioder = (struct CRGB*)FastSPI_LED.getRGBData();
}
void loop() {
om (currentBar == 0 & & lastBar == 0)
{
lastBar = 4;
currentBar = 5;
klockan = 0; moturs
}
Switch(currentBar) {
fall 1: //main fall start
IF(Clock==0) {
nextBar = 2;
}
bryta;
fall 2: //main fall start
IF(Clock==0) {
Val = random(2);
IF(Choice==0)
nextBar = 3;
annat
nextBar = 4;
}
annat {
nextBar = 1;
}
bryta;
fall 3: //main fall start
IF(lastBar==2|| lastBar == 4) {
Val = random(2);
IF(Choice==0)
nextBar = 1;
annat
nextBar = 5;
}
annat {
Val = random(2);
IF(Choice==0)
nextBar = 2;
annat
nextBar = 4;
}
bryta;
fall 4: //main fall start
IF(Clock==0) {
Val = random(3);
IF(Choice==0)
nextBar = 5;
annat if(choice==2)
nextBar = 6;
annat
nextBar = 7.
}
annat {
Val = random(2);
IF(Choice==0)
nextBar = 3;
annat
nextBar = 2;
}
bryta;
fall 5: //main fall start
IF(Clock==0) {
Val = random(2);
IF(Choice==0)
nextBar = 1;
annat
nextBar = 3;
}
annat {
Val = random(3);
IF(Choice==0)
nextBar = 4;
annat if(choice==2)
nextBar = 6;
annat
nextBar = 7.
}
bryta;
mål 6: //main fall start
IF(Clock==0) {
nextBar = 7.
}
annat {
Val = random(3);
IF(Choice==0)
nextBar = 4;
annat if(choice==2)
nextBar = 5;
annat
nextBar = 7.
}
bryta;
fall 7: //main fall start
IF(Clock==0) {
Val = random(3);
IF(Choice==0)
nextBar = 4;
annat if(choice==2)
nextBar = 5;
annat
nextBar = 6;
}
annat {
nextBar = 6;
}
bryta;
}
Switch(currentBar) {//light currentBar
fall 1: lightBar(SSS,SSE,ON,OFF,50,50,50); bryta;
fall 2: lightBar(CSS,CSE,ON,OFF,50,50,50); bryta;
fall 3: lightBar(STS,STE,ON,OFF,50,50,50); bryta;
fall 4: lightBar(BTS,BTE,ON,OFF,50,50,50); bryta;
fall 5: lightBar(TTS,TTE,ON,OFF,50,50,50); bryta;
mål 6: lightBar(RFS,RFE,ON,OFF,50,50,50); bryta;
fall 7: lightBar(LFS,LFE,ON,OFF,50,50,50); bryta;
}
lastBar = currentBar;
currentBar = nextBar;
/*
Switch(lastBar) {
fall 2: //Subcase start
Val = random(2);
IF(Choice==0) {
nextBar = 3;
}
annat
nextBar = 5;
bryta; Subcase slutet
fall 3: //Subcase start
nextBar = 2;
bryta; Subcase slutet
fall 5: //Subcase start
nextBar = 2;
bryta; Subcase slutet
}
bryta; huvudsakliga mål slutet
fall 5: //main fall start
Switch(lastBar) {
fall 1: //Subcase start
Val = random(3);
IF(Choice==0) {
nextBar = 4;
}
annat if(choice==1) {
nextBar = 6;
}
annat
nextBar = 7.
bryta; Subcase slutet
fall 3: //Subcase start
Val = random(3);
IF(Choice==0) {
nextBar = 4;
}
annat if(choice==1) {
nextBar = 6;
}
annat
nextBar = 7.
bryta; Subcase slutet
fall 4: //Subcase start
Val = random(2);
IF(Choice==0) {
nextBar = 1;
}
annat
nextBar = 3;
bryta; Subcase slutet
mål 6: //Subcase start
Val = random(2);
IF(Choice==0) {
nextBar = 1;
}
annat
nextBar = 3;
bryta; Subcase slutet
fall 7: //Subcase start
Val = random(2);
IF(Choice==0) {
nextBar = 1;
}
annat
nextBar = 3;
bryta; Subcase slutet
void lightBar (int s, int e, int del int off, int r, int g, int b) {
för (int jag = s; i < = e; i ++) {
lysdioder [i] Rosencrantz = r;
lysdioder [i] t.ex = g;
lysdioder [i] spelar = b;
}
FastSPI_LED.show();
Delay(del);
clearDisplay();
Delay(off);
}
void bottomTube() {
{
för (int jag = 74; jag < = 108; i ++) {
lysdioder [i] Rosencrantz = 50;
lysdioder [i] t.ex = 50;
lysdioder [i] spelar = 50;
}
FastSPI_LED.show();
}
}
void topTube() {
{
för (int jag = 108; jag < = 140; i ++) {
lysdioder [i] Rosencrantz = 50;
lysdioder [i] t.ex = 50;
lysdioder [i] spelar = 50;
}
FastSPI_LED.show();
}
}
void seatTube() {
för (int jag = 48; jag < = 74; i ++)
{
lysdioder [i] Rosencrantz = 50;
lysdioder [i] t.ex = 50;
lysdioder [i] spelar = 50;
}
FastSPI_LED.show();
}
void chainStay() {
{
för (int jag = 22; jag < = 47; i ++) {
lysdioder [i] Rosencrantz = 50;
lysdioder [i] t.ex = 50;
lysdioder [i] spelar = 50;
}
FastSPI_LED.show();
}
}
void seatStay() {
{
för (int jag = 1; jag < = 22; i ++) {
lysdioder [i] Rosencrantz = 50;
lysdioder [i] t.ex = 50;
lysdioder [i] spelar = 50;
}
FastSPI_LED.show();
}
}
void leftFork() {
{
för (int jag = 159; jag < = 178; i ++) {
lysdioder [i] Rosencrantz = 50;
lysdioder [i] t.ex = 50;
lysdioder [i] spelar = 50;
}
FastSPI_LED.show();
}
}
void rightFork() {
{
för (int jag = 140; jag < = 159; i ++) {
lysdioder [i] Rosencrantz = 50;
lysdioder [i] t.ex = 50;
lysdioder [i] spelar = 50;
}
FastSPI_LED.show();
}
}
void clearDisplay() {
{
för (int jag = 0; jag < = 177; i ++) {
lysdioder [i] Rosencrantz = 0;
lysdioder [i] t.ex = 0;
lysdioder [i] spelar = 0;
}
FastSPI_LED.show();
}
}
Icke-essentiella information om koden
Programmet jag har här bara köra en full bar på en gång och byta till en intilliggande bar i färdriktningen. Första baren kan till exempel vara sätet vistelse, andra kan då vara antingen det övre röret, placera röret eller kedja bo som en riktning inte har ännu fastställts. Säga det övre röret var den andra baren. En färdriktning har inrättats och den tredje bar kan vara antingen nedre röret eller en av gafflarna. Den belysta bar fortsätter sedan framåt aldrig fördubbling på sig själv.