forked from harbaum/Arduboy2
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Esp8266Test.ino
144 lines (102 loc) · 3 KB
/
Esp8266Test.ino
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/*
a little test for the esp8266
*/
#include "Arduboy2.h"
#ifdef ESP8266
#define I2C_SDA D2
#define I2C_SCL D1
SSD1306Brzo oled(OLED_I2C_ADRESS, I2C_SDA, I2C_SCL);
#define MY_BUTTON_A D0
#define MY_BUTTON_B D4
#define MY_BUTTON_UP D6
#define MY_BUTTON_DOWN D7
#define MY_BUTTON_LEFT D5
#define MY_BUTTON_RIGHT D8
#endif
// Make an instance of arduboy used for many functions
Arduboy2 arduboy;
// some variables to count the frames pro seconde
uint8_t framesNow = 0;
uint8_t framesCurrent = 0;
uint8_t secondsNow = 0;
uint8_t secondsCurrent = -1;
// returns the frames displayed in the last second
uint8_t getFramesPerSecond() {
// get the current second
secondsNow = millis() / 1000;
if (secondsNow != secondsCurrent) {
// to reset only with every new second
secondsCurrent = secondsNow;
// save the last frames per second
framesCurrent = framesNow;
// reset the counter
framesNow = 0;
} else {
// count
framesNow++;
}
return framesCurrent;
}
#ifdef ESP8266
void getButtons() {
uint8_t buttons = 0;
if (digitalRead(MY_BUTTON_A))
buttons |= A_BUTTON;
if (digitalRead(MY_BUTTON_B))
buttons |= B_BUTTON;
if (digitalRead(MY_BUTTON_UP))
buttons |= UP_BUTTON;
if (digitalRead(MY_BUTTON_DOWN))
buttons |= DOWN_BUTTON;
if (digitalRead(MY_BUTTON_LEFT))
buttons |= LEFT_BUTTON;
if (digitalRead(MY_BUTTON_RIGHT))
buttons |= RIGHT_BUTTON;
arduboy.setExternalButtons(buttons);
}
#endif
void setup() {
#ifdef ESP8266
arduboy.setExternalButtonsHandler(getButtons);
#endif
// not sure if this is necessary
pinMode(MY_BUTTON_A, INPUT);
pinMode(MY_BUTTON_B, INPUT);
pinMode(MY_BUTTON_UP, INPUT);
pinMode(MY_BUTTON_DOWN, INPUT);
pinMode(MY_BUTTON_LEFT, INPUT);
pinMode(MY_BUTTON_RIGHT, INPUT);
arduboy.begin();
// set impossilbe high frame rate for max frames
arduboy.setFrameRate(1000);
}
void printPressedButtonAt(uint8_t yPos, String buttonName) {
arduboy.setCursor(20, yPos);
arduboy.print(buttonName + " Pressed");
}
void loop() {
if (!(arduboy.nextFrame()))
return;
// we clear our screen to black
arduboy.clear();
// need to change the screen because oled library updates only changed areas
if (arduboy.everyXFrames(2))
arduboy.fillScreen(WHITE);
arduboy.setCursor(0, 0);
arduboy.print(F("ESP8266 Test "));
arduboy.print(getFramesPerSecond());
// print buttons
if (arduboy.pressed(A_BUTTON))
printPressedButtonAt(9 * 1, "A");
if (arduboy.pressed(B_BUTTON))
printPressedButtonAt(9 * 2, "B");
if (arduboy.pressed(UP_BUTTON))
printPressedButtonAt(9 * 3, "UP");
if (arduboy.pressed(DOWN_BUTTON))
printPressedButtonAt(9 * 4, "DOWN");
if (arduboy.pressed(LEFT_BUTTON))
printPressedButtonAt(9 * 3, "LEFT");
if (arduboy.pressed(RIGHT_BUTTON))
printPressedButtonAt(9 * 4, "RIGHT");
arduboy.display();
}