Merge branch 'betterbreath' into 'master'
Betterbreath See merge request !1
This commit is contained in:
commit
1f39d905cf
@ -35,10 +35,9 @@ Médias
|
|||||||
Avancement
|
Avancement
|
||||||
==========
|
==========
|
||||||
WIP.
|
WIP.
|
||||||
Le partie arduino fonctionne, mais dès récéption de l'allumage t'as un breath plein pot.
|
Le partie arduino fonctionne, mais pour le moment il n'y a pas d'arret automatique de l'alarme.
|
||||||
La partie home-assistant fonctionne, le reveil configuré est bien envoyé à l'arduino.
|
La partie home-assistant fonctionne, le reveil configuré est bien envoyé à l'arduino.
|
||||||
TODO: Utiliser ArduinoOTA pour gérer les mises à jours sans fil.
|
TODO: Utiliser ArduinoOTA pour gérer les mises à jours sans fil.
|
||||||
TODO: gitlab-ci : on peut checker la syntax en lancant un docker home-assistant !!!
|
TODO: gitlab-ci : on peut checker la syntax en lancant un docker home-assistant !!!
|
||||||
TODO: HA Il faut des scenes pour retrouver les couleurs classiques
|
TODO: HA Il faut des scenes pour retrouver les couleurs classiques
|
||||||
TODO: Ard pas de progression du brightness au cour du temps
|
|
||||||
TODO: Ard pas d'arret une fois le reveil lancé
|
TODO: Ard pas d'arret une fois le reveil lancé
|
||||||
|
|||||||
@ -7,15 +7,6 @@
|
|||||||
|
|
||||||
#include "alarmclock.h"
|
#include "alarmclock.h"
|
||||||
|
|
||||||
// LED
|
|
||||||
// Corresponds à un max brightness configurable via HA
|
|
||||||
int brightness = LED_BRIGHTNESS_DEFAULT;
|
|
||||||
// Utilisé pour définir le seuil actuel de brightness
|
|
||||||
int curbrightness = 0;
|
|
||||||
int color = LED_COLOR_DEFAULT;
|
|
||||||
CRGB leds[LED_NUM];
|
|
||||||
boolean ledState = false;
|
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
Serial.begin(SERIAL_SPEED);
|
Serial.begin(SERIAL_SPEED);
|
||||||
@ -25,21 +16,20 @@ void setup()
|
|||||||
setupWifi();
|
setupWifi();
|
||||||
|
|
||||||
// LED
|
// LED
|
||||||
/*
|
maxBrightness = LED_MAXBRIGHTNESS_DEFAULT;
|
||||||
brightness = LED_BRIGHTNESS_DEFAULT;
|
curbrightness = LED_BRIGHTNESS_DEFAULT;
|
||||||
color = LED_COLOR_DEFAULT;
|
color = LED_COLOR_DEFAULT;
|
||||||
ledState = false;
|
ledState = false;
|
||||||
*/
|
|
||||||
|
|
||||||
LEDS.addLeds<LED_CHIPSET,LED_PIN, LED_COLOR_ORDER>(leds, LED_NUM).setCorrection(TypicalSMD5050);
|
LEDS.addLeds<LED_CHIPSET,LED_PIN, LED_COLOR_ORDER>(leds, LED_NUM).setCorrection(TypicalSMD5050);
|
||||||
ledBlackAll();
|
ledBlackAll();
|
||||||
FastLED.setBrightness(brightness);
|
|
||||||
|
|
||||||
// MQTT
|
// MQTT
|
||||||
client.setServer(MQTT_SERVER, MQTT_PORT);
|
client.setServer(MQTT_SERVER, MQTT_PORT);
|
||||||
client.setCallback(callbackMQTT);
|
client.setCallback(callbackMQTT);
|
||||||
testConnectMQTT();
|
testConnectMQTT();
|
||||||
|
|
||||||
|
fps = 0;
|
||||||
Serial.println("Ready");
|
Serial.println("Ready");
|
||||||
|
|
||||||
/* MQTT
|
/* MQTT
|
||||||
@ -119,13 +109,12 @@ void callbackMQTT(char* topic, byte* payload, unsigned int length)
|
|||||||
ledState = true;
|
ledState = true;
|
||||||
} else {
|
} else {
|
||||||
ledState = false;
|
ledState = false;
|
||||||
curbrightness = 0;
|
curbrightness = LED_BRIGHTNESS_DEFAULT;
|
||||||
ledBlackAll();
|
ledBlackAll();
|
||||||
}
|
}
|
||||||
mqttSendState();
|
mqttSendState();
|
||||||
} else if (stopic == MQTT_LED_BRIGHTNESS_COMMAND) {
|
} else if (stopic == MQTT_LED_BRIGHTNESS_COMMAND) {
|
||||||
brightness = msgString.toInt();
|
maxBrightness = msgString.toInt();
|
||||||
FastLED.setBrightness(brightness);
|
|
||||||
mqttSendBrightnessState();
|
mqttSendBrightnessState();
|
||||||
} else if (stopic == MQTT_LED_COLOR_COMMAND) {
|
} else if (stopic == MQTT_LED_COLOR_COMMAND) {
|
||||||
// Sample : 134,168,255
|
// Sample : 134,168,255
|
||||||
@ -146,7 +135,7 @@ void mqttSendState()
|
|||||||
void mqttSendBrightnessState()
|
void mqttSendBrightnessState()
|
||||||
{
|
{
|
||||||
char buff[4];
|
char buff[4];
|
||||||
itoa(brightness, buff, 10);
|
itoa(maxBrightness, buff, 10);
|
||||||
client.publish(MQTT_LED_BRIGHTNESS_STATE, buff, true);
|
client.publish(MQTT_LED_BRIGHTNESS_STATE, buff, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -194,20 +183,47 @@ void ledError()
|
|||||||
*/
|
*/
|
||||||
void ledDisplay()
|
void ledDisplay()
|
||||||
{
|
{
|
||||||
// Source : http://sean.voisen.org/blog/2011/10/breathing-led-with-arduino/
|
/* Natural Breathing LED
|
||||||
float breath = (exp(sin(millis() / 4000.0 * PI)) - 0.3678794) * 108.4;
|
* Source : http://sean.voisen.org/blog/2011/10/breathing-led-with-arduino/
|
||||||
|
* La formule : (exp(sin(x / freq)) - (1/e)) * (maxBrightness/(e-(1/e))
|
||||||
|
* freq = 2000.0 * PI (-> interval de 4sec)
|
||||||
|
* Fréquence respiratoire : https://fr.wikipedia.org/wiki/Fr%C3%A9quence_respiratoire
|
||||||
|
* Test perso rapide révéillé : 18 cycles par minutes -> interval de 3.33sec.
|
||||||
|
*
|
||||||
|
* En remplaçant 1/e par 0.349 on arrive à un minimal de 1.00x ce qui permet d'avoir les leds qui ne s'éteignent pas
|
||||||
|
* Il faut alors remplacer maxBrightness par maxBrightness - 1 dans la dernière partie de l'équation
|
||||||
|
*/
|
||||||
|
// J'ai essayé en précalculant la dernière partie à chaque changement de brightness.
|
||||||
|
// Cela ne change rien on nombre de frames traitées (400).
|
||||||
|
float breath = (exp(sin(millis() / 4500.0 * PI)) + 1.2) * ((curbrightness - 1) / (EULER - (1 / EULER)));
|
||||||
|
|
||||||
fill_solid(leds, LED_NUM, color);
|
fill_solid(leds, LED_NUM, color);
|
||||||
FastLED.setBrightness(map(breath, 0, 255, 0, curbrightness));
|
FastLED.setBrightness(breath);
|
||||||
|
/* Debug
|
||||||
|
EVERY_N_SECONDS(1) {
|
||||||
|
Serial.print(breath);
|
||||||
|
Serial.print(" | ");
|
||||||
|
Serial.print(curbrightness);
|
||||||
|
Serial.print("/");
|
||||||
|
Serial.println(maxBrightness);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
fps++;
|
||||||
|
if (SHOW_FPS) {
|
||||||
|
EVERY_N_SECONDS(1) {
|
||||||
|
Serial.print("FPS : ");
|
||||||
|
Serial.println(fps);
|
||||||
|
fps=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
FastLED.show();
|
FastLED.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
// TODO : à voir s'il est plus interressant d'augmenter vite mais graduellement
|
|
||||||
// TODO : ou de manière moins fréquence mais en faisant un saut de palier.
|
|
||||||
// TODO : la solution peut aussi etre un mix des deux
|
|
||||||
EVERY_N_SECONDS(10) {
|
EVERY_N_SECONDS(10) {
|
||||||
curbrightness++;
|
if (curbrightness <= maxBrightness) {
|
||||||
|
curbrightness++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MQTT
|
// MQTT
|
||||||
|
|||||||
@ -1,13 +1,25 @@
|
|||||||
#define SERIAL_SPEED 115200
|
#define SERIAL_SPEED 115200
|
||||||
|
|
||||||
|
#define SHOW_FPS 1
|
||||||
|
int fps;
|
||||||
|
|
||||||
// LED
|
// LED
|
||||||
#define LED_NUM 300
|
#define LED_NUM 30
|
||||||
#define LED_PIN 5 // = D1
|
#define LED_PIN 5 // = D1
|
||||||
#define LED_CHIPSET WS2812B
|
#define LED_CHIPSET WS2812B
|
||||||
#define LED_COLOR_ORDER GRB
|
#define LED_COLOR_ORDER GRB
|
||||||
#define LED_BRIGHTNESS_DEFAULT 0
|
#define LED_MAXBRIGHTNESS_DEFAULT 80
|
||||||
|
#define LED_BRIGHTNESS_DEFAULT 6
|
||||||
#define LED_COLOR_DEFAULT CRGB::Red
|
#define LED_COLOR_DEFAULT CRGB::Red
|
||||||
|
|
||||||
|
// Corresponds à un max brightness configurable via HA
|
||||||
|
int maxBrightness;
|
||||||
|
// Utilisé pour définir le seuil actuel de brightness
|
||||||
|
int curbrightness;
|
||||||
|
int color;
|
||||||
|
CRGB leds[LED_NUM];
|
||||||
|
boolean ledState;
|
||||||
|
|
||||||
// WIFI
|
// WIFI
|
||||||
#define WIFI_SSID "XXX"
|
#define WIFI_SSID "XXX"
|
||||||
#define WIFI_PASSWORD "XXX"
|
#define WIFI_PASSWORD "XXX"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user