same code as paul, different colours

This commit is contained in:
2025-01-21 13:49:19 -05:00
parent b9ad74c959
commit 3d9de4a3d5

181
hex_lamp_v2-amelia Normal file
View File

@@ -0,0 +1,181 @@
#include <Adafruit_NeoPixel.h>
#define LED_PIN 9
#define NUM_LEDS 7
#define CLBUTTON 10
Adafruit_NeoPixel pixels(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
int colourchoice = 0;
int buttonState = 0; // current state of the button
int lastButtonState = 0; // previous state of the button
int startPressed = 0; // the moment the button was pressed
int endPressed = 0; // the moment the button was released
int holdTime = 0; // how long the button was hold
int idleTime = 0; // how long the button was idle
int currentcolour = 0;
int lastcolour = 0;
/////////// pot stuff
int analogValue;
int brightness;
// Define the number of samples to keep track of. The higher the number, the
// more the readings will be smoothed, but the slower the output will respond to
// the input. Using a constant rather than a normal variable lets us use this
// value to determine the size of the readings array.
const int numReadings = 10;
int readings[numReadings]; // the readings from the analog input
int readIndex = 0; // the index of the current reading
int total = 0; // the running total
int average = 0; // the average
void setup() {
// put your setup code here, to run once:
pinMode(CLBUTTON, INPUT_PULLUP);
pixels.begin();
for (int thisReading = 0; thisReading < numReadings; thisReading++) {
readings[thisReading] = 0;
}
}
void loop() {
buttonState = digitalRead(CLBUTTON);
analogValue = analogRead(A0);
// subtract the last reading:
total = total - readings[readIndex];
// read from the sensor:
readings[readIndex] = analogValue;
// add the reading to the total:
total = total + readings[readIndex];
// advance to the next position in the array:
readIndex = readIndex + 1;
// if we're at the end of the array...
if (readIndex >= numReadings) {
// ...wrap around to the beginning:
readIndex = 0;
}
// calculate the average:
average = total / numReadings;
brightness = map(analogValue, 0, 1023, 0, 255);
switch (colourchoice)
{
case 0:
setcolour(0,0,0);
break;
case 1:
setcolour(255,255,255);
break;
case 2:
setcolour(255, 25, 255);
break;
case 3:
setcolour(255,0,0);
break;
case 4:
setcolour(0,255,0);
break;
case 5:
setcolour(0,0,255);
break;
case 6:
setcolour(255,255,0);
break;
case 7:
setcolour(0,255,255);
break;
case 8:
fire();
break;
}
if (buttonState != lastButtonState)
{
updateState();
if(buttonState == LOW){
changecolour();
}
lastButtonState = buttonState;
delay(150);
}
else
{
updateCounter();
}
delay(50);
}
void fire()
{
int r = 226, g = 121, b = 35;
delay(150);
do
{
analogValue = analogRead(A0);
brightness = map(analogValue, 0, 1023, 0, 255);
for(int i=0; i<pixels.numPixels(); i++)
{
int flicker = random(0,55);
int r1 = r-flicker;
int g1 = g-flicker;
int b1 = b-flicker;
if(g1<0) g1=0;
if(r1<0) r1=0;
if(b1<0) b1=0;
pixels.setPixelColor(i,r1,g1,b1);
pixels.setBrightness(brightness);
pixels.show();
}
delay(random(10,113));
} while(digitalRead(CLBUTTON)==HIGH);
changecolour();
}
void changecolour()
{
if (colourchoice == 8)
{
colourchoice = 0;
}
else
{
colourchoice++;
}
}
void setcolour(int r, int g, int b)
{
for( int i = 0; i < NUM_LEDS; i++) {
pixels.setPixelColor(i, pixels.Color(r, g, b));
}
pixels.setBrightness(brightness);
pixels.show();
}
void updateState() {
// the button has been just pressed
if (buttonState == LOW) {
startPressed = millis();
idleTime = startPressed - endPressed;
// the button has been just released
} else {
endPressed = millis();
holdTime = endPressed - startPressed;
}
}
void updateCounter() {
// the button is still pressed
if (buttonState == LOW) {
holdTime = millis() - startPressed;
if (holdTime >= 3000) {
colourchoice = 0;
pixels.setBrightness(0);
pixels.show();
}
}
}