I’m extremely new to this so bear with me if I don’t make a lot of sense.
I picked up a Photon after reviewing someone else’s project online. The project is a door sensor that updates a NeoPixel display to reflect whether the status of the door is open or close. I tweaked the existing code and learned quite a bit while toying with it just to get everything working. The basic function is working fine and I can now reflect the door status using a reed switch and neopixel display.
I wanted to extend the functionality so that the IFTTT can check the status of the sensor and post a tweet when the status changes. The IFTTT recipe is fine and the sensor data can be read and tweeted about as the sensor status changes.
However, it will randomly tweet erroneous status or repeat the current status at random intervals. This happens several times a minute and usually back to back when the status changes. I believe this is an issue with exceeding the limit on posts per second and/or the particle publish limit.
Is there a way to run the loop code only when there is a status change? I don’t want to insert a wait/delay into the loops as I’d like to keep the neopixel display to reflect the current status. I also read that introducing a delay command can cause issues with other critical Photon functions. I checked the documentation but nothing stood out to me on how to do this.
I’m also open to suggestion or corrections to the code I’m using, if there are any glaring issues.
Thanks in advance!
include "neopixel/neopixel.h"
define PIXEL_PIN D2
define PIXEL_COUNT 64
define PIXEL_TYPE WS2812B
define sensorPin D1
int sensorData = 0;
int doorStatus = 0;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(PIXEL_COUNT, PIXEL_PIN, PIXEL_TYPE);
void setup() {
strip.begin();
strip.show(); // Initialize all pixels to 'off'
Particle.variable("doorStatus", &doorStatus, INT);
pinMode(D1, INPUT);
}
void loop() {
sensorData = digitalRead(sensorPin);
if (sensorData == HIGH)
{
doorStatus = 1;
doorClosed();
Particle.publish("Door_IFTTT","Closed!");
}
else
{
doorStatus = 0;
doorOpen();
Particle.publish("Door_IFTTT","Open!");
}
}
void doorOpen() {
strip.setPixelColor(0, 0, 0, 0);
strip.setPixelColor(1, 0, 0, 0);
strip.setPixelColor(2, 0, 0, 0);
strip.setPixelColor(3, 0, 0, 0);
strip.setPixelColor(4, 0, 0, 0);
strip.setPixelColor(5, 0, 0, 0);
strip.setPixelColor(6, 0, 0, 0);
strip.setPixelColor(7, 0, 0, 0);
strip.setPixelColor(8, 0, 0, 0);
strip.setPixelColor(9, 0, 0, 0);
strip.setPixelColor(10, 0, 0, 0);
strip.setPixelColor(11, 0, 0, 0);
strip.setPixelColor(12, 0, 0, 0);
strip.setPixelColor(13, 0, 0, 0);
strip.setPixelColor(14, 0, 0, 0);
strip.setPixelColor(15, 0, 0, 0);
strip.setPixelColor(16, 0, 0, 0);
strip.setPixelColor(17, 0, 0, 0);
strip.setPixelColor(18, 0, 0, 0);
strip.setPixelColor(19, 0, 0, 0);
strip.setPixelColor(20, 0, 0, 0);
strip.setPixelColor(21, 0, 0, 0);
strip.setPixelColor(22, 27, 167, 46);
strip.setPixelColor(23, 0, 0, 0);
strip.setPixelColor(24, 0, 0, 0);
strip.setPixelColor(25, 0, 0, 0);
strip.setPixelColor(26, 0, 0, 0);
strip.setPixelColor(27, 0, 0, 0);
strip.setPixelColor(28, 0, 0, 0);
strip.setPixelColor(29, 27, 167, 46);
strip.setPixelColor(30, 0, 0, 0);
strip.setPixelColor(31, 0, 0, 0);
strip.setPixelColor(32, 0, 0, 0);
strip.setPixelColor(33, 0, 0, 0);
strip.setPixelColor(34, 0, 0, 0);
strip.setPixelColor(35, 0, 0, 0);
strip.setPixelColor(36, 27, 167, 46);
strip.setPixelColor(37, 0, 0, 0);
strip.setPixelColor(38, 0, 0, 0);
strip.setPixelColor(39, 0, 0, 0);
strip.setPixelColor(40, 0, 0, 0);
strip.setPixelColor(41, 27, 167, 46);
strip.setPixelColor(42, 0, 0, 0);
strip.setPixelColor(43, 27, 167, 46);
strip.setPixelColor(44, 0, 0, 0);
strip.setPixelColor(45, 0, 0, 0);
strip.setPixelColor(46, 0, 0, 0);
strip.setPixelColor(47, 0, 0, 0);
strip.setPixelColor(48, 0, 0, 0);
strip.setPixelColor(49, 0, 0, 0);
strip.setPixelColor(50, 27, 167, 46);
strip.setPixelColor(51, 0, 0, 0);
strip.setPixelColor(52, 0, 0, 0);
strip.setPixelColor(53, 0, 0, 0);
strip.setPixelColor(54, 0, 0, 0);
strip.setPixelColor(55, 0, 0, 0);
strip.setPixelColor(56, 0, 0, 0);
strip.setPixelColor(57, 0, 0, 0);
strip.setPixelColor(58, 0, 0, 0);
strip.setPixelColor(59, 0, 0, 0);
strip.setPixelColor(60, 0, 0, 0);
strip.setPixelColor(61, 0, 0, 0);
strip.setPixelColor(62, 0, 0, 0);
strip.setPixelColor(63, 0, 0, 0);
strip.setBrightness(30);
strip.show();
}
void doorClosed() {
strip.setPixelColor(0, 0, 0, 0);
strip.setPixelColor(1, 0, 0, 0);
strip.setPixelColor(2, 0, 0, 0);
strip.setPixelColor(3, 0, 0, 0);
strip.setPixelColor(4, 0, 0, 0);
strip.setPixelColor(5, 0, 0, 0);
strip.setPixelColor(6, 0, 0, 0);
strip.setPixelColor(7, 0, 0, 0);
strip.setPixelColor(8, 0, 0, 0);
strip.setPixelColor(9, 185, 30, 0);
strip.setPixelColor(10, 0, 0, 0);
strip.setPixelColor(11, 0, 0, 0);
strip.setPixelColor(12, 0, 0, 0);
strip.setPixelColor(13, 0, 0, 0);
strip.setPixelColor(14, 185, 30, 0);
strip.setPixelColor(15, 0, 0, 0);
strip.setPixelColor(16, 0, 0, 0);
strip.setPixelColor(17, 0, 0, 0);
strip.setPixelColor(18, 185, 30, 0);
strip.setPixelColor(19, 0, 0, 0);
strip.setPixelColor(20, 0, 0, 0);
strip.setPixelColor(21, 185, 30, 0);
strip.setPixelColor(22, 0, 0, 0);
strip.setPixelColor(23, 0, 0, 0);
strip.setPixelColor(24, 0, 0, 0);
strip.setPixelColor(25, 0, 0, 0);
strip.setPixelColor(26, 0, 0, 0);
strip.setPixelColor(27, 185, 30, 0);
strip.setPixelColor(28, 185, 30, 0);
strip.setPixelColor(29, 0, 0, 0);
strip.setPixelColor(30, 0, 0, 0);
strip.setPixelColor(31, 0, 0, 0);
strip.setPixelColor(32, 0, 0, 0);
strip.setPixelColor(33, 0, 0, 0);
strip.setPixelColor(34, 0, 0, 0);
strip.setPixelColor(35, 185, 30, 0);
strip.setPixelColor(36, 185, 30, 0);
strip.setPixelColor(37, 0, 0, 0);
strip.setPixelColor(38, 0, 0, 0);
strip.setPixelColor(39, 0, 0, 0);
strip.setPixelColor(40, 0, 0, 0);
strip.setPixelColor(41, 0, 0, 0);
strip.setPixelColor(42, 185, 30, 0);
strip.setPixelColor(43, 0, 0, 0);
strip.setPixelColor(44, 0, 0, 0);
strip.setPixelColor(45, 185, 30, 0);
strip.setPixelColor(46, 0, 0, 0);
strip.setPixelColor(47, 0, 0, 0);
strip.setPixelColor(48, 0, 0, 0);
strip.setPixelColor(49, 185, 30, 0);
strip.setPixelColor(50, 0, 0, 0);
strip.setPixelColor(51, 0, 0, 0);
strip.setPixelColor(52, 0, 0, 0);
strip.setPixelColor(53, 0, 0, 0);
strip.setPixelColor(54, 185, 30, 0);
strip.setPixelColor(55, 0, 0, 0);
strip.setPixelColor(56, 0, 0, 0);
strip.setPixelColor(57, 0, 0, 0);
strip.setPixelColor(58, 0, 0, 0);
strip.setPixelColor(59, 0, 0, 0);
strip.setPixelColor(60, 0, 0, 0);
strip.setPixelColor(61, 0, 0, 0);
strip.setPixelColor(62, 0, 0, 0);
strip.setPixelColor(63, 0, 0, 0);
strip.setBrightness(30);
strip.show();
}