Under den här lektion gör vi Blink med NeoPixels!
FLORAbrella, ett paraply med NeoPixels
\pagebreak
Anslut en Arduino till NeoPixels så här:
Stift NeoPixels | Stift Arduino |
---|---|
GND | GND |
5V | 5V |
DIN | 6 |
\pagebreak
Detta är koden för ‘Blink’:
#include <Adafruit_NeoPixel.h>
const int stift_neopixels = 6;
const int antal_pixels = 60;
Adafruit_NeoPixel pixlar = Adafruit_NeoPixel(
antal_pixels,
stift_neopixels,
NEO_GRB + NEO_KHZ800
);
void setup()
{
pixels.begin();
}
void loop()
{
pixels.setPixelColor(0, pixels.Color(64, 0, 0));
pixels.show();
delay(1000);
pixels.setPixelColor(0, pixels.Color(0, 0, 0));
pixels.show();
delay(1000);
}
| Har du glömt här ljusfärger smälta sammans? Se figuret nedåt :————-:|:—————————————-:
Färgcirkel. Här kan du ser att gul är en blandning av röd och grön.
Färg | Röd | Grön | Blå |
---|---|---|---|
Röd | 255 | 0 | 0 |
Gul | 255 | 255 | 0 |
Blå | 0 | 0 | 255 |
pixels.show() |
‘Bästa dator, låt lysdioderna visa sina färger.’ |
Skriv in koden i Arduino IDE och klicka på “Ladda upp”.
\pagebreak
Blinkar nu
Gå nu
\pagebreak
#include <Adafruit_NeoPixel.h>
const int stift_neopixels = 6;
const int antal_pixels = 60;
Adafruit_NeoPixel pixlar = Adafruit_NeoPixel(
antal_pixels,
stift_neopixels,
NEO_GRB + NEO_KHZ800
);
void setup()
{
pixels.begin();
}
void loop()
{
pixels.setPixelColor(0, pixels.Color(64, 0, 0));
pixels.show();
delay(1000);
pixels.setPixelColor(0, pixels.Color(0, 0, 0));
pixels.setPixelColor(1, pixels.Color(0, 64, 0));
pixels.show();
delay(1000);
pixels.setPixelColor(1, pixels.Color(0, 0, 0));
}
\pagebreak
Gå nu
\pagebreak
#include <Adafruit_NeoPixel.h>
const int stift_neopixels = 6;
const int antal_pixels = 60;
Adafruit_NeoPixel pixlar = Adafruit_NeoPixel(
antal_pixels,
stift_neopixels,
NEO_GRB + NEO_KHZ800
);
void setup()
{
pixels.begin();
}
void loop()
{
pixels.setPixelColor(0, pixels.Color(64, 0, 0));
pixels.show();
delay(1000);
pixels.setPixelColor(0, pixels.Color(0, 0, 0));
pixels.setPixelColor(1, pixels.Color(0, 64, 0));
pixels.show();
delay(1000);
pixels.setPixelColor(1, pixels.Color(0, 0, 0));
pixels.setPixelColor(2, pixels.Color(0, 0, 64));
pixels.show();
delay(1000);
pixels.setPixelColor(2, pixels.Color(0, 0, 0));
}
\pagebreak
Använd nu koden nedan, men gör lysdioderna blåa:
#include <Adafruit_NeoPixel.h>
const int stift_neopixels = 6;
const int antal_pixels = 60;
Adafruit_NeoPixel pixlar = Adafruit_NeoPixel(
antal_pixels,
stift_neopixels,
NEO_GRB + NEO_KHZ800
);
void setup()
{
pixels.begin();
}
int vilken_led = 0;
void loop()
{
pixels.setPixelColor(which_led, pixels.Color(64, 0, 0));
pixels.show();
delay(100);
vilken_led = vilken_led + 1;
}
\pagebreak
#include <Adafruit_NeoPixel.h>
const int stift_neopixels = 6;
const int antal_pixels = 60;
Adafruit_NeoPixel pixlar = Adafruit_NeoPixel(
antal_pixels,
stift_neopixels,
NEO_GRB + NEO_KHZ800
);
void setup()
{
pixels.begin();
}
int vilken_led = 0;
void loop()
{
pixels.setPixelColor(which_led, pixels.Color(0, 0, 64));
pixels.show();
delay(100);
vilken_led = vilken_led + 1;
}
\pagebreak
Använd nu inte ett blaa_vaerde på 64
, utan av which_ledje
. Vad ser du?
\pagebreak
#include <Adafruit_NeoPixel.h>
const int stift_neopixels = 6;
const int antal_pixels = 60;
Adafruit_NeoPixel pixlar = Adafruit_NeoPixel(
antal_pixels,
stift_neopixels,
NEO_GRB + NEO_KHZ800
);
void setup()
{
pixels.begin();
}
int vilken_led = 0;
void loop()
{
pixels.setPixelColor(which_led, pixels.Color(0, 0, which_led));
pixels.show();
delay(100);
vilken_led = vilken_led + 1;
}
\pagebreak
Använd nu inte ett roed_vaerde på 0
, utan av 64 - which_ledje
. Vad ser du?
\pagebreak
#include <Adafruit_NeoPixel.h>
const int stift_neopixels = 6;
const int antal_pixels = 60;
Adafruit_NeoPixel pixlar = Adafruit_NeoPixel(
antal_pixels,
stift_neopixels,
NEO_GRB + NEO_KHZ800
);
void setup()
{
pixels.begin();
}
int vilken_led = 0;
void loop()
{
pixels.setPixelColor(which_led, pixels.Color(64 - which_led, 0, which_led));
pixels.show();
delay(100);
vilken_led = vilken_led + 1;
}
\pagebreak
Istället för att alltid göra ‘which_ledje’ högre, vi kan också göra det med en ny variabel: ‘roed_vaerde’. Skapa en ny variabel, av typen “int”, med namnet “redvalue” och initialvärdet noll. Använd ‘roed_vaerde’ där du bestämmer det röda värdet på en lysdiod. Låt ‘roed_vaerde’ öka med 1 varje gång.
\pagebreak
#include <Adafruit_NeoPixel.h>
const int stift_neopixels = 6;
const int antal_pixels = 60;
Adafruit_NeoPixel pixlar = Adafruit_NeoPixel(
antal_pixels,
stift_neopixels,
NEO_GRB + NEO_KHZ800
);
void setup()
{
pixels.begin();
}
int vilken_led = 0;
int roed_vaerde = 0;
void loop()
{
pixels.setPixelColor(vilken_led, pixlar.Färg(roed_vaerde, 0, vilken_led));
pixels.show();
delay(100);
vilken_led = vilken_led + 1;
roed_vaerde = roed_vaerde + 1;
}
\pagebreak
Istället för att alltid göra ‘which_ledje’ högre, vi kan också göra det med en ny variabel: ‘blaa_vaerde’. Skapa en ny variabel, av typen “int”, med namnet “bluevalue” och initialvärdet “32”. Använd ‘blaa_vaerde’ där du bestämmer det röda värdet på en lysdiod. Låt ‘blaa_vaerde’ öka med 1 varje gång.
\pagebreak
#include <Adafruit_NeoPixel.h>
const int stift_neopixels = 6;
const int antal_pixels = 60;
Adafruit_NeoPixel pixlar = Adafruit_NeoPixel(
antal_pixels,
stift_neopixels,
NEO_GRB + NEO_KHZ800
);
void setup()
{
pixels.begin();
}
int vilken_led = 0;
int roed_vaerde = 0;
int blaa_vaerde = 0;
void loop()
{
pixels.setPixelColor(which_led, pixels.Color(redvalue, 0, bluevalue));
pixels.show();
delay(100);
vilken_led = vilken_led + 1;
roed_vaerde = roed_vaerde + 1;
blaa_vaerde = blaa_vaerde + 1;
}
\pagebreak
Istället för att göra det “röda värdet” högre och högre, vi kan alltid göra dessa två högre. Men vi vill inte att det “röda värdet” ska överstiga “64”. Använd en “if”-sats: om “roed_vaerde” är större än “64”, det “röda värdet” blir då noll.
\pagebreak
#include <Adafruit_NeoPixel.h>
const int stift_neopixels = 6;
const int antal_pixels = 60;
Adafruit_NeoPixel pixlar = Adafruit_NeoPixel(
antal_pixels,
stift_neopixels,
NEO_GRB + NEO_KHZ800
);
void setup()
{
pixels.begin();
}
int vilken_led = 0;
int roed_vaerde = 0;
int blaa_vaerde = 0;
void loop()
{
pixels.setPixelColor(which_led, pixels.Color(redvalue, 0, bluevalue));
pixels.show();
delay(100);
vilken_led = vilken_led + 1;
roed_vaerde = roed_vaerde + 2;
blaa_vaerde = blaa_vaerde + 1;
if (roed_vaerde > 64)
{
roed_vaerde = 0;
}
}
\pagebreak
Istället för att göra “blaa_vaerde” högre och högre, vi kan alltid göra dessa tre högre. Men vi vill inte att ‘blaa_vaerde’ överstiger ‘64’. Använd en “if”-sats: om “blaa_vaerde” är större än “64”, att ‘blaa_vaerde’ då blir noll.
\pagebreak
#include <Adafruit_NeoPixel.h>
const int stift_neopixels = 6;
const int antal_pixels = 60;
Adafruit_NeoPixel pixlar = Adafruit_NeoPixel(
antal_pixels,
stift_neopixels,
NEO_GRB + NEO_KHZ800
);
void setup()
{
pixels.begin();
}
int vilken_led = 0;
int roed_vaerde = 0;
int blaa_vaerde = 0;
void loop()
{
pixels.setPixelColor(which_led, pixels.Color(redvalue, 0, bluevalue));
pixels.show();
delay(100);
vilken_led = vilken_led + 1;
roed_vaerde = roed_vaerde + 2;
blaa_vaerde = blaa_vaerde + 3;
if (roed_vaerde > 64)
{
roed_vaerde = 0;
}
if (blaa_vaerde > 64)
{
blaa_vaerde = 0;
}
}
\pagebreak
which_ledje
blir nu högre och högre.
Lägg nu till ett if
-sats: om which_led
är större eller lika än number_neopixels
,
att vilken_ledje
då blir noll.
\pagebreak
#include <Adafruit_NeoPixel.h>
const int stift_neopixels = 6;
const int antal_pixels = 60;
Adafruit_NeoPixel pixlar = Adafruit_NeoPixel(
antal_pixels,
stift_neopixels,
NEO_GRB + NEO_KHZ800
);
void setup()
{
pixels.begin();
}
int vilken_led = 0;
int roed_vaerde = 0;
int blaa_vaerde = 0;
void loop()
{
pixels.setPixelColor(which_led, pixels.Color(redvalue, 0, bluevalue));
pixels.show();
delay(100);
vilken_led = vilken_led + 1;
roed_vaerde = roed_vaerde + 2;
blaa_vaerde = blaa_vaerde + 3;
if (roed_vaerde > 64)
{
roed_vaerde = 0;
}
if (blaa_vaerde > 64)
{
blaa_vaerde = 0;
}
if (vilket_led >= antal_pixels)
{
vilken_led = 0;
}
}
\pagebreak
Skapa en ny variabel “grönt värde”, som bestämmer det gröna värdet för lysdioderna. Den här får hela tiden fyra till. Om ‘grönt värde’ är över 64, ställ in det på noll.