I'm building a box with LEDs to notify me of my printer's toner levels.
it has x4 common anode RGB LEDs (one for each toner colour), each showing either green, yellow, or red depending on toner level.
The LED will go red when the toner is under 30%, I then want it to blink red when it goes under 20% but can't figure out how since the whole thing is within loop.
Obviously delay won't work, i've tried millis but that wouldn't work either.
Hope someone can help.
#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#define WLAN_SSID "*"
#define WLAN_PASS "*"
#define AIO_SERVER "192.168.0.2"
#define AIO_SERVERPORT 1883
#define AIO_USERNAME "*"
#define AIO_KEY "*"
const int cyrd = 13;
const int cygn = 12;
const int mgrd = 14;
const int mggn = 2;
const int ylrd = 0;
const int ylgn = 4;
const int bkrd = 5;
const int bkgn = 16;
WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Adafruit_MQTT_Subscribe black = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/toner/black");
Adafruit_MQTT_Subscribe cyan = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/toner/cyan");
Adafruit_MQTT_Subscribe magenta = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/toner/magenta");
Adafruit_MQTT_Subscribe yellow = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/toner/yellow");
void MQTT_connect();
void setup() {
Serial.begin(115200);
delay(10);
pinMode(cyrd,OUTPUT);
pinMode(cygn,OUTPUT);
pinMode(ylrd,OUTPUT);
pinMode(ylgn,OUTPUT);
pinMode(mgrd,OUTPUT);
pinMode(mggn,OUTPUT);
pinMode(bkrd,OUTPUT);
pinMode(bkgn,OUTPUT);
digitalWrite(bkgn, HIGH);
digitalWrite(bkrd, HIGH);
digitalWrite(cygn, HIGH);
digitalWrite(cyrd, HIGH);
digitalWrite(mggn, HIGH);
digitalWrite(mgrd, HIGH);
digitalWrite(ylrd, HIGH);
digitalWrite(ylgn, HIGH);
// Connect to WiFi access point.
Serial.println(); Serial.println();
Serial.print("Connecting to ");
Serial.println(WLAN_SSID);
WiFi.begin(WLAN_SSID, WLAN_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.println("IP address: "); Serial.println(WiFi.localIP());
mqtt.subscribe(&black);
mqtt.subscribe(&cyan);
mqtt.subscribe(&magenta);
mqtt.subscribe(&yellow);
}
void loop() {
MQTT_connect();
Adafruit_MQTT_Subscribe *subscription;
while ((subscription = mqtt.readSubscription(5000))) {
if (subscription == &black) {
Serial.print(F("Got_black: "));
Serial.println((char *)black.lastread);
uint8_t num = atoi((char *)black.lastread);
if (num>60) {
digitalWrite(bkgn, LOW);
digitalWrite(bkrd, HIGH);
}
}
if (subscription == &black) {
Serial.print(F("Got_black: "));
Serial.println((char *)black.lastread);
uint8_t num = atoi((char *)black.lastread);
if (num<60 && num>30) {
digitalWrite(bkgn, LOW);
digitalWrite(bkrd, LOW);
}
}
if (subscription == &black) {
Serial.print(F("Got_black: "));
Serial.println((char *)black.lastread);
uint8_t num = atoi((char *)black.lastread);
if (num<30
) {
digitalWrite(bkgn, HIGH);
digitalWrite(bkrd, LOW);
}
}
if (subscription == &cyan) {
Serial.print(F("Got_cyan: "));
Serial.println((char *)cyan.lastread);
uint8_t num = atoi((char *)cyan.lastread);
if (num>60) {
digitalWrite(cygn, LOW);
digitalWrite(cyrd, HIGH);
}
}
if (subscription == &cyan) {
Serial.print(F("Got_black: "));
Serial.println((char *)cyan.lastread);
uint8_t num = atoi((char *)cyan.lastread);
if (num<60 && num>25) {
digitalWrite(cygn, LOW);
digitalWrite(cyrd, LOW);
}
}
if (subscription == &cyan) {
Serial.print(F("Got_cyan: "));
Serial.println((char *)cyan.lastread);
uint8_t num = atoi((char *)cyan.lastread);
if (num<25) {
digitalWrite(cygn, HIGH);
digitalWrite(cyrd, LOW);
}
}
if (subscription == &magenta) {
Serial.print(F("Got_magenta: "));
Serial.println((char *)magenta.lastread);
uint8_t num = atoi((char *)magenta.lastread);
if (num>60) {
digitalWrite(mggn, LOW);
digitalWrite(mgrd, HIGH);
}
}
if (subscription == &magenta) {
Serial.print(F("Got_magenta: "));
Serial.println((char *)magenta.lastread);
uint8_t num = atoi((char *)magenta.lastread);
if (num<60 && num>25) {
digitalWrite(mggn, LOW);
digitalWrite(mgrd, LOW);
}
}
if (subscription == &magenta) {
Serial.print(F("Got_black: "));
Serial.println((char *)magenta.lastread);
uint8_t num = atoi((char *)magenta.lastread);
if (num<25) {
digitalWrite(mggn, HIGH);
digitalWrite(mgrd, LOW);
}
}
if (subscription == &yellow) {
Serial.print(F("Got_yellow: "));
Serial.println((char *)yellow.lastread);
uint8_t num = atoi((char *)yellow.lastread);
if (num<60 && num>25) {
digitalWrite(ylgn, LOW);
digitalWrite(ylrd, LOW);
}
}
if (subscription == &yellow) {
Serial.print(F("Got_yellow: "));
Serial.println((char *)yellow.lastread);
uint8_t num = atoi((char *)yellow.lastread);
if (num<25) {
digitalWrite(ylgn, HIGH);
digitalWrite(ylrd, LOW);
}
}
if (subscription == &yellow) {
Serial.print(F("Got_yellow: "));
Serial.println((char *)yellow.lastread);
uint8_t num = atoi((char *)yellow.lastread);
if (num<25) {
digitalWrite(ylgn, HIGH);
digitalWrite(ylrd, LOW);
}
}
}
if(! mqtt.ping()) {
mqtt.disconnect();
}
}
void MQTT_connect() {
int8_t ret;
if (mqtt.connected()) {
return;
}
Serial.print("Connecting to MQTT... ");
uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) {
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 5 seconds...");
mqtt.disconnect();
delay(5000);
retries--;
if (retries == 0) {
while (1);
}
}
Serial.println("MQTT Connected!");
}