Swebrick

För dig som hittat tillbaka till LEGO®. En mötesplats för vuxna entusiaster.
Huvudmeny

Adresserbar LED

Startat av mullemannen, 16 april 2022 kl. 13:07

Föregående ämne - Nästa ämne

mullemannen

Hej på er!

Jag sitter och lär mig hur man proggrammerar Adresserbar LEDslinga ( Neopixel)
Använder mig av ARDUINO och har fått denna att lysa, blinka osv,
Vill proggrammera så att flera sekvenser i LEDslingar jobbar samtidigt
Hur gör jag detta på enklast sätt?
Mvh

Mullemannen

robinnilsson403

Satt och experimenterade med samma saker för 4 år sedan. Jag är duktig på att starta projekt, så jag kom inte ens så långt.
I min skalle brann en motsats, En skogsbrand i en park
Där hundratusen apor, Fyller tonårsblanka ark

mullemannen

Citat från: robinnilsson403 skrivet 16 april 2022 kl. 14:03
Satt och experimenterade med samma saker för 4 år sedan. Jag är duktig på att starta projekt, så jag kom inte ens så långt.

Jag har lyckats att få detta att fungera
det blir ju en del kod för varje segment,
fick kalla varje del led1, led2, led3 och led4
lägger i loopen en ny loop för varje segment,
varje segment programmerar jag vad lysdioderna skall göra,
finns säkert ett smidigare sätt men i testsyfte

Nedan finns koden

#include <FastLED.h>

#define LED_PIN     2
#define NUM_LEDS    20
#define BRIGHTNESS 10

CRGB leds[NUM_LEDS];

void setup() {
FastLED.clear(); 
FastLED.addLeds<WS2812B, LED_PIN, RGB>(leds, NUM_LEDS);  // GRB ordering is typical
FastLED.setBrightness(BRIGHTNESS );
}

void loop(){

//fill_solid( leds, NUM_LEDS, CRGB(255,255,255));

led1();
delay(1000);
led2();
delay(1000);
led3();
delay(1000);
led4();
delay(5000);
}

void led1(){
 
// Turn the LED on, then pause
  leds[0] = CRGB(0,255,0);
  FastLED.show();
  delay(400);
  // Now turn the LED off, then pause
  leds[0] = CRGB(255,255,255);
  FastLED.show();
  //delay(500);

// Turn the LED on, then pause
  leds[1] = CRGB(0,255,0);
  FastLED.show();
  delay(400);
  // Now turn the LED off, then pause
  leds[1] = CRGB(255,255,255);
  FastLED.show();
  //delay(500);
 
// Turn the LED on, then pause
  leds[2] = CRGB(0,255,0);
  FastLED.show();
  delay(400);
  // Now turn the LED off, then pause
  leds[2] = CRGB(255,255,255);
  FastLED.show();
  //delay(500);

// Turn the LED on, then pause
  leds[3] = CRGB(0,255,0);
  FastLED.show();
  delay(400);
  // Now turn the LED off, then pause
  leds[3] = CRGB(255,255,255);
  FastLED.show();
  //delay(500);

// Turn the LED on, then pause
  leds[4] = CRGB(0,255,0);
  FastLED.show();
  delay(400);
  // Now turn the LED off, then pause
  leds[4] = CRGB(255,255,255);
  FastLED.show();
  //delay(500);

// Turn the LED on, then pause
  leds[5] = CRGB(0,255,0);
  FastLED.show();
  delay(400);
  // Now turn the LED off, then pause
  leds[5] = CRGB(255,255,255);
  FastLED.show();
  //delay(1000);

}

void led2() {

// Turn the LED on, then pause
  leds[6] = CRGB(255,0,0);
  FastLED.show();
  delay(300);
  // Now turn the LED off, then pause
  leds[6] = CRGB(255,255,255);
  FastLED.show();
  delay(500);
 
// Turn the LED on, then pause
  leds[7] = CRGB(255,0,0);
  FastLED.show();
  delay(300);
  // Now turn the LED off, then pause
  leds[7] = CRGB(255,255,255);
  FastLED.show();
  delay(500);

// Turn the LED on, then pause
  leds[8] = CRGB(255,0,0);
  FastLED.show();
  delay(300);
  // Now turn the LED off, then pause
  leds[8] = CRGB(255,255,255);
  FastLED.show();
  delay(500);

  // Turn the LED on, then pause
  leds[9] = CRGB(255,0,0);
  FastLED.show();
  delay(300);
  // Now turn the LED off, then pause
  leds[9] = CRGB(255,255,255);
  FastLED.show();
  delay(500);

  // Turn the LED on, then pause
  leds[10] = CRGB(255,0,0);
  FastLED.show();
  delay(300);
  // Now turn the LED off, then pause
  leds[10] = CRGB(255,255,255);
  FastLED.show();
  delay(500);
}

void led3(){

// Turn the LED on, then pause
  leds[11] = CRGB(0,0,255);
  FastLED.show();
  delay(500);
  // Now turn the LED off, then pause
  leds[11] = CRGB(255,255,255);
  FastLED.show();
  delay(500);
 
// Turn the LED on, then pause
  leds[12] = CRGB(0,0,255);
  FastLED.show();
  delay(500);
  // Now turn the LED off, then pause
  leds[12] = CRGB(255,255,255);
  FastLED.show();
  delay(500);

  // Turn the LED on, then pause
  leds[13] = CRGB(0,0,255);
  FastLED.show();
  delay(500);
  // Now turn the LED off, then pause
  leds[13] = CRGB(255,255,255);
  FastLED.show();
  delay(500);

  // Turn the LED on, then pause
  leds[14] = CRGB(0,0,255);
  FastLED.show();
  delay(500);
  // Now turn the LED off, then pause
  leds[14] = CRGB(255,255,255);
  FastLED.show();
  delay(500);

  // Turn the LED on, then pause
  leds[15] = CRGB(0,0,255);
  FastLED.show();
  delay(500);
  // Now turn the LED off, then pause
  leds[15] = CRGB(255,255,255);
  FastLED.show();
  delay(500);
}

void led4(){

fill_solid( leds, NUM_LEDS, CRGB(0,255,0));
delay (1000);
 
}
Mvh

Mullemannen

Godtfred

Som inspiration lägger jag upp programmeringen av CB Bunkern. Definierade 4 olika scener: A, A2, B och C som varje rum kan ha. Inför varje uppdatering anropar jag rumsfunktionerna och uppdaterar data. När all data är uppdaterad så skickar jag ut det på LED-slingan och väntar på nästa tidpunkt.

Är inte så snyggt programmerat, men jag bygger och löder hellre och hade bara några timmar på mig att skriva koden...

// LED-slinga LEGO CB Bunker 2022. 1:a utgåvan. SK6812 slinga med 300LED/5m och en Arduino nano...
// Tillägg:  Bygel mellan PD2(32) och PD3(1) skippar den röda sekvensen

#include <Adafruit_NeoPixel.h>

int Clicks = 0; //Global klocka
int Bredd = 10; //Bredden i varje rum = Antalet LED
int BRIGHTNESS = 150; //Global dimning 255 MAX
#define stripL 290 // Maximal längd
#define stegtid 30 // ms mellan varje steg.
int Vitt[4] = {50,90,0,255}; // Default vitt
int Start[] =   //Adress på första LED i varje rum
      {1 , 13, 24, 36, 47,
       69, 81, 92, 104, 115,
       137, 149, 160, 172, 183,
       205, 217, 228, 240, 251};
int First = 20; //Första som lyser
int R1; int R2; int R3; int R4; int R5;
int redActive;

Adafruit_NeoPixel strip = Adafruit_NeoPixel(stripL, 19, NEO_GRBW + NEO_KHZ800);

void setup() {
  pinMode(2, OUTPUT);
  pinMode(3, INPUT_PULLUP);
  digitalWrite(2,0);
  strip.begin();           // INITIALIZE NeoPixel strip object (REQUIRED)
  strip.show();            // Turn OFF all pixels ASAP
  strip.setBrightness(BRIGHTNESS);
}

// RumA har en fast färg!
void RumA(int RumNo, int R, int G, int B, int W) {
for(int i=0; i<Bredd; i++) {
  strip.setPixelColor(Start[RumNo]+i+First,R,G,B,W);
}
}

// RumA2 har en fast färg + en röd blinkande siren
void RumA2(int RumNo, int R, int G, int B, int W) {
for(int i=0; i<Bredd; i++) {
  strip.setPixelColor(Start[RumNo]+i+First,R,G,B,W>>2);
}
if ((Clicks & 15)<2) {
for(int i=0; i<(Bredd -4); i++) {
  strip.setPixelColor(Start[RumNo]+i+First,255,0,0,0);
}
};
}
// RumB brinner!
void RumB(int RumNo) {
  int R,G,B,W;
  int Bredd2 = Bredd/2;

for(int i=0; i<Bredd; i++) {
R=random(230)+20;
G=random(150)*R >> 9;
B=0;
W=random(100)*R >> 9;
  strip.setPixelColor(Start[RumNo]+i+First,R,G,B,W);
}
}

// RumC har ett blinkande lysrör!
void RumC(int RumNo, int Trasig) {
int flash = 0;
for(int i=0; i<Bredd; i++) {
  strip.setPixelColor(Start[RumNo]+i+First,Vitt[0], Vitt[1], Vitt[2], Vitt[3]);
}
if (random(100) < 5) {flash=1;};
for(int i=Trasig; (i<(Trasig+5)) && (i<Bredd); i++) {
  strip.setPixelColor(Start[RumNo]+i+First,200, 50, 0, 0);
  if (flash==1) {strip.setPixelColor(Start[RumNo]+i+First,Vitt[0], Vitt[1], Vitt[2], 255);}
}
}

void loop() {
  Clicks++;
  redActive=0;
  if (digitalRead(3)==LOW) {redActive=1;};
 
  RumC(0,5);
  RumA(1,Vitt[0], Vitt[1], Vitt[2], Vitt[3]);
  RumA2(2,Vitt[0], Vitt[1], Vitt[2], Vitt[3]);
  RumA2(3,Vitt[0], Vitt[1], Vitt[2], Vitt[3]);
  RumA(4,255,0,0,0);

  RumA(5,Vitt[0], Vitt[1], Vitt[2], Vitt[3]);
  RumA(6,Vitt[0], Vitt[1], Vitt[2], Vitt[3]);
  RumA(7,Vitt[0], Vitt[1], Vitt[2], Vitt[3]);
  RumA(8,Vitt[0], Vitt[1], Vitt[2], Vitt[3]);
  RumA(9,Vitt[0], Vitt[1], Vitt[2], Vitt[3]);

  RumA(10,Vitt[0], Vitt[1], Vitt[2], Vitt[3]);
  RumA2(11,Vitt[0], Vitt[1], Vitt[2], Vitt[3]);
  RumA2(12,Vitt[0], Vitt[1], Vitt[2], Vitt[3]);
  RumA(13,Vitt[0], Vitt[1], Vitt[2], Vitt[3]);
  RumC(14,1);

  RumA(15,Vitt[0], Vitt[1], Vitt[2], Vitt[3]);
  RumA(16,Vitt[0], Vitt[1], Vitt[2], Vitt[3]);
  RumA2(17,Vitt[0], Vitt[1], Vitt[2], Vitt[3]);
  RumA(18,200, 0,0,0);
  RumA(19,Vitt[0], Vitt[1], Vitt[2], Vitt[3]);

  if ((Clicks&511)==0) {R1=random(20);R2=random(20);R3=random(20);R4=random(20);R5=random(20);};
  if (((Clicks & 1023)<150)  & redActive==1) {
  for(int i=0; i<20; i++) {
   RumA(i,155,0,0,0);   
  }
   RumB(R1); //Brand
   RumB(R2); //Brand
   RumB(R3); //Brand
   RumB(R4); //Brand
   RumB(R5); //Brand
}

  // Uppdatera slingan
  strip.show();

  // Pausa lite
delay(stegtid);
}

Myko

#4
Kan posta koden till belysningen av bryggan på Star Trek-studion också. Jag minns inget av det här. :)

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
  #include <avr/power.h>
#endif

#define PIN 6
#define POTPIN A0
#define BUTTONPIN 2

#define COMPUTER_ANIMATION_SPEED 1000;

// Convert RGB values to an int
#define RGB(r, g, b) ((uint32_t)r << 16) | ((uint32_t)g <<  8) | b

// Inverse of the brightness, 1 = full brightness, 255 = least brightness
#define FLOOR_BRIGHTNESS 64
#define CEILING_BRIGHTNESS 32
#define COMPUTER_BRIGHTNESS 64

// Macros to create a color value for a specific section
#define FLOOR_COLOR(r, g, b) RGB(r/FLOOR_BRIGHTNESS, g/FLOOR_BRIGHTNESS, b/FLOOR_BRIGHTNESS)
#define CEILING_COLOR(r, g, b) RGB(r/CEILING_BRIGHTNESS, g/CEILING_BRIGHTNESS, b/CEILING_BRIGHTNESS)
#define COMPUTER_COLOR(r, g, b) RGB(r/COMPUTER_BRIGHTNESS, g/COMPUTER_BRIGHTNESS, b/COMPUTER_BRIGHTNESS)

// Color constants
#define FLOOR_RED FLOOR_COLOR(255, 0, 0)
#define CEILING_RED CEILING_COLOR(255, 0, 0)
#define FLOOR_ORANGE FLOOR_COLOR(191, 63, 0)
#define CEILING_ORANGE CEILING_COLOR(191, 63, 0)
#define FLOOR_GREEN FLOOR_COLOR(0, 255, 0)
#define CEILING_GREEN CEILING_COLOR(0, 255, 0)
#define FLOOR_BLUE FLOOR_COLOR(0, 127, 255)
#define CEILING_BLUE CEILING_COLOR(0, 127, 255)
#define COMPUTER_RED COMPUTER_COLOR(255, 0, 0)
#define COMPUTER_YELLOW COMPUTER_COLOR(255, 255, 0)
#define COMPUTER_GREEN COMPUTER_COLOR(0, 255, 0)
#define COMPUTER_BLUE COMPUTER_COLOR(31, 63, 191)
#define COMPUTER_WHITE COMPUTER_COLOR(255, 255, 255)
#define OFF 0

// Section definitions
#define SEQ(name, n) n, name ## Sequence
#define NOSEQ -1, NULL

//      Name              StripIndex,  FloorOffset,  FloorLength,  FloorColor,   FloorRedAlertColor,  CeilingOffset,  CeilingLength,  CeilingColor     CeilingRedAlertColor,  Computer animation sequences
#define COMM_SECTION      0,           0,            8,            FLOOR_GREEN,  FLOOR_RED,           24,             8,              CEILING_GREEN,   OFF,                   SEQ(comm8, 8),    SEQ(comm7, 11),   SEQ(comm6, 14),   SEQ(comm5, 16),   SEQ(comm4, 19),   SEQ(comm3, 22),   SEQ(comm2, -1),   SEQ(comm1, -1)
#define SCI_SECTION       -1,          4,            1,            FLOOR_RED,    FLOOR_RED,           3,              1,              CEILING_RED,     OFF,                   SEQ(sci7, -1),    SEQ(sci6, -1),    NOSEQ,            SEQ(sci4, -1),    SEQ(sci3, -1),    SEQ(sci2, -1),    SEQ(sci1, -1),    NOSEQ
#define NAV_SECTION       -1,          0,            1,            FLOOR_BLUE,   FLOOR_RED,           6,              1,              CEILING_BLUE,    OFF,                   SEQ(nav6, 1),     SEQ(nav5, -1),    SEQ(nav4, -1),    SEQ(nav3, -1),    SEQ(nav2, -1),    SEQ(nav1, -1),    NOSEQ,            NOSEQ
#define WEP_SECTION       -1,          0,            1,            FLOOR_ORANGE, FLOOR_RED,           6,              1,              CEILING_ORANGE,  OFF,                   SEQ(wep7, 1),     SEQ(wep6, -1),    SEQ(wep5, -1),    SEQ(wep4, -1),    SEQ(wep3, -1),    SEQ(wep2, -1),    SEQ(wep1, -1),    NOSEQ
#define DEF_SECTION       -1,          0,            1,            FLOOR_GREEN,  FLOOR_RED,           6,              1,              CEILING_GREEN,   OFF,                   SEQ(def4, 1),     SEQ(def3, -1),    SEQ(def2, -1),    SEQ(def1, -1),    NOSEQ,            NOSEQ,            NOSEQ,            NOSEQ
#define ENG_SECTION       -1,          0,            1,            FLOOR_BLUE,   FLOOR_RED,           6,              1,              CEILING_BLUE,    OFF,                   SEQ(eng1, 1),     SEQ(eng2, -1),    SEQ(eng3, -1),    SEQ(eng4, -1),    SEQ(eng5, -1),    SEQ(eng6, -1),    SEQ(eng7, -1),    SEQ(eng8, -1)
#define ENV_SECTION       -1,          0,            1,            FLOOR_RED,    FLOOR_RED,           6,              1,              CEILING_RED,     OFF,                   SEQ(env1, 1),     SEQ(env2, -1),    SEQ(env3, -1),    SEQ(env4, -1),    SEQ(env5, -1),    SEQ(env6, -1),    SEQ(env7, -1),    SEQ(env8, -1)
#define ENGSUB_SECTION    -1,          0,            1,            FLOOR_ORANGE, FLOOR_RED,           6,              1,              CEILING_ORANGE,  OFF,                   SEQ(engsub1, 1),  SEQ(engsub2, -1), SEQ(engsub3, -1), SEQ(engsub4, -1), NOSEQ,            NOSEQ,            NOSEQ,            NOSEQ
#define TURBO_SECTION     -1,          0,            0,            OFF,          OFF,                 6,              1,              CEILING_ORANGE,  OFF,                   NOSEQ,            NOSEQ,            NOSEQ,            NOSEQ,            NOSEQ,            NOSEQ,            NOSEQ,            NOSEQ

// Animation sequences

// Communications station
uint32_t comm1Sequence[] =   { 4,   COMPUTER_YELLOW, COMPUTER_GREEN,  COMPUTER_YELLOW, OFF,              COMPUTER_YELLOW, COMPUTER_RED,     OFF, OFF };
uint32_t comm2Sequence[] =   { 4,   COMPUTER_YELLOW, OFF,             COMPUTER_YELLOW, COMPUTER_RED,     OFF, COMPUTER_RED,                 OFF, COMPUTER_GREEN };
uint32_t comm3Sequence[] =   { 4,   COMPUTER_GREEN, OFF,              COMPUTER_YELLOW, COMPUTER_YELLOW,  COMPUTER_YELLOW, COMPUTER_YELLOW,  OFF, COMPUTER_YELLOW };
uint32_t comm4Sequence[] =   { 4,   OFF, COMPUTER_YELLOW,             OFF, OFF,                          OFF, COMPUTER_GREEN,               COMPUTER_GREEN, OFF };
uint32_t comm5Sequence[] =   { 4,   COMPUTER_GREEN, COMPUTER_RED,     OFF, COMPUTER_RED,                 COMPUTER_YELLOW, COMPUTER_BLUE,    OFF, COMPUTER_BLUE };
uint32_t comm6Sequence[] =   { 4,   COMPUTER_YELLOW, OFF,             COMPUTER_YELLOW, OFF,              COMPUTER_YELLOW, COMPUTER_GREEN,   COMPUTER_YELLOW, COMPUTER_GREEN };
uint32_t comm7Sequence[] =   { 4,   OFF, COMPUTER_YELLOW,             OFF, OFF,                          COMPUTER_YELLOW, COMPUTER_GREEN,   OFF, COMPUTER_GREEN };
uint32_t comm8Sequence[] =   { 4,   COMPUTER_RED, COMPUTER_YELLOW,    COMPUTER_RED, OFF,                 COMPUTER_RED, COMPUTER_GREEN,      OFF, OFF };

// Science station
uint32_t sci1Sequence[] =    { 4,   COMPUTER_BLUE, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t sci2Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t sci3Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t sci4Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t sci6Sequence[] =    { 1,   COMPUTER_WHITE, COMPUTER_WHITE };
uint32_t sci7Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };

// Navigations station
uint32_t nav1Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t nav2Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t nav3Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t nav4Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t nav5Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t nav6Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };

// Weapons station
uint32_t wep1Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t wep2Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t wep3Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t wep4Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t wep5Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t wep6Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t wep7Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };

// Defense station
uint32_t def1Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t def2Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t def3Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t def4Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };

// Engineering station
uint32_t eng1Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t eng2Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t eng3Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t eng4Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t eng5Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t eng6Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t eng7Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t eng8Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };

// Environmental station
uint32_t env1Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t env2Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t env3Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t env4Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t env5Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t env6Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t env7Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t env8Sequence[] =    { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };

// Engineering Sub station
uint32_t engsub1Sequence[] = { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t engsub2Sequence[] = { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t engsub3Sequence[] = { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };
uint32_t engsub4Sequence[] = { 4,   COMPUTER_RED, COMPUTER_YELLOW,   COMPUTER_RED, OFF,   COMPUTER_RED, COMPUTER_GREEN,   OFF, OFF };


// Parameter 1 = number of pixels in strip
// Parameter 2 = Arduino pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
//   NEO_RGBW    Pixels are wired for RGBW bitstream (NeoPixel RGBW products)

// IMPORTANT: To reduce NeoPixel burnout risk, add 1000 uF capacitor across
// pixel power leads, add 300 - 500 Ohm resistor on first pixel's data input
// and minimize distance between Arduino and first pixel.  Avoid connecting
// on a live circuit...if you must, connect GND first.

Adafruit_NeoPixel strips[] = { Adafruit_NeoPixel(32, 3, NEO_GRB + NEO_KHZ800),
                               Adafruit_NeoPixel(32, 4, NEO_GRB + NEO_KHZ800),
                               Adafruit_NeoPixel(32, 5, NEO_GRB + NEO_KHZ800),
                               Adafruit_NeoPixel(32, 6, NEO_GRB + NEO_KHZ800),
                               Adafruit_NeoPixel(32, 7, NEO_GRB + NEO_KHZ800),
                               Adafruit_NeoPixel(32, 8, NEO_GRB + NEO_KHZ800),
                               Adafruit_NeoPixel(32, 9, NEO_GRB + NEO_KHZ800),
                               Adafruit_NeoPixel(32, 10, NEO_GRB + NEO_KHZ800),
                               Adafruit_NeoPixel(32, 11, NEO_GRB + NEO_KHZ800)};
int stripCount = 10;

unsigned long lastFrame = -1;
unsigned long redAlertStarted = 0;

void setup()
{
  for (int i=0; i<stripCount; i++)
  {
    strips.begin();
    strips.show(); // Initialize all pixels to 'off'
  }

  pinMode(BUTTONPIN, INPUT);
  pinMode(POTPIN, INPUT);
}

void loop()
{
  //int brightness = analogRead(POTPIN);
  //int color = map(constrain(brightness, 10, 1023), 10, 1023, 0, 10);

  //if (redAlertStarted == 0 && digitalRead(BUTTONPIN))
  //{
  //  redAlertStarted = millis();
  //}
  //else
  //{
  //  if (millis() - redAlertStarted > 20000)
  //  {
  //    redAlertStarted = 0;
  //  }
  //}
 
  unsigned long time = millis() / COMPUTER_ANIMATION_SPEED;

  if (time != lastFrame)
  {
    lastFrame = time;
   
    lightSection(COMM_SECTION, time);
    lightSection(SCI_SECTION, time);
    lightSection(NAV_SECTION, time);
    lightSection(WEP_SECTION, time);
    lightSection(DEF_SECTION, time);
    lightSection(ENG_SECTION, time);
    lightSection(ENV_SECTION, time);
    lightSection(ENGSUB_SECTION, time);
    lightSection(TURBO_SECTION, time);

    // TODO: Red alert indicators
 
    for (int i=0; i<stripCount; i++)
    {
      strips.show();
    }
  }
}

void lightSection(int stripIndex,
                  int floorOffset, int floorLength, uint32_t floorColor, uint32_t floorRedAlertColor,
                  int ceilingOffset, int ceilingLength, uint32_t ceilingColor, uint32_t ceilingRedAlertColor,
                  int computer1Offset, uint32_t* computer1Sequence,
                  int computer2Offset, uint32_t* computer2Sequence,
                  int computer3Offset, uint32_t* computer3Sequence,
                  int computer4Offset, uint32_t* computer4Sequence,
                  int computer5Offset, uint32_t* computer5Sequence,
                  int computer6Offset, uint32_t* computer6Sequence,
                  int computer7Offset, uint32_t* computer7Sequence,
                  int computer8Offset, uint32_t* computer8Sequence,
                  unsigned long time)
{
  if (stripIndex >= 0)
  {
    if (floorOffset >= 0)
    {
      for (int i=0;i<floorLength;i++)
        strips[stripIndex].setPixelColor(floorOffset + i, (redAlertStarted > 0) ? floorRedAlertColor : floorColor);
    }
    if (ceilingOffset >= 0)
    {
      for (int i=0;i<ceilingLength;i++)
        strips[stripIndex].setPixelColor(floorOffset + ceilingOffset + i, (redAlertStarted > 0) ? ceilingRedAlertColor : ceilingColor);
    }

    if (computer1Offset >= 0)
      computerScreen(strips[stripIndex], floorOffset + computer1Offset, time, computer1Sequence);
    if (computer2Offset >= 0)
      computerScreen(strips[stripIndex], floorOffset + computer2Offset, time, computer2Sequence);
    if (computer3Offset >= 0)
      computerScreen(strips[stripIndex], floorOffset + computer3Offset, time, computer3Sequence);
    if (computer4Offset >= 0)
      computerScreen(strips[stripIndex], floorOffset + computer4Offset, time, computer4Sequence);
    if (computer5Offset >= 0)
      computerScreen(strips[stripIndex], floorOffset + computer5Offset, time, computer5Sequence);
    if (computer6Offset >= 0)
      computerScreen(strips[stripIndex], floorOffset + computer6Offset, time, computer6Sequence);
    if (computer7Offset >= 0)
      computerScreen(strips[stripIndex], floorOffset + computer7Offset, time, computer7Sequence);
    if (computer8Offset >= 0)
      computerScreen(strips[stripIndex], floorOffset + computer8Offset, time, computer8Sequence);
  }
}

// Draw a computer screen by looking up the current time in the sequence
// Index 0 of the sequence is the number of frames
// Left and right side of the screen are interleaved after that
void computerScreen(Adafruit_NeoPixel& computerStrip, int pixelOffset, unsigned long time, uint32_t* sequence)
{
  int timeIndex = (time % sequence[0]) * 2 + 1;

  computerStrip.setPixelColor(pixelOffset, sequence[timeIndex]);
  computerStrip.setPixelColor(pixelOffset + 1, sequence[timeIndex + 1]);
}


Selander

Ni är inte riktigt kloka nån av er  :o ::)

Record

Rena grekiskan ;)

Friskt satsat, hälften vunnet..

andreaseldh


Skafte


andreaseldh

Citat från: Skafte skrivet 16 april 2022 kl. 23:54
Du menar Καθαρά ελληνικά?

Ja, precis! Kathara ellinika.

mullemannen

Hej på er!

Det är ju trevligt att ni skriver i tråden men vore tacksam om det är konstruktivt
som ni skriver som handlar om kodning.

Denna tråd är skapad för att vi som har intresse av att programmera kan dela info

Tack för er förståelse!

Mvh

Mullemannen
Mvh

Mullemannen

Godtfred

Din kod är kanske lite väl statisk och svår att justera. Försök använd fler variabler eller konstanter och dela in i hanterbara funktioner för att få mer flexibilitet.

Men är osäker på vilka mönster du försöker åstadkomma.

mullemannen

Citat från: Godtfred skrivet 01 maj 2022 kl. 20:52
Din kod är kanske lite väl statisk och svår att justera. Försök använd fler variabler eller konstanter och dela in i hanterbara funktioner för att få mer flexibilitet.

Men är osäker på vilka mönster du försöker åstadkomma.

Detta var ett första test att se om jag kan få de att tändas upp i ett mönster, inget färdigt program, jag ska fortsätta och jobba på det som du säger
att få lite mer dynamik.

ska kika lite mer på hur du och myko har lagt upp koden och vad den gör.
Mvh

Mullemannen

LEGO® is a trademark of the LEGO Group of companies which does not sponsor, authorize or endorse this site.