Witam, buduje lampe rowerową sterowana arduino jednak mam jeden problem używam biblioteki ClickButton. Włączanie przedniej lampki działa jak należy, tylna lampka korzysta z biblioteki neo pixel i uruchamia się od razu po włączeniu arduino. Chciałbym aby lampa tylna była uruchamiana poprzez przytrzymanie przycisku. Nie jestem programista i dopiero zaczynam zabawę z arduino wiec prosze o wyrozumiałość . pozdrawiam
Kod:
#include "ClickButton.h"
#include <Adafruit_NeoPixel.h>
#define PIN 6
#define NUM_LEDS 14
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
// the LED
const int ledPin = 12;
const int ledPin1 = 11;
int ledState = 0;
int ledState1 = 0;
// the Button
const int buttonPin1 = 10;
ClickButton button1(buttonPin1, LOW, CLICKBTN_PULLUP);
// Arbitrary LED function
int LEDfunction = 0;
void setup()
{
pinMode(ledPin,OUTPUT);
pinMode(ledPin1,OUTPUT);
// Setup button timers (all in milliseconds / ms)
// (These are default if not set, but changeable for convenience)
button1.debounceTime = 20; // Debounce timer in ms
button1.multiclickTime = 250; // Time limit for multi clicks
button1.longClickTime = 1000; // time until "held-down clicks" register
//lampa tył
strip.begin();
strip.show(); // Initialize all pixels to 'off'
}
void loop() {
// Update button state
button1.Update();
// Save click codes in LEDfunction, as click codes are reset at next Update()
if (button1.clicks != 0) LEDfunction = button1.clicks;
// Simply toggle LED on single clicks
// (Cant use LEDfunction like the others here,
// as it would toggle on and off all the time)
if(button1.clicks == 1) ledState = !ledState;
if(button1.clicks == 1) ledState1 = !ledState1;
// blink faster if double clicked
if(LEDfunction == 2) ledState = (millis()/500)%2;
if(LEDfunction == 2) ledState = (millis()/70)%2;
if(LEDfunction == 2) ledState1 = (millis()/80)%2;
if(LEDfunction == 2) ledState1 = (millis()/1000)%2;
if(LEDfunction == 2) ledState1 = (millis()/100)%2;
// blink even faster if triple clicked
if(LEDfunction == 3) ledState = (millis()/200)%2;
Fire(55,50,40);
}
void Fire(int Cooling, int Sparking, int SpeedDelay) {
static byte heat[NUM_LEDS];
int cooldown;
// Step 1. Cool down every cell a little
for( int i = 0; i < NUM_LEDS; i++) {
cooldown = random(0, ((Cooling * 10) / NUM_LEDS) + 2);
if(cooldown>heat[i]) {
heat[i]=0;
} else {
heat[i]=heat[i]-cooldown;
}
}
// Step 2. Heat from each cell drifts 'up' and diffuses a little
for( int k= NUM_LEDS - 1; k >= 2; k--) {
heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3;
}
// Step 3. Randomly ignite new 'sparks' near the bottom
if( random(255) < Sparking ) {
int y = random(7);
heat[y] = heat[y] + random(160,255);
//heat[y] = random(160,255);
}
// Step 4. Convert heat to LED colors
for( int j = 0; j < NUM_LEDS; j++) {
setPixelHeatColor(j, heat[j] );
}
showStrip();
delay(SpeedDelay);
}
void setPixelHeatColor (int Pixel, byte temperature) {
// Scale 'heat' down from 0-255 to 0-191
byte t192 = round((temperature/255.0)*191);
// calculate ramp up from
byte heatramp = t192 & 0x3F; // 0..63
heatramp <<= 2; // scale up to 0..252
// figure out which third of the spectrum we're in:
if( t192 > 0x80) { // hottest
setPixel(Pixel, 255, 255, heatramp);
} else if( t192 > 0x40 ) { // middle
setPixel(Pixel, 255, heatramp, 0);
} else { // coolest
setPixel(Pixel, heatramp, 0, 0);
}
// slow blink (must hold down button. 1 second long blinks)
if(LEDfunction == -1) ledState = (millis()/1000)%2;
// slower blink (must hold down button. 2 second loong blinks)
if(LEDfunction == -2) ledState = (millis()/2000)%2;
// even slower blink (must hold down button. 3 second looong blinks)
if(LEDfunction == -3) ledState = (millis()/3000)%2;
// update the LED
digitalWrite(ledPin,ledState);
digitalWrite(ledPin1,ledState1);
}
void showStrip() {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
strip.show();
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
FastLED.show();
#endif
}
void setPixel(int Pixel, byte red, byte green, byte blue) {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
strip.setPixelColor(Pixel, strip.Color(red, green, blue));
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
leds[Pixel].r = red;
leds[Pixel].g = green;
leds[Pixel].b = blue;
#endif
}
void setAll(byte red, byte green, byte blue) {
for(int i = 0; i < NUM_LEDS; i++ ) {
setPixel(i, red, green, blue);
}
showStrip();
}