From babb27e5ea50c37f97e8fe318d0f38a57980f6db Mon Sep 17 00:00:00 2001 From: Martin Ness Date: Tue, 10 May 2016 20:42:49 +0200 Subject: [PATCH 1/5] use limits.h --- status/status.ino | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/status/status.ino b/status/status.ino index 0c902eb..f1d8ef3 100644 --- a/status/status.ino +++ b/status/status.ino @@ -1,3 +1,4 @@ +#include /* * es gibt folgende Zustände: * 0 - Aus @@ -17,9 +18,6 @@ #define TIME_HALF 5400000 // 1,5h #define TIME_OFF 7200000 // 2h -// für Variablen Überlauf in calcStateTime -#define MAX_LONG 4294967295 - // Ein-/Ausgänge Bezeichnen const int BTN_ON = 2; // Einschalter const int BTN_OFF = 3; // Ausschalter @@ -134,7 +132,7 @@ unsigned long calcStateTime() { if (millis() - stateBegan >= 0) { return millis() - stateBegan; } else { - return millis() + (MAX_LONG - stateBegan); + return millis() + (ULONG_MAX - stateBegan); } } From 643778a27c85f3e69ba4b670c6862163164fcfae Mon Sep 17 00:00:00 2001 From: Martin Ness Date: Tue, 10 May 2016 21:02:35 +0200 Subject: [PATCH 2/5] =?UTF-8?q?=C3=9Cberlaufbehandlung=20=C3=BCberarbeitet?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- status/status.ino | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/status/status.ino b/status/status.ino index f1d8ef3..66ffc78 100644 --- a/status/status.ino +++ b/status/status.ino @@ -129,11 +129,12 @@ void sendState() { unsigned long calcStateTime() { // Variablen überlauf von millis erkennen - if (millis() - stateBegan >= 0) { - return millis() - stateBegan; - } else { - return millis() + (ULONG_MAX - stateBegan); + unsigned long current_uptime = millis(); + // kein überlauf + if (current_uptime > stateBegan) { + return current_uptime - stateBegan; } + return current_uptime + (ULONG_MAX - stateBegan); } // wird nach dem Starten dauerhaft ausgeführt From a495c47591577c889843b2afefb040ac0ee88a84 Mon Sep 17 00:00:00 2001 From: Lowl3v3l Date: Tue, 10 May 2016 22:30:32 +0200 Subject: [PATCH 3/5] added a Makefile that lacks a solid avrdude-command, added dependency files to gitignore --- Makefile | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..43f7f4f --- /dev/null +++ b/Makefile @@ -0,0 +1,41 @@ +SRC:=$(shell find src -regex '.*\.c') +OBJ:=$(patsubst %,%.o,$(SRC)) +DEP:=$(patsubst %,%.d,$(SRC)) + +CC?=avr-gcc + +CFLAGS?= -O2 -ggdb -std=gnu11 -fomit-frame-pointer -fmerge-all-constants\ +-faggressive-loop-optimizations -finline-functions -funsafe-loop-optimizations\ +-ffreestanding -Wlogical-op -Wdouble-promotion -Wformat -Winit-self -Wnormalized\ +-Wmissing-include-dirs -Wswitch-default -Wpadded -Wswitch-enum -Wall\ +-Wunused -Winline -Wuninitialized -Wstrict-overflow -Wpointer-sign\ +-Wfloat-equal -Wstack-protector -Wtraditional-conversion -Wundef -Wvla\ +-Wdeclaration-after-statement -Wshadow -Wcast-align -Wpedantic -Wextra\ +-Wpointer-arith -Wbad-function-cast -Wwrite-strings -Wtrampolines -Wpacked\ +-Wconversion -Wdate-time -Waggregate-return -Wstrict-prototypes\ +-Wold-style-definition -Wmissing-prototypes -Wvector-operation-performance\ +-Wredundant-decls -Wnested-externs -Wlong-long -Wvariadic-macros\ +-Wdisabled-optimization -Wmissing-declarations -Wunsafe-loop-optimizations\ +-Wunsuffixed-float-constants -pipe -Werror + +ARDUINO?= +PROGRAMMER?= + +.PHONY: all clean check install build + +all: build + +# TODO : find a install commandline +#install: build +# avrdude + +clean: + rm $(OBJ) $(DEP) + +check: + $(CC) $(CFLAGS) -fsyntax-only $(SRC) + +build: $(SRC) + $(CC) $(CFLAGS) $(SRC) -MMD -MP -o hackspace-status.sys + +-include $(sort $(DEP)) \ No newline at end of file From 33bce81a421fffa232b147b07cef3ec8422d7a5e Mon Sep 17 00:00:00 2001 From: Martin Ness Date: Wed, 11 May 2016 00:03:35 +0200 Subject: [PATCH 4/5] =?UTF-8?q?anpassungen=20f=C3=BCr=20nutzung=20von=20Ma?= =?UTF-8?q?kefile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 26 ++++++++++-------- status/{status.ino => status.cpp} | 44 +++++++++++++++++++------------ 2 files changed, 42 insertions(+), 28 deletions(-) rename status/{status.ino => status.cpp} (84%) diff --git a/Makefile b/Makefile index 43f7f4f..d74b3d5 100644 --- a/Makefile +++ b/Makefile @@ -1,22 +1,26 @@ -SRC:=$(shell find src -regex '.*\.c') +SRC:=$(shell find status -regex '.*\.cpp') OBJ:=$(patsubst %,%.o,$(SRC)) DEP:=$(patsubst %,%.d,$(SRC)) CC?=avr-gcc -CFLAGS?= -O2 -ggdb -std=gnu11 -fomit-frame-pointer -fmerge-all-constants\ +CFLAGS?= -O2 -ggdb -std=gnu++11 -fomit-frame-pointer -fmerge-all-constants\ -faggressive-loop-optimizations -finline-functions -funsafe-loop-optimizations\ --ffreestanding -Wlogical-op -Wdouble-promotion -Wformat -Winit-self -Wnormalized\ +-ffreestanding -Wlogical-op -Wdouble-promotion -Wformat -Winit-self\ -Wmissing-include-dirs -Wswitch-default -Wpadded -Wswitch-enum -Wall\ --Wunused -Winline -Wuninitialized -Wstrict-overflow -Wpointer-sign\ --Wfloat-equal -Wstack-protector -Wtraditional-conversion -Wundef -Wvla\ --Wdeclaration-after-statement -Wshadow -Wcast-align -Wpedantic -Wextra\ --Wpointer-arith -Wbad-function-cast -Wwrite-strings -Wtrampolines -Wpacked\ --Wconversion -Wdate-time -Waggregate-return -Wstrict-prototypes\ --Wold-style-definition -Wmissing-prototypes -Wvector-operation-performance\ --Wredundant-decls -Wnested-externs -Wlong-long -Wvariadic-macros\ +-Wunused -Winline -Wuninitialized -Wstrict-overflow\ +-Wfloat-equal -Wstack-protector -Wundef -Wvla\ +-Wshadow -Wcast-align -Wpedantic -Wextra\ +-Wpointer-arith -Wwrite-strings -Wtrampolines -Wpacked\ +-Wconversion -Wdate-time -Waggregate-return\ +-Wvector-operation-performance\ +-Wredundant-decls -Wlong-long -Wvariadic-macros\ -Wdisabled-optimization -Wmissing-declarations -Wunsafe-loop-optimizations\ --Wunsuffixed-float-constants -pipe -Werror +-pipe -Werror -fno-exceptions -fno-rtti\ +-I/usr/share/arduino/hardware/arduino/cores/arduino\ +-I/usr/share/arduino/hardware/arduino/variants/micro\ +-I/usr/lib/avr/include/\ +-DF_CPU=16000000L -MMD -DUSB_VID=0x2341 -DUSB_PID=0x8037 -DARDUINO=105 -D__PROG_TYPES_COMPAT__ -mmcu=atmega32u4 ARDUINO?= PROGRAMMER?= diff --git a/status/status.ino b/status/status.cpp similarity index 84% rename from status/status.ino rename to status/status.cpp index 66ffc78..5ef8e79 100644 --- a/status/status.ino +++ b/status/status.cpp @@ -1,13 +1,23 @@ -#include +#include +#include +#include "Arduino.h" + +void setup(); +void testLeds(); +void loop(); +void changeStateTo(char state_new); +bool transition(); +void sendState(); +unsigned long calcStateTime(); /* * es gibt folgende Zustände: * 0 - Aus * 1 - An, aber auf dem weg zu aus * 2 - An */ -#define STATE_OFF 3 -#define STATE_HALF 1 -#define STATE_ON 2 +constexpr char STATE_OFF = 3; +constexpr char STATE_HALF = 1; +constexpr char STATE_ON = 2; /* * Zeit wie lange in einem Zustände verharrt werden soll @@ -15,19 +25,19 @@ * TIME_HALF - Zeitspanne von Zustand 2 bis Wechsel zu Zustand 1 * TIME_OFF - Zeitspanne von Zustand 2 bis Wechsel zu Zustand 0 */ -#define TIME_HALF 5400000 // 1,5h -#define TIME_OFF 7200000 // 2h +constexpr int TIME_HALF = 5400000; // 1,5h +constexpr int TIME_OFF = 7200000; // 2h // Ein-/Ausgänge Bezeichnen -const int BTN_ON = 2; // Einschalter -const int BTN_OFF = 3; // Ausschalter -const int LED_G = 9; // grüne LED -const int LED_Y = 8; // gelbe LED -const int LED_R = 7; // rote LED +constexpr int BTN_ON = 2; // Einschalter +constexpr int BTN_OFF = 3; // Ausschalter +constexpr int LED_G = 9; // grüne LED +constexpr int LED_Y = 8; // gelbe LED +constexpr int LED_R = 7; // rote LED // hier wird der aktuelle und vorherige Zustand gespeichert -byte state_current = NULL; -byte state_previous = NULL; +char state_current = STATE_OFF; +char state_previous = STATE_OFF; // hier wird der Beginn des aktuellen Zustand gespeichert in Millisekunden nach Uptime. unsigned long stateBegan; @@ -37,7 +47,7 @@ class Debounce { public: Debounce(int pin); - boolean update(); + bool update(); int read(); private: int _pin; @@ -70,14 +80,14 @@ void testLeds() { } // wechselt zu neuen Zustand -void changeStateTo(byte state_new) { +void changeStateTo(char state_new) { state_previous = state_current; state_current = state_new; transition(); } // behandelt die Zustandübergänge -boolean transition() { +bool transition() { if (state_previous == STATE_OFF && state_current == STATE_ON) { digitalWrite(LED_R, LOW); digitalWrite(LED_G, HIGH); @@ -172,7 +182,7 @@ Debounce::Debounce(int pin) this->_state = LOW; this->_delay = 50; } -boolean Debounce::update() +bool Debounce::update() { if (millis() - this->_time >= this->_delay) { int reading = digitalRead(this->_pin); From 5848da7f24662e4cd3420baf2880329194dd27fe Mon Sep 17 00:00:00 2001 From: chuckthegecko <32848614+chuckthegecko@users.noreply.github.com> Date: Mon, 4 Jun 2018 18:54:20 +0200 Subject: [PATCH 5/5] Fixed link in readme.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6293943..8f87533 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ hackerspace-status-arduino ========================== -see https://www.krautspace.de/hswiki:projekte:elektronikrunde:status_anzeige +see https://kraut.space/hswiki:projekte:2014:raumstatus_anzeige