Files
Blinds_XIAO/src/main.cpp

95 lines
2.2 KiB
C++
Raw Normal View History

2025-11-28 18:26:32 -06:00
#include <driver/gptimer.h>
#include "servo.hpp"
2025-11-28 18:26:32 -06:00
#include "defines.h"
#include "nvs_flash.h"
#include "NimBLEDevice.h"
#include "WiFi.hpp"
#include "setup.hpp"
2025-12-23 17:21:44 -06:00
#include "socketIO.hpp"
#include "encoder.hpp"
#include "calibration.hpp"
// Global encoder instances
Encoder topEnc(ENCODER_PIN_A, ENCODER_PIN_B);
Encoder bottomEnc(InputEnc_PIN_A, InputEnc_PIN_B);
// Global calibration instance
Calibration calib;
2025-11-28 18:26:32 -06:00
void mainApp() {
2025-12-23 17:21:44 -06:00
printf("Hello ");
esp_err_t ret = nvs_flash_init(); // change to secure init logic soon!!
2025-11-28 18:26:32 -06:00
// 2. If NVS is full or corrupt (common after flashing new code), erase and retry
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
2025-11-28 18:26:32 -06:00
}
ESP_ERROR_CHECK(ret);
bmWiFi.init();
calib.init();
2025-12-28 15:31:20 -06:00
// Initialize encoders
topEnc.init();
bottomEnc.init();
servoInit(bottomEnc, topEnc);
2025-11-28 18:26:32 -06:00
setupLoop();
2025-12-23 17:21:44 -06:00
statusResolved = false;
int32_t prevCount = topEnc.getCount();
// Main loop
2025-11-28 18:26:32 -06:00
while (1) {
// websocket disconnect/reconnect handling
if (statusResolved) {
if (!connected) {
printf("Disconnected! Beginning setup loop.\n");
stopSocketIO();
setupLoop();
}
else printf("Reconnected!\n");
statusResolved = false;
}
if (clearCalibFlag) {
calib.clearCalibrated();
emitCalibStatus(false);
clearCalibFlag = false;
}
if (savePosFlag) {
servoSavePos();
savePosFlag = false;
// Send position update to server
uint8_t currentAppPos = calib.convertToAppPos(topEnc.getCount());
emitPosHit(currentAppPos);
printf("Sent pos_hit: position %d\n", currentAppPos);
}
vTaskDelay(pdMS_TO_TICKS(100));
2025-11-28 18:26:32 -06:00
}
}
void encoderTest() {
2025-12-28 15:31:20 -06:00
// Create encoder instance
Encoder encoder(ENCODER_PIN_A, ENCODER_PIN_B);
encoder.init();
2025-12-28 15:31:20 -06:00
int32_t prevCount = encoder.getCount();
while (1) {
2025-12-28 15:31:20 -06:00
int32_t currentCount = encoder.getCount();
if (currentCount != prevCount) {
prevCount = currentCount;
printf("Encoder Pos: %d\n", prevCount);
}
vTaskDelay(pdMS_TO_TICKS(100));
}
}
extern "C" void app_main() {
mainApp();
// encoderTest();
2025-11-28 18:26:32 -06:00
}