resources:arduino

Arduino programmeren

Deze pagina geeft beschrijvingen van opstellingen die draaien via het Arduino platform.

De LED cube bestaat uit een 3x3x3 array van LEDs en kan worden aangestuurd met een Arduino Uno of Nano.

Met de 8×8 LED matrix kan je kleine plaatjes of patronen creeren. Het programmeren doe je via de FastLED library. Je kan ook de voorbeelden van de FastLED library gebruiken. Zorg dan wel dat de volgende dingen kloppen:

  • data-pin:9
  • chipset: WS28112b
  • COLOR_ORDER volgorde naar GRB.

Dit voorbeeld laat het hele scherm een elke halve seconde van kleur veranderen.

uno_matrix_blink.ino
#include <FastLED.h>
 
#define LED_PIN 9
 
#define COLOR_ORDER GRB
#define CHIPSET     WS2812
 
#define NUM_LEDS    64
#define BRIGHTNESS  64
 
CRGB leds[NUM_LEDS];
 
CRGB colors[] = {CRGB::White, CRGB::White, CRGB::Red ,CRGB::Green ,CRGB::Blue};
 
void setup() {
  FastLED.addLeds<CHIPSET, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalSMD5050);
  FastLED.setBrightness( BRIGHTNESS );
}
 
void loop() {
  int i=0;
  int j=0;
 
  for (j=0;j<=4;j++)
  {
 
    for (i=0;i<=NUM_LEDS;i++) {
      leds[i]= colors[j];
      }
    FastLED.show();
    delay(500);
    }
}

In dit voorbeeld licht er maar 1 LED op. Deze gaat rond langs de buitenkant van het bordje. Bij elke volgende positie veranderd de kleur van de LED.

uno_matrix_round_and_round.ino
#include <FastLED.h>
 
#define LED_PIN 9
 
#define COLOR_ORDER GRB
#define CHIPSET     WS2812
 
#define NUM_LEDS    64
#define BRIGHTNESS  64
#define NUM_ROWS    8
#define NUM_COLS    8
 
CRGB leds[NUM_LEDS];
int color_idx = 0;
 
void setup() {
  int index = 0;
  Serial.begin(115200);
  FastLED.addLeds<CHIPSET, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalSMD5050);
  FastLED.setBrightness( BRIGHTNESS );
 
  // Zet alles uit.
  fill_solid(leds, NUM_LEDS, CRGB(0,0,25));
  FastLED.show();
  delay(200);
  fill_solid(leds, NUM_LEDS, CRGB::Black);
  FastLED.show();
  delay(400);
}
 
void LED_uit(int x, int y)
{
  int index = x;
  index += y*8;
  leds[index] = CRGB::Black ; 
  FastLED.show();
}
 
void LED_aan(int x, int y,  CRGB& color)
{
  int index = x;
  index += y*8;
  leds[index] = color ; 
  FastLED.show();
}
 
int color_idx_inc(int color_idx)
{
 color_idx = color_idx + 4; 
  if (color_idx >= 255) 
    return 0;
  else 
    return color_idx;
}
 
int direction_find(int x, int y) {
int direction = 90; 
 if ((x == 0) && (y > 0))
  direction = 0;
 if ((x == NUM_COLS -1) && (y < NUM_COLS-1))
  direction = 180; 
 if ((x < NUM_COLS-1)&& (y == 0))
  direction = 90; 
 if ((x > 0) && (y == NUM_ROWS -1))
  direction = 270 ; 
  return direction;
}
 
int next_x(int x, int direction){
 if (direction == 90 )
  return ++x;
 else if (direction == 270)
  return --x;
 else 
  return x;
}
 
int next_y(int y, int direction){
 if (direction == 180 )
  return ++y;
 else if (direction == 0)
  return --y;
 else 
  return y;
}
 
void loop() {
  char error_string[256]; 
  static int x = 0;
  static int y = 0;
  struct CRGB color = CHSV(0,255,255) ;
  static int color_idx =0 ; 
  int direction = 90; 
 
  direction = direction_find(x,y);
  x = next_x(x, direction );
  y = next_y(y, direction );
 
  sprintf(error_string, "x: %i, y: %i direction: %03i, color_idx: %03i", x, y, direction, color_idx);
  Serial.println(error_string);
  color_idx = color_idx_inc(color_idx);
  color = CHSV(color_idx,255,255);
  LED_aan(x, y, color);
  FastLED.show();
  delay(100); 
  LED_uit(x, y);
}
  • resources/arduino.txt
  • Last modified: 09/01/2022 20:16
  • by ron