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
4250void 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
6068void 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
6977uint8_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 =====================
8391void M5Stack::setWakeupButton (uint8_t button) {
84- _wakeupPin = button;
92+ _wakeupPin = button;
8593}
8694
8795void 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
0 commit comments