Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
Dashboard
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Model registry
Monitor
Service Desk
Analyze
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
egorguslyan
Dashboard
Commits
7a379b81
Commit
7a379b81
authored
3 years ago
by
egorguslyan
Browse files
Options
Downloads
Patches
Plain Diff
animations
parent
03e622b4
No related branches found
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
Dashboard/Dashboard.ino
+32
-27
32 additions, 27 deletions
Dashboard/Dashboard.ino
Dashboard/configScreens.h
+4
-2
4 additions, 2 deletions
Dashboard/configScreens.h
Dashboard/screens.h
+27
-3
27 additions, 3 deletions
Dashboard/screens.h
with
63 additions
and
32 deletions
Dashboard/Dashboard.ino
+
32
−
27
View file @
7a379b81
...
...
@@ -31,7 +31,7 @@
/*************Marcos*************/
#define timer(tim, del) if(millis() - (tim) > (del))
#define numLeds
(WIDTH * HEIGHT)
#define numLeds(WIDTH * HEIGHT)
/********************************/
// Unified arguments for screen functions
...
...
@@ -45,13 +45,24 @@ typedef union
// Screen entity with transition table
typedef
struct
{
void
(
*
func
)(
const
Arg
*
);
void
(
*
func
)(
Arg
*
);
const
Arg
arg
;
void
(
*
funcPrepare
)(
void
);
const
uint8_t
nextScreen0
;
const
uint8_t
nextScreen1
;
const
uint8_t
nextScreen2
;
}
Screen
;
// Animation types
enum
ANIMATIONS
{
NO_ANIMATION
,
SHIFT_LEFT
,
SHIFT_RIGHT
,
SHIFT_UP
,
SHIFT_DOWN
,
};
// It will be stored in EEPROM with a special key
enum
PANEL_ORIENTATION
{
...
...
@@ -61,12 +72,16 @@ enum PANEL_ORIENTATION
};
const
uint8_t
special_key
=
0b11011100
;
// Just a random number (it's actually the voltage from the outlet)
#include
"config.h"
// Structure for all global variables
struct
{
uint8_t
panelOrientation
:
2
;
// Swipe panel orientation
uint8_t
currentScreen
;
uint8_t
currentState
;
uint8_t
animation
:
4
;
uint8_t
prepare
:
2
;
uint64_t
timer
;
uint8_t
tapLeft
:
1
;
uint8_t
tapRight
:
1
;
...
...
@@ -74,10 +89,10 @@ struct
uint8_t
swipeRight
:
1
;
uint8_t
holdLeft
:
1
;
uint8_t
holdRight
:
1
;
mData
leds
[
numLeds
];
}
globalVars
;
#include
"config.h"
microLED
<
numLeds
,
LEDsPin
,
MLED_NO_CLOCK
,
LED_WS2812
,
ORDER_GRB
,
CLI_AVER
/*, SAVE_MILLIS*/
>
matrix
(
WIDTH
,
HEIGHT
,
ZIGZAG
,
RIGHT_TOP
,
DIR_LEFT
);
microLED
<
numLeds
,
LEDsPin
,
MLED_NO_CLOCK
,
LED_WS2812
,
ORDER_GRB
,
CLI_AVER
,
SAVE_MILLIS
>
matrix
(
WIDTH
,
HEIGHT
,
ZIGZAG
,
RIGHT_TOP
,
DIR_LEFT
);
#include
"textbox.h"
textbox
tb
;
#include
"configScreens.h"
...
...
@@ -105,6 +120,9 @@ void setup()
// Set start screen
globalVars
.
currentScreen
=
startWith
;
// Start without animation
globalVars
.
animation
=
NO_ANIMATION
;
globalVars
.
prepare
=
true
;
delay
(
500
);
}
...
...
@@ -125,30 +143,17 @@ void loop()
Serial
.
end
();
}
static
uint64_t
timer0
=
0
;
timer
(
timer0
,
3000
)
switch
(
prepare
)
{
timer0
=
millis
();
uint16_t
CO2
=
co2
.
getPPM
();
Serial
.
print
(
CO2
);
Serial
.
print
(
" "
);
Serial
.
print
(
digitalRead
(
LBTN
));
Serial
.
print
(
" "
);
Serial
.
println
(
digitalRead
(
RBTN
));
CO2
=
map
(
CO2
,
300
,
1500
,
0
,
9
);
for
(
uint8_t
i
=
0
;
i
<
9
;
i
++
)
{
matrix
.
set
(
matrix
.
getPixNumber
(
15
,
i
),
mHEX
(
0
));
}
for
(
uint8_t
i
=
0
;
i
<
CO2
;
i
++
)
{
matrix
.
set
(
15
,
i
,
mHEX
(
0x0aa100
));
}
case
true
:
screens
[
globalVars
.
currentScreen
].
funcPrepare
();
case
2
:
animate
();
break
;
case
false
:
screens
[
globalVars
.
currentScreen
].
func
(
screens
[
globalVars
.
currentScreen
].
arg
);
break
;
}
static
uint64_t
timer1
=
0
;
timer
(
timer1
,
99
)
if
(
tb
.
render
())
timer1
=
millis
();
matrix
.
show
();
}
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Dashboard/configScreens.h
+
4
−
2
View file @
7a379b81
...
...
@@ -4,8 +4,10 @@
/* Welcome screen with greetings
Swipe left when prompts to continue (nextScreeen0) */
void
welcome
(
Arg
*
arg
);
void
welcomePrepare
();
/* Main screen with clock and CO2 bar */
void
dashboard
(
Arg
*
arg
);
void
dashboardPrepare
();
// Links
enum
SCREENS
...
...
@@ -18,8 +20,8 @@ enum SCREENS
};
const
Screen
screens
[]
=
{
{
welcome
,
{
.
ui8
=
globalVars
.
panelOrientation
},
SCREEN_DASHBOARD
,
NONE
,
NONE
},
{
dashboard
,
{
.
ui8
=
globalVars
.
panelOrientation
},
SCREEN_DASHBOARD
,
NONE
,
NONE
},
{
welcome
,
{
0
},
welcomePrepare
,
SCREEN_DASHBOARD
,
NONE
,
NONE
},
{
dashboard
,
{
0
},
dashboardPrepare
,
SCREEN_DASHBOARD
,
NONE
,
NONE
},
};
#include
"screens.h"
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Dashboard/screens.h
+
27
−
3
View file @
7a379b81
...
...
@@ -4,6 +4,8 @@
void
unhandle
();
// Change screen
void
changeScreen
(
uint8_t
current
,
uint8_t
next
);
// Animate
void
animate
(
uint16_t
reciprocal_speed
);
void
unhandle
()
{
...
...
@@ -17,16 +19,28 @@ void changeScreen(uint8_t current, uint8_t next)
uint8_t
ns
=
*
(
&
(
screens
[
current
].
nextScreen0
)
+
sizeof
(
uint8_t
)
*
next
);
if
(
ns
==
NONE
)
return
;
globalVars
.
currentScreen
=
ns
;
globalVars
.
timer
=
millis
();
globalVars
.
prepare
=
true
;
}
void
animate
(
uint16_t
reciprocal_speed
)
{
static
uint8_t
counter
=
0
;
timer
(
globalVars
.
timer
,
reciprocal_speed
)
{
globalVars
.
timer
=
millis
();
}
}
void
welcome
(
Arg
*
arg
)
{
const
uint16_t
delayMap
[]
=
{
0
,
50
,
0
,
99
};
const
uint16_t
delayMap
[]
PROGMEM
=
{
0
,
50
,
0
,
99
};
// Local vars
static
uint8_t
counter
=
0
;
if
(
millis
()
-
globalVars
.
timer
>
delayMap
[
globalVars
.
currentState
])
timer
(
globalVars
.
timer
,
(
uint16_t
)
pgm_read_word
(
&
delayMap
[
globalVars
.
currentState
])
)
{
switch
(
globalVars
.
currentState
)
{
...
...
@@ -34,6 +48,7 @@ void welcome(Arg *arg)
case
0
:
if
(
globalVars
.
panelOrientation
!=
PANEL_UNKNOWN
)
{
globalVars
.
animation
=
NO_ANIMATION
;
changeScreen
(
SCREEN_WELCOME
,
0
);
break
;
}
...
...
@@ -66,13 +81,22 @@ void welcome(Arg *arg)
break
;
case
3
:
if
(
tb
.
render
())
globalVars
.
timer
=
millis
();
if
(
globalVars
.
swipeLeft
)
changeScreen
(
SCREEN_WELCOME
,
0
);
if
(
globalVars
.
swipeLeft
)
{
globalVars
.
animation
=
SHIFT_LEFT
;
changeScreen
(
SCREEN_WELCOME
,
0
);
}
break
;
}
unhandle
();
}
}
void
welcomePrepare
()
{
memset
(
globalVars
.
leds
,
mBlack
,
sizeof
(
mData
)
*
numLeds
);
}
void
dashboard
(
Arg
*
arg
)
{
const
uint16_t
delayMap
[]
=
{
50
};
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment