...
This commit is contained in:
parent
05027acea4
commit
8f597a7eda
1 changed files with 58 additions and 11 deletions
|
@ -29,7 +29,51 @@
|
||||||
#define GRID_SIZE 16
|
#define GRID_SIZE 16
|
||||||
#define CELL_SIZE (SIM_WIDTH/GRID_SIZE)
|
#define CELL_SIZE (SIM_WIDTH/GRID_SIZE)
|
||||||
|
|
||||||
DisplaySSD1306_128x64_I2C display(-1);
|
/**
|
||||||
|
* Class implements SSD1306 128x64 lcd display in 1 bit mode over I2C
|
||||||
|
* overrides default implementation to expose private m_i2c
|
||||||
|
*/
|
||||||
|
class DisplaySSD1306_128x64_I2Cx: public DisplaySSD1306_128x64<InterfaceSSD1306<PlatformI2c>>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* @brief Inits 128x64 lcd display over i2c (based on SSD1306 controller): 1-bit mode.
|
||||||
|
*
|
||||||
|
* Inits 128x64 lcd display over i2c (based on SSD1306 controller): 1-bit mode
|
||||||
|
* @param rstPin pin controlling LCD reset (-1 if not used)
|
||||||
|
* @param config platform i2c configuration. Please refer to SPlatformI2cConfig.
|
||||||
|
*/
|
||||||
|
explicit DisplaySSD1306_128x64_I2Cx(int8_t rstPin, const SPlatformI2cConfig &config = {-1, 0x3C, -1, -1, 0})
|
||||||
|
: DisplaySSD1306_128x64(m_i2c, rstPin)
|
||||||
|
, m_i2c(*this, -1,
|
||||||
|
SPlatformI2cConfig{config.busId, static_cast<uint8_t>(config.addr ?: 0x3C), config.scl, config.sda,
|
||||||
|
config.frequency ?: 400000})
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes SSD1306 lcd in 1-bit mode
|
||||||
|
*/
|
||||||
|
void begin() override;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Closes connection to display
|
||||||
|
*/
|
||||||
|
void end() override;
|
||||||
|
InterfaceSSD1306<PlatformI2c> m_i2c;
|
||||||
|
};
|
||||||
|
void DisplaySSD1306_128x64_I2Cx::begin()
|
||||||
|
{
|
||||||
|
m_i2c.begin();
|
||||||
|
DisplaySSD1306_128x64::begin();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DisplaySSD1306_128x64_I2Cx::end()
|
||||||
|
{
|
||||||
|
DisplaySSD1306_128x64::end();
|
||||||
|
m_i2c.end();
|
||||||
|
}
|
||||||
|
DisplaySSD1306_128x64_I2Cx display(-1);
|
||||||
MPU6050 mpu;
|
MPU6050 mpu;
|
||||||
|
|
||||||
// I2C device found at address 0x3C ! // OLED
|
// I2C device found at address 0x3C ! // OLED
|
||||||
|
@ -92,6 +136,9 @@ void initSerial() {
|
||||||
void initI2C() {
|
void initI2C() {
|
||||||
Wire.begin();
|
Wire.begin();
|
||||||
Wire.setClock(400000);
|
Wire.setClock(400000);
|
||||||
|
display.m_i2c.displayOn();
|
||||||
|
display.m_i2c.setContrast(0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -131,24 +178,22 @@ void mpuMotionDetectMode() {
|
||||||
// set up MPU
|
// set up MPU
|
||||||
// docs recommend waiting for at least 50ms after reset
|
// docs recommend waiting for at least 50ms after reset
|
||||||
mpu.reset();
|
mpu.reset();
|
||||||
delay(100);
|
lcd_delay(100);
|
||||||
mpu.resetSensors();
|
mpu.resetSensors();
|
||||||
delay(100);
|
lcd_delay(100);
|
||||||
mpu.setAccelerometerPowerOnDelay(2); //max 3
|
mpu.setAccelerometerPowerOnDelay(2); //max 3
|
||||||
mpu.setTempSensorEnabled(false);
|
mpu.setTempSensorEnabled(false);
|
||||||
// disable fifo when sleeping
|
// disable fifo when sleeping
|
||||||
mpu.setFIFOEnabled(false);
|
mpu.setFIFOEnabled(false);
|
||||||
// low pass filter, 42Hz
|
// low pass filter, 42Hz
|
||||||
mpu.setDLPFMode(MPU6050_DLPF_BW_42);
|
mpu.setDLPFMode(MPU6050_DLPF_BW_42);
|
||||||
delay(10);
|
lcd_delay(10);
|
||||||
// high pass filter, from current value (should not be done while in motion)
|
// high pass filter, from current value (should not be done while in motion)
|
||||||
mpu.setDHPFMode(MPU6050_DHPF_HOLD);
|
mpu.setDHPFMode(MPU6050_DHPF_HOLD);
|
||||||
|
|
||||||
// mpu.setIntEnabled(0);
|
// mpu.setIntEnabled(0);
|
||||||
// set interrupt to be high when motion detected
|
// set interrupt to be high when motion detected
|
||||||
mpu.setInterruptMode(MPU6050_INTMODE_ACTIVEHIGH);
|
mpu.setInterruptMode(MPU6050_INTMODE_ACTIVELOW);
|
||||||
// apparently this is more accurate
|
|
||||||
// See https://github.com/ElectronicCats/mpu6050/blob/master/src/MPU6050.cpp
|
|
||||||
mpu.setClockSource(MPU6050_CLOCK_INTERNAL);
|
mpu.setClockSource(MPU6050_CLOCK_INTERNAL);
|
||||||
// lowest accel sens
|
// lowest accel sens
|
||||||
mpu.setFullScaleAccelRange(MPU6050_ACCEL_FS_2);
|
mpu.setFullScaleAccelRange(MPU6050_ACCEL_FS_2);
|
||||||
|
@ -165,12 +210,12 @@ void mpuMotionDetectMode() {
|
||||||
// mpu.setZAccelOffset(7687);
|
// mpu.setZAccelOffset(7687);
|
||||||
// level of movement required to trigger interrupt
|
// level of movement required to trigger interrupt
|
||||||
// recommended default is 20
|
// recommended default is 20
|
||||||
mpu.setMotionDetectionThreshold(20);
|
mpu.setMotionDetectionThreshold(1);
|
||||||
// number of milliseconds that the sensor must be at the threshold
|
// number of milliseconds that the sensor must be at the threshold
|
||||||
mpu.setMotionDetectionDuration(2);
|
mpu.setMotionDetectionDuration(1);
|
||||||
|
|
||||||
// enable only motion detection interrupt
|
// enable only motion detection interrupt
|
||||||
mpu.setIntEnabled(1 << MPU6050_INTERRUPT_MOT_BIT);
|
mpu.setIntEnabled((1 << MPU6050_INTERRUPT_MOT_BIT) | (1 << MPU6050_INTERRUPT_FF_BIT));
|
||||||
mpuSetInterruptMode();
|
mpuSetInterruptMode();
|
||||||
// ensure the accellerometers are on
|
// ensure the accellerometers are on
|
||||||
// mpu.setStandbyXAccelEnabled(false);
|
// mpu.setStandbyXAccelEnabled(false);
|
||||||
|
@ -421,6 +466,7 @@ void sleepTimer() {
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
Serial.println(F("Going to sleep"));
|
Serial.println(F("Going to sleep"));
|
||||||
#endif
|
#endif
|
||||||
|
display.m_i2c.displayOff();
|
||||||
// detach interrupt
|
// detach interrupt
|
||||||
detachInterrupt(digitalPinToInterrupt(EXT0_PIN));
|
detachInterrupt(digitalPinToInterrupt(EXT0_PIN));
|
||||||
// sleep
|
// sleep
|
||||||
|
@ -428,7 +474,8 @@ void sleepTimer() {
|
||||||
// clear any pending interrupts
|
// clear any pending interrupts
|
||||||
mpu.getIntStatus();
|
mpu.getIntStatus();
|
||||||
// enable wakeup from ext0
|
// enable wakeup from ext0
|
||||||
esp_sleep_enable_ext0_wakeup(GPIO_NUM_34, 1);
|
esp_sleep_enable_ext0_wakeup(GPIO_NUM_34, 0);
|
||||||
|
lcd_delay(100);
|
||||||
esp_deep_sleep_start();
|
esp_deep_sleep_start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue