Hi!
I am working on a little class, that controls an LED via the Adafruit_NeoPixel library, because I want to have several, independant objects of LEDs.
The compiler accepts everything, but the code seems to stop running instantly. Even the first called function in setup isn't running.
May you please give me a hint, why this takes place? I already had a look at several other classes, such as GitHub - arduino-libraries/Arduino_OAuth: OAuth 1.0 client library for Arduino where it seems to be working like this in its examples.
I can post more details if necessary, but my hope is that the problem can already be seen by the code snippets below.
Best regards!
main.ino:
#include "LED_fire.h"
Adafruit_NeoPixel stripLantern(1, LED_PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel stripFires(2, LED_PIN2, NEO_GRB + NEO_KHZ800);
LED_fire LanternFire(stripLantern, 0, 100);
LED_fire LanternFire(stripFires, 0, 100);
LED_fire LanternFire(stripFires, 0, 100);
void setup() {
[...]
pinMode(LED_BUILTIN, OUTPUT);
[...]
}
void loop() {
[..]
}
LED_fire.h:
#ifndef __LED_FIRE_H__
#define __LED_FIRE_H__
#include "Arduino.h"
#include <Adafruit_NeoPixel.h>
class LED_fire {
public:
LED_fire(Adafruit_NeoPixel &pixels, unsigned _led_num = 0, unsigned _brightness = 100);
// Zyklisch aufrufen um Feuereffekt darzustellen.
void fire(int _cooling, int _sparking, int _speedDelay);
// Schaltet LED ab.
void off(void);
private:
unsigned led_num = 0, brightness = 100;
Adafruit_NeoPixel pixels;
//
void setPixel(int Pixel, byte red, byte green, byte blue);
//
void setPixelHeatColor (int Pixel, byte temperature);
};
#endif // __LED_FIRE_H__
LED_fire.cpp:
#include "LED_fire.h"
LED_fire::LED_fire(Adafruit_NeoPixel &_pixels, unsigned _led_num, unsigned _brightness)
{
pixels = _pixels;
led_num = _led_num;
brightness = _brightness;
pixels.begin();
pixels.setPixelColor(_led_num, 10, 10, 10);
pixels.show(); // Initialize all pixels to 'off'
pixels.setBrightness(_brightness);
}
void LED_fire::fire(int _cooling, int _sparking, int _speedDelay) {
static byte heat;
int cooldown;
static unsigned long previousMillis; // Variablen zur Umgehung der delay Funktion
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= (unsigned long)_speedDelay) {
// (1) Abkuehlen der Flamme
cooldown = random(0, _cooling);
if(cooldown>heat)
heat=0;
else
heat=heat-cooldown;
}
// (2) Zufaelliges neu Anfachen der Flamme
if( (heat < 200) && (random(0,255) < _sparking) )
heat = random(200,255);
// (3) Umrechnung von Hitze zu Farbdarstellung
setPixelHeatColor(led_num, heat);
int flameBright = constrain(heat-100,0,255);
pixels.setBrightness(map(flameBright, 0, 255, 0, 80));
pixels.show();
previousMillis = currentMillis;
}
void LED_fire::off(void) {
setPixel(led_num, 0, 0, 0);
pixels.show();
}
void LED_fire::setPixelHeatColor (int pixel, byte temperature) {
byte red, green, blue;
if (temperature > 0x7f) {
red = 255;
green = map(temperature, 0x7f, 255, 0, 255);
blue = 0;
}
else {
red = map(temperature, 0, 0x7f, 0, 255);
green = 0;
blue = 0;
}
setPixel(pixel, red, green, blue);
}
void LED_fire::setPixel(int Pixel, byte red, byte green, byte blue) {
pixels.setPixelColor(Pixel, pixels.Color(red, green, blue));
}