#include "Scale.h"
#include "Display.h"
#include <Arduino.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
#include <WiFi.h>
#include <ESPmDNS.h>
#include <WiFiUdp.h>
#include <ArduinoOTA.h>
Display display(64, 64);
Scale scale(64, 64);
// // Wi-Fi 設置
// const char *ssid = "Galerie Grand Siecle";
// const char *password = "0225785630";
// 任務通知變量
TaskHandle_t mainTaskHandle = NULL;
// 任務處理函數:測重
void measureTask(void *parameter)
{
for (;;)
{
scale.measure();
xTaskNotifyGive(mainTaskHandle);
vTaskDelay(100 / portTICK_PERIOD_MS); // 每100ms測量一次
}
}
void setup()
{
Serial.begin(115200);
scale.begin();
display.begin();
// // 連接到Wi-Fi
// Serial.println("Booting");
// WiFi.mode(WIFI_STA);
// WiFi.begin(ssid, password);
// while (WiFi.waitForConnectResult() != WL_CONNECTED)
// {
// Serial.println("Connection Failed! Rebooting...");
// delay(5000);
// ESP.restart();
// }
// Serial.println("Connected to WiFi");
// // 初始化 Arduino OTA
// ArduinoOTA.onStart([]() {
// String type;
// if (ArduinoOTA.getCommand() == U_FLASH) {
// type = "sketch";
// } else { // U_SPIFFS
// type = "filesystem";
// }
// Serial.println("Start updating " + type);
// });
// ArduinoOTA.onEnd([]() {
// Serial.println("\nEnd");
// });
// ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
// Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
// });
// ArduinoOTA.onError([](ota_error_t error) {
// Serial.printf("Error[%u]: ", error);
// if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
// else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
// else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
// else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
// else if (error == OTA_END_ERROR) Serial.println("End Failed");
// });
// ArduinoOTA.begin();
// 設置主執行緒的任務句柄
mainTaskHandle = xTaskGetCurrentTaskHandle();
// 創建測重的任務處理執行緒
xTaskCreatePinnedToCore(
measureTask, // 任務函數
"MeasureTask", // 任務名稱
2048, // 任務堆疊大小(以字節為單位)
NULL, // 任務參數
1, // 任務優先級
NULL, // 任務句柄
1 // 指定到核心1
);
}
void loop()
{
// ArduinoOTA.handle(); // 處理OTA請求
// 等待測重任務的通知
ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
// 在主執行緒處理繪圖
int *scaleXY = scale.getScaleXY();
display.refreshScreen(scaleXY[0], scaleXY[1]);
}
Loading
grove-oled-sh1107
grove-oled-sh1107