Hi sorry for my English I am not a native speaker
I have a problem
I don't understand how to do the simplest thing with it.
I want to know is how to code the NeoPixel after a button has been pushed or sensor
I want to avoid using the delay function
it should work after pressing the button for 5 seconds but run no more than once every 60 seconds
#include <Adafruit_NeoPixel.h>
int sensor = 2; // PiR sensor
// Pattern types supported:
enum pattern { SCANNER, };
// Patern directions supported:
enum direction { FORWARD, REVERSE };
// NeoPattern Class - derived from the Adafruit_NeoPixel class
class NeoPatterns : public Adafruit_NeoPixel
{
public:
// Member Variables:
pattern ActivePattern; // which pattern is running
direction Direction; // direction to run the pattern
unsigned long Interval; // milliseconds between updates
unsigned long lastUpdate; // last update of position
uint32_t Color1; // What colors are in use
uint16_t TotalSteps; // total number of steps in the pattern
uint16_t Index; // current step within the pattern
void (*OnComplete)(); // Callback on completion of pattern
// Constructor - calls base-class constructor to initialize strip
NeoPatterns(uint16_t pixels, uint8_t pin, uint8_t type, void (*callback)())
:Adafruit_NeoPixel(pixels, pin, type)
{
OnComplete = callback;
}
// Update the pattern
void Update()
{
if((millis() - lastUpdate) > Interval) // time to update
{
lastUpdate = millis();
switch(ActivePattern)
{
case SCANNER:
ScannerUpdate();
break;
}
}
}
// Increment the Index and reset at the end
void Increment()
{
if (Direction == FORWARD)
{
Index++;
if (Index >= TotalSteps)
{
Index = 0;
if (OnComplete != NULL)
{
OnComplete(); // call the comlpetion callback
}
}
}
else // Direction == REVERSE
{
--Index;
if (Index <= 0)
{
Index = TotalSteps-1;
if (OnComplete != NULL)
{
OnComplete(); // call the comlpetion callback
}
}
}
}
// Initialize for a SCANNNER
void Scanner(uint32_t color1, uint8_t interval)
{
ActivePattern = SCANNER;
Interval = interval;
TotalSteps = (numPixels() - 1) * 2;
Color1 = color1;
Index = 0;
}
// Update the Scanner Pattern
void ScannerUpdate()
{
for (int i = 0; i < numPixels(); i++)
{
if (i == Index) // Scan Pixel to the right
{
setPixelColor(i, Color1);
}
else if (i == TotalSteps - Index) // Scan Pixel to the left
{
setPixelColor(i, Color1);
}
else // Fading tail
{
setPixelColor(i, DimColor(getPixelColor(i)));
}
}
show();
Increment();
}
// Calculate 50% dimmed version of a color (used by ScannerUpdate)
uint32_t DimColor(uint32_t color)
{
// Shift R, G and B components one bit to the right
uint32_t dimColor = Color(Red(color) >> 1, Green(color) >> 1, Blue(color) >> 1);
return dimColor;
}
// Returns the Red component of a 32-bit color
uint8_t Red(uint32_t color)
{
return (color >> 16) & 0xFF;
}
// Returns the Green component of a 32-bit color
uint8_t Green(uint32_t color)
{
return (color >> 8) & 0xFF;
}
// Returns the Blue component of a 32-bit color
uint8_t Blue(uint32_t color)
{
return color & 0xFF;
}
};
void StickComplete();
// Define some NeoPatterns for the two rings and the stick
// as well as some completion routines
NeoPatterns Stick(8, 4, NEO_GRB + NEO_KHZ800, &StickComplete);
// Initialize everything and prepare to start
void setup()
{
Serial.begin(115200);
pinMode(sensor, INPUT); // PiR sensor
// Initialize all the pixelStrips
Stick.begin();
}
// Main loop
void loop()
{
int sensorval = digitalRead(sensor); // PiR sensor
// Update the rings.
if (sensorval == HIGH)
{
Stick.Update();
}
else
{
}
}
// Stick Completion Callback
void StickComplete()
{
// Random color change for next scan
Stick.Scanner(Stick.Color(255,16,0), 55);
}Надрукуйте або вставте сюди код
@homejk, your topic has been moved to a more suitable location on the forum. Installation and Troubleshooting is not for problems with your project See About the Installation & Troubleshooting category.
I'm having trouble reconciling that statement with the fact that your code uses the relatively advanced technique of class inheritance. Have you tried learning from the simple example codes that come with the Neopixel library?
This is an example of neopixel multitasking Overview | Multi-tasking the Arduino - Part 3 | Adafruit Learning System
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.