all modules seems to work now - switches are some kind of buggy
This commit is contained in:
parent
5f55011894
commit
2f17318f48
10 changed files with 200 additions and 75 deletions
5
.vscode/settings.json
vendored
Normal file
5
.vscode/settings.json
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"files.associations": {
|
||||
"functional": "cpp"
|
||||
}
|
||||
}
|
|
@ -11,12 +11,12 @@ private:
|
|||
|
||||
const uint8_t MAX_CONTRAST = 255;
|
||||
SSD1306Wire * _display;
|
||||
unsigned int _dispaddr;
|
||||
size_t _pin_sda, _pin_scl;
|
||||
void _initDisplay();
|
||||
uint8_t _dispaddr;
|
||||
int _pin_sda, _pin_scl;
|
||||
public:
|
||||
display(size_t pin_sda, size_t pin_scl, unsigned int display_addr);
|
||||
display(uint8_t dispaddr, int pin_sda, int pin_scl);
|
||||
~display();
|
||||
void init();
|
||||
void header(String title);
|
||||
void header(String title, bool wificonected, bool localvalues, bool lastdatasent, bool timesynced);
|
||||
void data(unsigned int x, unsigned int y , float val, String valname);
|
||||
|
@ -27,32 +27,29 @@ public:
|
|||
|
||||
};
|
||||
|
||||
display::display(size_t pin_sda, size_t pin_scl, unsigned int display_addr)
|
||||
display::display(uint8_t dispaddr, int pin_sda, int pin_scl)
|
||||
{
|
||||
_pin_sda = pin_sda;
|
||||
_pin_scl = pin_scl;
|
||||
_dispaddr = display_addr;
|
||||
_dispaddr = dispaddr;
|
||||
_display = new SSD1306Wire(_dispaddr, _pin_sda, _pin_scl);
|
||||
_initDisplay();
|
||||
}
|
||||
|
||||
display::~display()
|
||||
{
|
||||
}
|
||||
|
||||
void display::_initDisplay()
|
||||
void display::init()
|
||||
{
|
||||
//initialise OLED and display Welcome Message ...
|
||||
_display->init();
|
||||
//_display->flipScreenVertically();
|
||||
/* _display->setTextAlignment(TEXT_ALIGN_CENTER);
|
||||
_display->flipScreenVertically();
|
||||
_display->setTextAlignment(TEXT_ALIGN_CENTER);
|
||||
_display->setFont(Roboto_Condensed_Bold_16);
|
||||
_display->clear();
|
||||
_display->setContrast(MAX_CONTRAST);
|
||||
_display->drawString(64, 32, "Itsblue.de");
|
||||
_display->display();
|
||||
|
||||
*/
|
||||
}
|
||||
|
||||
void display::header(String title, bool wificonected, bool localvalues, bool lastdatasent, bool timesynced)
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#ifndef __eeprom_H__
|
||||
#define __eeprom_H__
|
||||
|
||||
#include <TridentTD_ESP32NVS.h>
|
||||
|
||||
class eeprom
|
||||
|
@ -12,17 +11,22 @@ public:
|
|||
~eeprom();
|
||||
void set_int(String name , uint64_t val );
|
||||
uint64_t get_int(String name );
|
||||
void begin();
|
||||
};
|
||||
|
||||
eeprom::eeprom()
|
||||
{
|
||||
NVS.begin();
|
||||
}
|
||||
|
||||
eeprom::~eeprom()
|
||||
{
|
||||
}
|
||||
|
||||
void eeprom::begin()
|
||||
{
|
||||
NVS.begin();
|
||||
}
|
||||
|
||||
void eeprom::set_int(String name , uint64_t val )
|
||||
{
|
||||
NVS.setInt(name, val);
|
||||
|
|
|
@ -53,6 +53,8 @@ class leds
|
|||
bool colorWipe( uint32_t color );
|
||||
void add_button_id(uint16_t mask);
|
||||
bool do_fade();
|
||||
bool fade_off();
|
||||
bool fade_on();
|
||||
void setBrigthness(uint8_t brigthness);
|
||||
void setHS(uint16_t H, uint8_t S);
|
||||
void setColor(uint32_t color);
|
||||
|
@ -69,11 +71,19 @@ leds::leds(Adafruit_NeoPixel * stripe, uint16_t * state_flag, uint16_t state_mas
|
|||
_pixel_first = pixel_first;
|
||||
_pixel_nr = 1 + abs(pixel_last - pixel_first);
|
||||
_pixels = (_pixel *) malloc(sizeof(_pixel) * _pixel_nr);
|
||||
size_t index = 0;
|
||||
for(size_t nr=pixel_first; nr<=pixel_last;nr++)
|
||||
{
|
||||
_pixels[index].lednr = nr;
|
||||
index++;
|
||||
}
|
||||
_stripe = stripe;
|
||||
_R = _calc_R();
|
||||
_setLeds(0);
|
||||
_rainbow_pixel = 0;
|
||||
_rainbow_color = 0;
|
||||
_prev_state = *_state_flag;
|
||||
_fading_done = true;
|
||||
|
||||
|
||||
}
|
||||
|
@ -86,7 +96,7 @@ leds::~leds()
|
|||
|
||||
void leds::_setLeds()
|
||||
{
|
||||
for(uint8_t nr = 0; nr < _pixel_nr; nr++)
|
||||
for(unsigned int nr = 0; nr < _pixel_nr; nr++)
|
||||
{
|
||||
_stripe->setPixelColor(_pixels[nr].lednr, _pixels[nr].color);
|
||||
}
|
||||
|
@ -95,8 +105,9 @@ void leds::_setLeds()
|
|||
|
||||
void leds::_setLeds(uint32_t color)
|
||||
{
|
||||
for(uint8_t nr = 0; nr < _pixel_nr; nr++)
|
||||
for(unsigned int nr = 0; nr < _pixel_nr; nr++)
|
||||
{
|
||||
//Serial.printf("setting led %d with nr %d in stripe to color %d\n", nr, _pixels[nr].lednr, color);
|
||||
_stripe->setPixelColor(_pixels[nr].lednr, color);
|
||||
_pixels[nr].color = color;
|
||||
}
|
||||
|
@ -119,6 +130,7 @@ bool leds::do_fade()
|
|||
|
||||
if(_prev_state != curr_state)
|
||||
{
|
||||
//Serial.printf("Current state is 0x%08x\n", curr_state);
|
||||
_prev_state = curr_state;
|
||||
_fading_done = false;
|
||||
}
|
||||
|
@ -129,15 +141,28 @@ bool leds::do_fade()
|
|||
if(0 == curr_state)
|
||||
{
|
||||
_fade_off();
|
||||
//Serial.printf("Fading off.\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
_fade_on();
|
||||
//Serial.printf("Fading ON\n");
|
||||
}
|
||||
}
|
||||
return updated;
|
||||
}
|
||||
|
||||
bool leds::fade_on()
|
||||
{
|
||||
return _fade_on();
|
||||
}
|
||||
|
||||
bool leds::fade_off()
|
||||
{
|
||||
return _fade_off();
|
||||
}
|
||||
|
||||
|
||||
float leds::_calc_R(void)
|
||||
{
|
||||
return (FADESTEPS * log10(2))/(log10(_local_brightness));
|
||||
|
@ -232,11 +257,11 @@ bool leds::_fade_off()
|
|||
}
|
||||
|
||||
|
||||
|
||||
void leds::rainbowCycle()
|
||||
{
|
||||
if((millis() - _last_rainbowcycle) > WAIT_RAINBOWCYCLE_MS)
|
||||
{
|
||||
//Serial.printf("Rainbow! Next color\n");
|
||||
_last_rainbowcycle = millis();
|
||||
_rainbow_color++;
|
||||
if(_rainbow_color >= 256*1)
|
||||
|
|
|
@ -1,24 +1,25 @@
|
|||
#include <Arduino.h>
|
||||
//#include "train.h"
|
||||
#include "train.h"
|
||||
#include "relais.h"
|
||||
#include "taster.h"
|
||||
//#include "leds.h"
|
||||
//#include "mp3.h"
|
||||
#include "leds.h"
|
||||
#include "mp3.h"
|
||||
#include "display.h"
|
||||
#include <TridentTD_ESP32NVS.h>
|
||||
//#include "eeprom.h"
|
||||
|
||||
//eeprom save;
|
||||
//eeprom flash;
|
||||
///---- OLED ----
|
||||
const size_t PIN_MONI_SDA = 25 ; //12
|
||||
const size_t PIN_MONI_SCL = 26 ; //14
|
||||
const unsigned int ADDR_MONI = 0x3c;
|
||||
display moni(PIN_MONI_SDA, PIN_MONI_SCL, ADDR_MONI);
|
||||
const int PIN_MONI_SDA = 21 ; //12
|
||||
const int PIN_MONI_SCL = 22 ; //14
|
||||
const uint8_t ADDR_MONI = 0x3c;
|
||||
display moni(ADDR_MONI, PIN_MONI_SDA, PIN_MONI_SCL);
|
||||
///---- MP3 ----
|
||||
const size_t PIN_MP3_RX = 3 ; //D2;
|
||||
const size_t PIN_MP3_TX = 1 ; //D3;
|
||||
//mp3 mp3ply(PIN_MP3_RX, PIN_MP3_TX);
|
||||
const size_t PIN_MP3_RX = 25 ; //D2;
|
||||
const size_t PIN_MP3_TX = 26 ; //D3;
|
||||
mp3 mp3ply(PIN_MP3_RX, PIN_MP3_TX);
|
||||
///---- RELAIS ----
|
||||
const size_t PIN_RELAIS_HAUESER = 18;
|
||||
const size_t PIN_RELAIS_HAUESER = 5;
|
||||
const size_t PIN_RELAIS_STERNE = 17;
|
||||
const size_t PIN_RELAIS_SPIEGELBALL = 16;
|
||||
const size_t PIN_RELAIS_OTHER = 4;
|
||||
|
@ -31,13 +32,59 @@ const size_t PIN_TRAIN_UNTEN = 32;
|
|||
const size_t PIN_TRAIN_OBEN = 33;
|
||||
#define PWM_CHANNEL_OBEN 5
|
||||
#define PWM_CHANNEL_UNTEN 6
|
||||
//train zugunten(PIN_TRAIN_UNTEN, PWM_CHANNEL_UNTEN );
|
||||
//train zugoben(PIN_TRAIN_OBEN, PWM_CHANNEL_OBEN );
|
||||
train zugunten(PIN_TRAIN_UNTEN, PWM_CHANNEL_UNTEN );
|
||||
train zugoben(PIN_TRAIN_OBEN, PWM_CHANNEL_OBEN );
|
||||
///--- Taster ----
|
||||
const size_t PIN_TASTER_AUSSEN_LICHT = 36;
|
||||
const size_t PIN_TASTER_AUSSEN_MOVE = 39;
|
||||
const size_t PIN_TASTER_TRAIN_UNTEN = 34;
|
||||
const size_t PIN_TASTER_TRAIN_OBEN = 35;
|
||||
|
||||
const unsigned long BOUNCING_TIME_MS = 300;
|
||||
unsigned long last_pressed_1, last_pressed_2, last_pressed_3, last_pressed_4;
|
||||
unsigned long number_pressed_1, number_pressed_2, number_pressed_3, number_pressed_4;
|
||||
/*
|
||||
void IRAM_ATTR ISR_1()
|
||||
{
|
||||
if(millis()-last_pressed_1 > BOUNCING_TIME_MS)
|
||||
{
|
||||
last_pressed_1 = millis();
|
||||
number_pressed_1 += 1;
|
||||
}
|
||||
}
|
||||
|
||||
void IRAM_ATTR ISR_2()
|
||||
{
|
||||
if(millis()-last_pressed_2 > BOUNCING_TIME_MS)
|
||||
{
|
||||
last_pressed_2 = millis();
|
||||
number_pressed_2 += 1;
|
||||
}
|
||||
}
|
||||
|
||||
void IRAM_ATTR ISR_3()
|
||||
{
|
||||
if(millis()-last_pressed_3 > BOUNCING_TIME_MS)
|
||||
{
|
||||
last_pressed_3 = millis();
|
||||
number_pressed_3 += 1;
|
||||
}
|
||||
}
|
||||
|
||||
void IRAM_ATTR ISR_4()
|
||||
{
|
||||
if(millis()-last_pressed_4 > BOUNCING_TIME_MS)
|
||||
{
|
||||
last_pressed_4 = millis();
|
||||
number_pressed_4 += 1;
|
||||
}
|
||||
}
|
||||
|
||||
taster taster_aussen_licht(PIN_TASTER_AUSSEN_LICHT, &ISR_1, &number_pressed_1);
|
||||
taster taster_aussen_move(PIN_TASTER_AUSSEN_MOVE, &ISR_2, &number_pressed_2);
|
||||
taster taster_train_unten(PIN_TASTER_TRAIN_UNTEN, &ISR_3, &number_pressed_3);
|
||||
taster taster_train_oben(PIN_TASTER_TRAIN_OBEN, &ISR_4, &number_pressed_4);
|
||||
*/
|
||||
taster taster_aussen_licht(PIN_TASTER_AUSSEN_LICHT);
|
||||
taster taster_aussen_move(PIN_TASTER_AUSSEN_MOVE);
|
||||
taster taster_train_unten(PIN_TASTER_TRAIN_UNTEN);
|
||||
|
@ -45,9 +92,10 @@ taster taster_train_oben(PIN_TASTER_TRAIN_OBEN);
|
|||
///--- RGB LEDs ---
|
||||
uint16_t rgbled_state_flag = 0;
|
||||
const size_t PIN_RGBLEDS = 19;
|
||||
#define NUMRGBLEDS 20
|
||||
//Adafruit_NeoPixel rgb_leds(NUMRGBLEDS, PIN_RGBLEDS, NEO_GRB + NEO_KHZ800);
|
||||
#define NUMRGBLEDS 25
|
||||
Adafruit_NeoPixel rgb_leds(NUMRGBLEDS, PIN_RGBLEDS, NEO_GRB + NEO_KHZ800);
|
||||
|
||||
enum led_t {LTANNE=1, LBACK=2, LSTERNE=4, LTEICH=8};
|
||||
//leds led_tanne(&rgb_leds, &rgbled_state_flag, LTANNE, 5000,220, 0, 5 );
|
||||
//leds led_teich(&rgb_leds, &rgbled_state_flag, LTEICH, 5000,220, 6, 10 );
|
||||
leds led_tanne(&rgb_leds, &rgbled_state_flag, LTANNE, 5000,220, 0, 5 );
|
||||
leds led_teich(&rgb_leds, &rgbled_state_flag, LTEICH, 5000,220, 6, 10 );
|
||||
leds led_sterne(&rgb_leds, &rgbled_state_flag, LSTERNE, 5000,220, 11, 24 );
|
||||
|
|
|
@ -18,6 +18,9 @@ public:
|
|||
void stop();
|
||||
void play(size_t nr);
|
||||
unsigned long is_playing();
|
||||
void begin(byte vol=30);
|
||||
void play_vol(size_t nr, byte vol);
|
||||
void vol(byte val);
|
||||
};
|
||||
|
||||
mp3::mp3(size_t rx_pin, size_t tx_pin)
|
||||
|
@ -25,20 +28,38 @@ mp3::mp3(size_t rx_pin, size_t tx_pin)
|
|||
_rx_pin = rx_pin;
|
||||
_tx_pin = tx_pin;
|
||||
player = new SerialMP3Player(_rx_pin, _tx_pin);
|
||||
player->begin(9600);
|
||||
delay(500);
|
||||
player->sendCommand(CMD_SEL_DEV, 0, 2); //select sd-card
|
||||
delay(500);
|
||||
player->setVol(30);
|
||||
}
|
||||
|
||||
mp3::~mp3()
|
||||
{
|
||||
}
|
||||
|
||||
void mp3::begin(byte vol)
|
||||
{
|
||||
player->begin(9600);
|
||||
delay(500);
|
||||
player->sendCommand(CMD_SEL_DEV, 0, 2); //select sd-card
|
||||
delay(500);
|
||||
player->setVol(vol);
|
||||
}
|
||||
|
||||
void mp3::play_vol(size_t nr, byte vol)
|
||||
{
|
||||
player->setVol(vol);
|
||||
player->play(nr);
|
||||
_play_since_ms = millis();
|
||||
}
|
||||
|
||||
|
||||
void mp3::play(size_t nr)
|
||||
{
|
||||
player->play(nr);
|
||||
player->playSL(nr);
|
||||
_play_since_ms = millis();
|
||||
}
|
||||
|
||||
void mp3::vol(byte val)
|
||||
{
|
||||
player->setVol(val);
|
||||
_play_since_ms = millis();
|
||||
}
|
||||
|
||||
|
|
|
@ -6,35 +6,41 @@
|
|||
class taster
|
||||
{
|
||||
private:
|
||||
volatile const unsigned long _BOUNCING_TIME_MS = 200;
|
||||
volatile const unsigned long _BOUNCING_TIME_MS = 300;
|
||||
volatile unsigned long _last_pressed;
|
||||
size_t _taster_pin;
|
||||
volatile unsigned long _number_pressed;
|
||||
unsigned long _number_pressed;
|
||||
unsigned long _number_checked;
|
||||
size_t _taster_pin;
|
||||
//unsigned long * _ptr_number_pressed;
|
||||
|
||||
void IRAM_ATTR _taster_int()
|
||||
{
|
||||
if(millis()-_last_pressed > _BOUNCING_TIME_MS)
|
||||
unsigned long msecs = millis();
|
||||
if(msecs -_last_pressed > _BOUNCING_TIME_MS)
|
||||
{
|
||||
_last_pressed = millis();
|
||||
_last_pressed = msecs;
|
||||
_number_pressed += 1;
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
taster(size_t pin);
|
||||
//taster(const size_t pin, void (*isrfunction)(), unsigned long* ptr_number_pressed);
|
||||
taster(const size_t pin);
|
||||
~taster();
|
||||
bool pressed();
|
||||
};
|
||||
|
||||
//taster::taster(size_t pin, void (*isrfunction)(), unsigned long* ptr_number_pressed)
|
||||
taster::taster(size_t pin)
|
||||
{
|
||||
_taster_pin = pin;
|
||||
_number_pressed = 0;
|
||||
//_ptr_number_pressed = ptr_number_pressed;
|
||||
_number_checked = 0;
|
||||
_number_pressed = 0;
|
||||
_last_pressed = 0;
|
||||
pinMode(_taster_pin, INPUT_PULLUP);
|
||||
pinMode(_taster_pin, INPUT);
|
||||
attachInterrupt(_taster_pin, std::bind(&taster::_taster_int,this), FALLING);
|
||||
//attachInterrupt(_taster_pin, isrfunction, FALLING);
|
||||
}
|
||||
|
||||
taster::~taster()
|
||||
|
|
|
@ -18,7 +18,6 @@ private:
|
|||
unsigned long _last_faded_ms;
|
||||
unsigned long _delay_ms;
|
||||
|
||||
void _set_pwm(uint8_t pwm_value);
|
||||
bool _fade(bool fade_up);
|
||||
|
||||
public:
|
||||
|
@ -27,6 +26,7 @@ public:
|
|||
void stop();
|
||||
bool fade_on();
|
||||
bool fade_off();
|
||||
void set_pwm(uint8_t pwm_value);
|
||||
|
||||
};
|
||||
|
||||
|
@ -46,12 +46,12 @@ train::~train()
|
|||
{
|
||||
}
|
||||
|
||||
void train::_set_pwm(uint8_t pwm_value) {
|
||||
void train::set_pwm(uint8_t pwm_value) {
|
||||
ledcWrite(_pwmchannel, pwm_value);
|
||||
}
|
||||
|
||||
void train::stop() {
|
||||
_set_pwm(0);
|
||||
set_pwm(0);
|
||||
}
|
||||
|
||||
bool train::_fade(bool fade_up)
|
||||
|
|
|
@ -16,5 +16,5 @@ monitor_speed = 115200
|
|||
lib_deps =
|
||||
salvadorrueda/SerialMP3Player@^1.1.0
|
||||
plerup/EspSoftwareSerial@^6.14.1
|
||||
thingpulse/ESP8266 and ESP32 OLED driver for SSD1306 displays@^4.2.1
|
||||
tridenttd/TridentTD_ESP32NVS@^1.0
|
||||
thingpulse/ESP8266 and ESP32 OLED driver for SSD1306 displays@^4.2.1
|
||||
|
|
63
src/main.cpp
63
src/main.cpp
|
@ -4,44 +4,64 @@
|
|||
void show_counters(uint64_t counter_licht, uint64_t counter_move);
|
||||
|
||||
//variables
|
||||
uint64_t licht_all_count = 0;
|
||||
uint64_t move_all_count = 0;
|
||||
uint16_t licht_all_count = 0;
|
||||
uint16_t move_all_count = 0;
|
||||
|
||||
void setup() {
|
||||
Serial.begin(115200);
|
||||
rgb_leds.begin();
|
||||
NVS.begin();
|
||||
moni.init();
|
||||
//load counters
|
||||
// save.set_int("licht", 0);
|
||||
// save.set_int("move", 0);
|
||||
// licht_all_count = save.get_int("licht");
|
||||
// move_all_count = save.get_int("move");
|
||||
//NVS.setInt("licht", 100);
|
||||
//NVS.setInt("move", 50);
|
||||
licht_all_count = NVS.getInt("licht");
|
||||
move_all_count = NVS.getInt("move");
|
||||
// all relais off;
|
||||
relais_haeuser.off();
|
||||
relais_sterne.off();
|
||||
relais_spiegel.off();
|
||||
relais_other.off();
|
||||
/*
|
||||
|
||||
zugoben.stop();
|
||||
zugunten.stop();
|
||||
|
||||
led_tanne.setColor(0x0f0);
|
||||
mp3ply.play(1);
|
||||
|
||||
*/
|
||||
|
||||
|
||||
led_tanne.setColor(rgb_leds.Color(0, 150, 0));
|
||||
rgbled_state_flag = rgbled_state_flag | LSTERNE;
|
||||
mp3ply.begin();
|
||||
mp3ply.stop();
|
||||
}
|
||||
|
||||
uint8_t licht_count = 0;
|
||||
bool faded_on = false;
|
||||
|
||||
void loop() {
|
||||
|
||||
//led_teich.rainbowCycle();
|
||||
//rgb_leds.show();
|
||||
if(faded_on == false)
|
||||
{
|
||||
if(true == led_sterne.fade_on())
|
||||
faded_on = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(true == led_sterne.fade_off())
|
||||
faded_on = false;
|
||||
}
|
||||
led_teich.rainbowCycle();
|
||||
rgb_leds.show();
|
||||
|
||||
if(taster_aussen_licht.pressed())
|
||||
{
|
||||
relais_haeuser.toggle();
|
||||
licht_all_count++;
|
||||
NVS.setInt("licht", licht_all_count);
|
||||
}
|
||||
|
||||
if(taster_aussen_move.pressed())
|
||||
{
|
||||
relais_other.toggle();
|
||||
move_all_count++;
|
||||
NVS.setInt("move", move_all_count);
|
||||
}
|
||||
|
||||
if(taster_train_oben.pressed())
|
||||
relais_sterne.toggle();
|
||||
|
@ -49,9 +69,9 @@ void loop() {
|
|||
if(taster_train_unten.pressed())
|
||||
relais_spiegel.toggle();
|
||||
|
||||
/*
|
||||
show_counters(licht_all_count, move_all_count);
|
||||
|
||||
show_counters(licht_all_count, move_all_count);
|
||||
/*
|
||||
switch (licht_count)
|
||||
{
|
||||
case 1:
|
||||
|
@ -90,13 +110,12 @@ void loop() {
|
|||
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
void show_counters(uint64_t counter_licht, uint64_t counter_move)
|
||||
{
|
||||
moni.clear();
|
||||
moni.header("Zaehler");
|
||||
moni.data(10,15,counter_licht, "Licht:");
|
||||
moni.data(10,15,counter_move, "Moves:");
|
||||
moni.data(30,20,counter_licht, "Licht");
|
||||
moni.data(100,20,counter_move, "Moves");
|
||||
moni.show();
|
||||
}
|
||||
*/
|
Loading…
Reference in a new issue