Skip to content

Commit a04ff4a

Browse files
committed
Correct init once
1 parent 64fc369 commit a04ff4a

File tree

2 files changed

+82
-80
lines changed

2 files changed

+82
-80
lines changed

src/M5Stack.cpp

Lines changed: 78 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -3,51 +3,59 @@
33

44
#include "M5Stack.h"
55

6-
void M5Stack::begin(bool LCDEnable, bool SDEnable) {
7-
8-
// UART
9-
Serial.begin(115200);
10-
Serial.flush();
11-
Serial.print("M5Stack initializing...");
12-
13-
// I2C Startup BUG?
14-
// pinMode(SCL, OUTPUT);
15-
// digitalWrite(SCL, 1);
16-
17-
// TONE
18-
Speaker.begin();
19-
20-
// Setup the button with an internal pull-up
21-
pinMode(BUTTON_A_PIN, INPUT_PULLUP);
22-
pinMode(BUTTON_B_PIN, INPUT_PULLUP);
23-
pinMode(BUTTON_C_PIN, INPUT_PULLUP);
24-
25-
// M5 LCD INITs
26-
if (LCDEnable) Lcd.begin();
27-
28-
// TF Card
29-
if (SDEnable) SD.begin(TFCARD_CS_PIN, SPI, 40000000);
30-
31-
// Set wakeup button
32-
setWakeupButton(BUTTON_A_PIN);
33-
34-
// MPU9250
35-
#ifdef MPU9250_INSDE
36-
Wire.begin();
37-
#endif
38-
39-
Serial.println("OK");
6+
M5Stack::M5Stack() : isInited(0) {
7+
8+
}
9+
10+
void M5Stack::begin(bool LCDEnable, bool SDEnable, bool SerialEnable) {
11+
12+
// Correct init once
13+
if (isInited) return;
14+
else isInited = true;
15+
16+
// UART
17+
if (SerialEnable) {
18+
Serial.begin(115200);
19+
Serial.flush();
20+
delay(50);
21+
Serial.print("M5Stack initializing...");
22+
}
23+
24+
// LCD INIT
25+
if (LCDEnable) {
26+
Lcd.begin();
27+
}
28+
29+
// TF Card
30+
if (SDEnable) {
31+
SD.begin(TFCARD_CS_PIN, SPI, 40000000);
32+
}
33+
34+
// TONE
35+
Speaker.begin();
36+
37+
// Set wakeup button
38+
setWakeupButton(BUTTON_A_PIN);
39+
40+
// I2C init
41+
#ifdef M5STACK_FIRE
42+
Wire.begin(21, 22);
43+
#endif
44+
45+
if (SerialEnable) {
46+
Serial.println("OK");
47+
}
4048
}
4149

4250
void M5Stack::update() {
4351

44-
//Button update
45-
BtnA.read();
46-
BtnB.read();
47-
BtnC.read();
52+
//Button update
53+
BtnA.read();
54+
BtnB.read();
55+
BtnC.read();
4856

49-
//Speaker update
50-
Speaker.update();
57+
//Speaker update
58+
Speaker.update();
5159
}
5260

5361
#ifdef M5STACK_FIRE
@@ -59,52 +67,49 @@ void M5Stack::update() {
5967

6068
void M5Stack::setPowerBoostKeepOn(bool en)
6169
{
62-
Wire.beginTransmission(IP5306_ADDR);
63-
Wire.write(IP5306_REG_SYS_CTL0);
64-
if (en) Wire.write(0x37); // Set bit1: 1 enable 0 disable boost keep on
65-
else Wire.write(0x35); // 0x37 is default reg value
66-
Wire.endTransmission();
70+
Wire.beginTransmission(IP5306_ADDR);
71+
Wire.write(IP5306_REG_SYS_CTL0);
72+
if (en) Wire.write(0x37); // Set bit1: 1 enable 0 disable boost keep on
73+
else Wire.write(0x35); // 0x37 is default reg value
74+
Wire.endTransmission();
6775
}
6876

6977
uint8_t M5Stack::isChargeFull()
7078
{
71-
uint8_t data;
72-
Wire.beginTransmission(IP5306_ADDR);
73-
Wire.write(IP5306_REG_READ1);
74-
Wire.endTransmission(false);
75-
Wire.requestFrom(IP5306_ADDR, 1);
76-
data = Wire.read();
77-
if (data & (1 << CHARGE_FULL_BIT)) return true;
78-
else return false;
79+
uint8_t data;
80+
Wire.beginTransmission(IP5306_ADDR);
81+
Wire.write(IP5306_REG_READ1);
82+
Wire.endTransmission(false);
83+
Wire.requestFrom(IP5306_ADDR, 1);
84+
data = Wire.read();
85+
if (data & (1 << CHARGE_FULL_BIT)) return true;
86+
else return false;
7987
}
8088
#endif
8189

8290
// ================== Low power mode =====================
8391
void M5Stack::setWakeupButton(uint8_t button) {
84-
_wakeupPin = button;
92+
_wakeupPin = button;
8593
}
8694

8795
void M5Stack::powerOFF() {
8896

89-
#ifdef M5STACK_FIRE
90-
// Keep power keep boost on
91-
setPowerBoostKeepOn(true);
92-
#endif
93-
94-
// power off the Lcd
95-
Lcd.setBrightness(0);
96-
Lcd.sleep();
97-
98-
// ESP32 into deep sleep
99-
USE_SERIAL.printf("Enabling EXT0 wakeup on pins GPIO%d\n", _wakeupPin);
100-
esp_sleep_enable_ext0_wakeup((gpio_num_t)_wakeupPin , LOW);
101-
102-
while(digitalRead(_wakeupPin) == LOW) {
103-
delay(10);
104-
}
105-
USE_SERIAL.println("On deep sleep mode.");
106-
esp_deep_sleep_start();
107-
USE_SERIAL.println("On power OFF fail!");
97+
#ifdef M5STACK_FIRE
98+
// Keep power keep boost on
99+
setPowerBoostKeepOn(true);
100+
#endif
101+
102+
// power off the Lcd
103+
Lcd.setBrightness(0);
104+
Lcd.sleep();
105+
106+
// ESP32 into deep sleep
107+
esp_sleep_enable_ext0_wakeup((gpio_num_t)_wakeupPin , LOW);
108+
109+
while(digitalRead(_wakeupPin) == LOW) {
110+
delay(10);
111+
}
112+
esp_deep_sleep_start();
108113
}
109114

110115

src/M5Stack.h

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -95,18 +95,14 @@
9595
#include "utility/Config.h"
9696
#include "utility/Button.h"
9797
#include "utility/Speaker.h"
98-
// #include "utility/M5Timer.h"
99-
100-
#ifdef MPU9250_INSDE
101-
#include "utility/MPU9250.h"
102-
#include "utility/quaternionFilters.h"
103-
#endif
10498

10599

106100
class M5Stack {
107101

108102
public:
109-
void begin(bool LCDEnable=true, bool SDEnable=true);
103+
M5Stack();
104+
105+
void begin(bool LCDEnable=true, bool SDEnable=true, bool SerialEnable=true);
110106
void update();
111107

112108
#ifdef M5STACK_FIRE
@@ -139,6 +135,7 @@ class M5Stack {
139135
#endif
140136

141137
private:
138+
bool isInited;
142139
uint8_t _wakeupPin;
143140
};
144141

0 commit comments

Comments
 (0)