-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdisplay.go
111 lines (89 loc) · 2.95 KB
/
display.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package main
import (
"fmt"
"image/color"
"machine"
"time"
"github.com/alexjomin/victron/vedirect"
"tinygo.org/x/drivers/ssd1306"
"tinygo.org/x/tinyfont"
"tinygo.org/x/tinyfont/freesans"
"tinygo.org/x/tinyfont/proggy"
)
var (
white = color.RGBA{255, 255, 255, 255}
out = make([]byte, 5)
)
func incPage() {
if currentPage > numberOfpages-1 {
currentPage = 0
} else {
currentPage += 1
}
}
func initDisplay() (display ssd1306.Device, err error) {
err = machine.I2C0.Configure(machine.I2CConfig{
Frequency: machine.TWI_FREQ_400KHZ,
})
if err != nil {
return
}
display = ssd1306.NewI2C(machine.I2C0)
display.Configure(ssd1306.Config{
Address: 0x3C,
Width: 128,
Height: 64,
})
display.ClearDisplay()
return display, err
}
func welcomePage(display *ssd1306.Device) {
display.SetBuffer(loading)
tinyfont.WriteLine(display, &freesans.Regular9pt7b, 32, 16, "Loading", color.RGBA{255, 255, 255, 255})
tinyfont.WriteLine(display, &proggy.TinySZ8pt7b, 10, 55, "Captain Gantu v1.0", white)
display.Display()
time.Sleep(time.Second * 4)
currentPage = 4
displayPage()
}
func displayPage() {
display.ClearBuffer()
if currentPage == 0 {
display.Command(ssd1306.DISPLAYON)
// The charger is not charging
if state.OperationState == vedirect.StateFloat {
display.SetBuffer(charged)
tinyfont.WriteLine(&display, &freesans.Regular9pt7b, 50, 36, state.OperationState, white)
} else {
display.SetBuffer(inCharge)
tinyfont.WriteLine(&display, &freesans.Regular9pt7b, 42, 28, state.OperationState, white)
bc := fmt.Sprintf("%d A", state.BatteryCurrent)
tinyfont.WriteLine(&display, &proggy.TinySZ8pt7b, 43, 42, bc, white)
}
} else if currentPage == 1 {
display.SetBuffer(sun)
pv := vedirect.FormatVoltage(state.PanelVoltage)
pw := vedirect.FormatPower(state.PanelPower)
tinyfont.WriteLine(&display, &freesans.Regular9pt7b, 50, 25, pv, white)
tinyfont.WriteLine(&display, &freesans.Regular9pt7b, 50, 50, pw, white)
} else if currentPage == 2 {
display.SetBuffer(battery)
bv := vedirect.FormatVoltage(state.BatteryVoltage)
bvmin := "Min: " + vedirect.FormatVoltage(state.MinBatteryVoltage)
bvmax := "Max: " + vedirect.FormatVoltage(state.MaxBatteryVoltage)
tinyfont.WriteLine(&display, &freesans.Regular9pt7b, 50, 25, bv, white)
tinyfont.WriteLine(&display, &proggy.TinySZ8pt7b, 50, 40, bvmin, white)
tinyfont.WriteLine(&display, &proggy.TinySZ8pt7b, 50, 50, bvmax, white)
} else if currentPage == 3 {
display.SetBuffer(plug)
lc := fmt.Sprintf("%d A - %d W", state.LoadCurrent, state.InstantaneousPower)
yp := fmt.Sprintf("Today: %d W", state.YieldToday)
mp := fmt.Sprintf("Max: %d W", state.MaxPower)
tinyfont.WriteLine(&display, &freesans.Regular9pt7b, 50, 25, lc, white)
tinyfont.WriteLine(&display, &proggy.TinySZ8pt7b, 50, 40, yp, white)
tinyfont.WriteLine(&display, &proggy.TinySZ8pt7b, 50, 50, mp, white)
} else if currentPage == 4 {
display.Command(ssd1306.DISPLAYOFF)
}
display.Display()
}