/
nkarbofos
/
PressAutomation
Обзор
Документация
Войти
/
nkarbofos
/
PressAutomation
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
code/PressAutomationCode/src/display/display.cpp
111 строк
2 KB
Nikita
fix: minor fixes, added params to display
25 июн 2026, 13:58
25 июн 2026, 13:58
ab77611
Код
Авторство
О чём код?
#include <string> #include "display.h" #include <Arduino.h> #include <Wire.h> #include "app_state.h" #include "config.h" float v_prev = -1; float rpm_prev = -1; LiquidCrystal_I2C lcd(LCD_ADDRESS, 20, 4); float CalcUS(float speedPerSec) { float rpm = (speedPerSec * 60.0f * R2_MM) / (R1_MM * L_MM); return 60000000.0f / (rpm * STEPS_PER_REV); } static float calculateMotorRpm() { return 60000000 / (currentSpeedUs * STEPS_PER_REV); } static float calculatePressSpeed() { float rpm = calculateMotorRpm(); return (rpm * R1_MM * L_MM) / (60.0 * R2_MM); } void ClearValue(int row) { lcd.setCursor(VALUE_IND, row); for (int i = 0; i < DISPLAY_W - VALUE_IND; i++) { lcd.print(' '); } lcd.setCursor(VALUE_IND, row); } void updatePressSpeedDisplay() { float v = calculatePressSpeed(); // float v = std::round(v_raw * 10.0) / 10.0; if(v_prev != v) { v_prev = v; ClearValue(1); lcd.print(v, 1); lcd.print(" mm/s"); } } void updateMotorSpeedDisplay() { float rpm = calculateMotorRpm(); // float rpm = std::round(rpm_raw / 5.0) * 5.0; if(rpm_prev != rpm) { rpm_prev = rpm; ClearValue(2); lcd.print(rpm, 0); lcd.print(" rpm"); } } void updateStatus(const char* status) { ClearValue(3); lcd.print(status); } void drawStaticElements() { lcd.clear(); lcd.setCursor(0, 0); lcd.print("PRESS AUTOMATION"); lcd.setCursor(0, 1); lcd.print("Speed:"); lcd.setCursor(0, 2); lcd.print("Motor:"); lcd.setCursor(0, 3); lcd.print("Status:"); } void drawStartingScreen() { lcd.clear(); lcd.setCursor(4, 1); lcd.print("SYSTEM READY"); } void updateDisplayIfNeeded() { static unsigned long lastDisplayUpdate = 0; unsigned long now = millis(); if (now - lastDisplayUpdate >= DISPLAY_UPD) { lastDisplayUpdate = now; updatePressSpeedDisplay(); updateMotorSpeedDisplay(); } } void initDisplay() { Wire.begin(I2C_SDA, I2C_SCL); lcd.init(); lcd.backlight(); Serial.println("LCD 2004A initialized"); drawStartingScreen(); delay(2000); drawStaticElements(); updatePressSpeedDisplay(); updateMotorSpeedDisplay(); updateStatus("OFF"); }