Added C-implementation for NeoPixel.

Changed a few colors/animation settings for demo purposes.

Signed-off-by: Dirk Jahnke <dirk@familie-jahnke.de>
This commit is contained in:
Dirk Jahnke 2017-12-05 12:40:37 +01:00
parent 2479cc62fd
commit b79d6dfd48
4 changed files with 103 additions and 20 deletions

View File

@ -1,16 +1,16 @@
[
{"led": 0, "mode": "on", "ticks": 10},
{"led": 0, "mode": "off", "ticks": 10},
{"led": 1, "mode": "on", "ticks": 20},
{"led": 1, "mode": "off", "ticks": 20},
{"led": 2, "mode": "on", "ticks": 40},
{"led": 2, "mode": "off", "ticks": 40},
{"led": 3, "mode": "on", "ticks": 80},
{"led": 3, "mode": "off", "ticks": 80},
{"led": 4, "mode": "on", "ticks": 160},
{"led": 4, "mode": "off", "ticks": 160},
{"led": 5, "mode": "on", "ticks": 320},
{"led": 5, "mode": "off", "ticks": 320},
{"led": 6, "mode": "on", "ticks": 640},
{"led": 6, "mode": "off", "ticks": 640}
{"led": 0, "mode": "on", "ticks": 2},
{"led": 0, "mode": "off", "ticks": 2},
{"led": 1, "mode": "on", "ticks": 4},
{"led": 1, "mode": "off", "ticks": 4},
{"led": 2, "mode": "on", "ticks": 8},
{"led": 2, "mode": "off", "ticks": 8},
{"led": 3, "mode": "on", "ticks": 16},
{"led": 3, "mode": "off", "ticks": 16},
{"led": 4, "mode": "on", "ticks": 32},
{"led": 4, "mode": "off", "ticks": 32},
{"led": 5, "mode": "on", "ticks": 64},
{"led": 5, "mode": "off", "ticks": 64},
{"led": 6, "mode": "on", "ticks": 128},
{"led": 6, "mode": "off", "ticks": 128}
]

View File

@ -1,10 +1,12 @@
[
{"name": "off", "red": 0, "green": 0, "blue": 0},
{"name": "candle", "red": 50, "green": 40, "blue": 10},
{"name": "candle", "red": 30, "green": 15, "blue": 4},
{"name": "red", "red": 50, "green": 5, "blue": 5},
{"name": "green", "red": 5, "green": 50, "blue": 5},
{"name": "blue", "red": 5, "green": 5, "blue": 50},
{"name": "warmWhite", "red": 80, "green": 80, "blue": 40},
{"name": "blue", "red": 5, "green": 5, "blue": 80},
{"name": "yellow", "red": 50, "green": 50, "blue": 5},
{"name": "violet", "red": 50, "green": 5, "blue": 80},
{"name": "warmWhite", "red": 90, "green": 90, "blue": 30},
{"name": "coldWhite", "red": 80, "green": 80, "blue": 100},
{"name": "brightWhite", "red": 255, "green": 255, "blue": 255}
]
]

View File

@ -4,6 +4,6 @@
{"level": "EG", "room": "Bad", "id": "eg-bad", "onColor": "red"},
{"level": "EG", "room": "Kueche", "id": "eg-kueche", "onColor": "green"},
{"level": "EG", "room": "Flur", "id": "eg-flur", "onColor": "blue"},
{"level": "OG", "room": "Wohnzimmer", "id": "og-wozi", "onColor": "candle"},
{"level": "OG", "room": "Buero", "id": "og-office", "onColor": "coldWhite"}
{"level": "OG", "room": "Wohnzimmer", "id": "og-wozi", "onColor": "yellow"},
{"level": "OG", "room": "Buero", "id": "og-office", "onColor": "violet"}
]

81
src/NeoPixel.c Normal file
View File

@ -0,0 +1,81 @@
#include "mgos_bitbang.h"
#include "mgos_gpio.h"
#include "mgos_system.h"
enum NeoPixel_ColorOrder {
RGB = 0,
GRB = 1,
BGR = 2,
};
#define MAX_LEDS 100
static uint8_t NeoPixel_pin = 0;
static uint8_t NeoPixel_numPixels = 0;
static uint8_t NeoPixel_leds[3 * MAX_LEDS];
static NeoPixel_ColorOrder NeoPixel_colorOrder = RGB;
// ## **`NeoPixel_create(pin, numPixels, order)`**
// Create and return a NeoPixel strip object. Example:
// ```javascript
// let pin = 5, numPixels = 16, colorOrder = NeoPixel.GRB;
// let strip = NeoPixel.create(pin, numPixels, colorOrder);
// strip.setPixel(0 /* pixel */, 12, 34, 56);
// strip.show();
//
// strip.clear();
// strip.setPixel(1 /* pixel */, 12, 34, 56);
// strip.show();
// ```
void NeoPixel_create(uint8_t, pin, uint8_t numPixels, enum NeoPixel_ColorOrder order) {
mgos_gpio_init();
NeoPixel_pin = pin;
NeoPixel_numPixels = numPixels;
NeoPixel_colorOrder = order;
// GPIO.set_mode(pin, GPIO.MODE_OUTPUT);
mgos_gpio_set_mode(pin, MGOS_GPIO_MODE_OUTPUT);
// GPIO.write(pin, 0); // Keep in reset.
mgos_gpio_write(pin, false);
NeoPixel_clear();
}
// ## **`NeoPixel_clear()`**
// Clear in-memory values of the pixels.
void NeoPixel_clear() {
for (int i=0; i<NeoPixel_numPixels * 3; ++i) {
NeoPixel_leds[i] = 0;
}
}
// ## **`NeoPixel_set(i, r, g, b)`**
// Set i-th's pixel's RGB value.
// Note that this only affects in-memory value of the pixel.
void NeoPixel_set(uint8_t pixel, uint8_t red, uint8_t green, uint8_t blue) {
uint8_t v0, v1, v2;
if (NeoPixel_colorOrder == RGB) {
v0 = red; v1 = green; v2 = blue;
} else if (NeoPixel_colorOrder == GRB) {
v0 = green; v1 = red; v2 = blue;
} else if (NeoPixel_colorOrder == BGR) {
v0 = blue; v1 = green; v2 = red;
} else return;
NeoPixel_leds[pixel] = v0;
NeoPixel_leds[pixel+1] = v1;
NeoPixel_leds[pixel+2] = v2;
}
// ## **`NeoPixel_show()`**
// Output values of the pixels.
void NeoPixel_show() {
// GPIO.write(this.pin, 0);
mgos_gpio_write(pin, false);
// Sys.usleep(60);
mgos_usleep(60);
// BitBang.write(this.pin, BitBang.DELAY_100NSEC, 3, 8, 8, 6, this.data, this.len);
mgos_bitbang_write_bits(NeoPixel_pin, DELAY_100NSEC, 3, 8, 8, 6, NeoPixel_leds, NeoPixel_numPixels);
// GPIO.write(this.pin, 0);
mgos_gpio_write(pin, false);
// Sys.usleep(60);
mgos_usleep(60);
// GPIO.write(this.pin, 1);
mgos_gpio_write(pin, true);
}