c-info-wand
elektronic
code
/*
Fade for c-info wall at c-base with MQTT
*/
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
// Apparently the preprocessor variables B0 and B1 are already taken.
// Therefore we use the prefix CBASE
#define CBASER0 PM_3
#define CBASEG0 PD_1
#define CBASEB0 PD_0
#define CBASER1 PL_4
#define CBASEG1 PL_5
#define CBASEB1 PM_1
#define CBASER2 PM_7
#define CBASEG2 PA_7
#define CBASEB2 PM_6
int brightness = 50; // how bright the LED is
int fadeAmount = 1; // how many points to fade the LED by
int fadeCounter = 0;
// MQTTServer to use
char server[] = "c-beam.cbrp3.c-base.org";
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Received message for topic ");
Serial.print(topic);
Serial.print("with length ");
Serial.println(length);
Serial.println("Message:");
Serial.write(payload, length);
Serial.println();
fadeCounter = 20;
}
EthernetClient ethClient;
PubSubClient client(server, 1883, callback, ethClient);
void setup() {
pinMode(CBASER0, OUTPUT);
pinMode(CBASEG0, OUTPUT);
pinMode(CBASEB0, OUTPUT);
pinMode(CBASER1, OUTPUT);
pinMode(CBASEG1, OUTPUT);
pinMode(CBASEB1, OUTPUT);
pinMode(CBASER2, OUTPUT);
pinMode(CBASEG2, OUTPUT);
pinMode(CBASEB2, OUTPUT);
Serial.begin(115200);
Serial.print("Ethernet starting.");
// Start Ethernet with the build in MAC Address
Ethernet.begin(0);
Serial.print("My IP address: ");
Serial.println(Ethernet.localIP());
}
void doFade() {
while(true) {
if (brightness < 50) {
fadeAmount = 1;
brightness = 50;
return;
}
if (brightness >= 200) {
fadeAmount = -1;
}
// There was some problem with the upper-most LED stripe.
// That is why we just set this one to full brightness forever.
if(fadeCounter > 0) {
analogWrite(CBASER0, 0);
analogWrite(CBASEG0, 0);
analogWrite(CBASEB0, 255);
}
else {
analogWrite(CBASER0, 255);
analogWrite(CBASEG0, 0);
analogWrite(CBASEB0, 0);
}
// The rest of the wall is pulsing.
analogWrite(CBASER1, brightness);
analogWrite(CBASEG1, brightness);
analogWrite(CBASEB1, brightness);
analogWrite(CBASER2, brightness);
analogWrite(CBASEG2, brightness);
analogWrite(CBASEB2, brightness);
delay(10);
brightness = brightness + fadeAmount;
}
}
void loop() {
if (!client.connected()) {
Serial.println("Disconnected. Reconnecting....");
if(!client.connect("c-info")) {
Serial.println("Connection failed");
} else {
Serial.println("Connection success");
if(client.subscribe("user/boarding")) {
Serial.println("Subscription 2 successfull");
}
}
}
client.loop();
Serial.print("fadeCounter: ");
Serial.println(fadeCounter);
doFade();
if (fadeCounter > 0) {
fadeCounter--;
}
delay(800);
}