完成初版设计
This commit is contained in:
parent
c9186cda7b
commit
370206729a
188
src/main.cpp
188
src/main.cpp
|
@ -7,8 +7,8 @@ INA226 ina(Wire);
|
|||
// #include "misakiUTF16FontData.h"
|
||||
#include <LovyanGFX.hpp>
|
||||
// ESP32でLovyanGFXを独自設定で利用する場合の設定例
|
||||
static constexpr int image_width = 100;
|
||||
static constexpr int image_height = 172;
|
||||
static constexpr int image_width = 320;
|
||||
static constexpr int image_height = 130;
|
||||
|
||||
int32_t current;
|
||||
uint16_t current_buf[100];
|
||||
|
@ -289,7 +289,7 @@ float Filter(float PreData, float NewData)
|
|||
void DataProcess(void)
|
||||
{
|
||||
InitialDataV = ina.readBusVoltage();
|
||||
InitialDataI = ina.readShuntCurrent();
|
||||
InitialDataI = ina.readShuntCurrent() - 0.0026f;
|
||||
ProcessedDataV = InitialDataV;
|
||||
ProcessedDataI = abs(InitialDataI);
|
||||
DataPower = ProcessedDataI * ProcessedDataV;
|
||||
|
@ -300,15 +300,27 @@ void DataDisplay(void)
|
|||
{
|
||||
DataProcess();
|
||||
if (ProcessedDataV < 10.0f)
|
||||
lcd.drawFloat(ProcessedDataV, 4, 160, 58);
|
||||
{
|
||||
lcd.setTextColor(0xaa96daU, 0x000000U);
|
||||
lcd.drawFloat(ProcessedDataV, 4, 10, 140);
|
||||
}
|
||||
else
|
||||
lcd.drawFloat(ProcessedDataV, 3, 160, 58);
|
||||
lcd.drawFloat(ProcessedDataI, 4, 160, 116);
|
||||
{
|
||||
lcd.setTextColor(0xaa96daU, 0x000000U);
|
||||
lcd.drawFloat(ProcessedDataV, 3, 10, 140);
|
||||
}
|
||||
lcd.setTextColor(0xfcbad3U, 0x000000U);
|
||||
lcd.drawFloat(ProcessedDataI, 4, 110, 140);
|
||||
if (DataPower < 10.0f)
|
||||
lcd.drawFloat(DataPower, 4, 160, 174);
|
||||
{
|
||||
lcd.setTextColor(0xffffd2U, 0x000000U);
|
||||
lcd.drawFloat(DataPower, 4, 210, 140);
|
||||
}
|
||||
else
|
||||
lcd.drawFloat(DataPower, 3, 160, 174);
|
||||
// Serial.print(DataPower,5);
|
||||
{
|
||||
lcd.setTextColor(0xffffd2U, 0x000000U);
|
||||
lcd.drawFloat(DataPower, 3, 210, 140);
|
||||
}
|
||||
}
|
||||
|
||||
void LCD_BackBuffer_DrawPixel(uint16_t x, uint16_t y, uint16_t color)
|
||||
|
@ -335,13 +347,23 @@ void Graph_DrawCurve(uint16_t *data, uint16_t color)
|
|||
// LCD_BackBuffer_DrawPixel(i, y - 1, color);
|
||||
}
|
||||
}
|
||||
uint32_t number = 0;
|
||||
#include <vector>
|
||||
|
||||
#define LINE_COUNT 1
|
||||
uint32_t number = 0;
|
||||
static std::vector<int> points[LINE_COUNT];
|
||||
static int colors[] = {0xfcbad3U, 0xaa96daU, TFT_BLUE, TFT_CYAN, TFT_MAGENTA, TFT_YELLOW};
|
||||
static int xoffset, yoffset, point_count;
|
||||
|
||||
int getBaseColor(int x, int y)
|
||||
{
|
||||
return ((x ^ y) & 3 || ((x - xoffset) & 31 && y & 31) ? TFT_BLACK : ((!y || x == xoffset) ? TFT_DARKGRAY : TFT_DARKGRAY));
|
||||
}
|
||||
void setup(void)
|
||||
{
|
||||
lcd.init();
|
||||
lcd.startWrite();
|
||||
lcd.fillScreen(0xFFFFFFU);
|
||||
// lcd.startWrite();
|
||||
lcd.fillScreen(0);
|
||||
// drawGradation();
|
||||
|
||||
// lcd.fillScreen(0xFFFFFFU);
|
||||
|
@ -366,50 +388,126 @@ void setup(void)
|
|||
// Display configuration
|
||||
checkConfig();
|
||||
|
||||
lcd.setTextColor(0xFFFFFFU, 0x000000U);
|
||||
lcd.fillScreen(0x000000U);
|
||||
if (lcd.width() < lcd.height())
|
||||
lcd.setRotation(lcd.getRotation() ^ 1);
|
||||
|
||||
lcd.setFont(&fonts::Font4);
|
||||
lcd.setTextDatum(bottom_center);
|
||||
lcd.drawString("V", 180, 50);
|
||||
lcd.drawString("A", 180, 108);
|
||||
lcd.drawString("W", 180, 166);
|
||||
yoffset = image_height >> 1;
|
||||
xoffset = image_width >> 1;
|
||||
point_count = image_width + 1;
|
||||
|
||||
InitialDataV = ina.readBusVoltage();
|
||||
InitialDataI = ina.readShuntCurrent();
|
||||
ProcessedDataV = InitialDataV;
|
||||
ProcessedDataI = InitialDataI;
|
||||
for (int i = 0; i < LINE_COUNT; i++)
|
||||
{
|
||||
points[i].resize(point_count);
|
||||
}
|
||||
|
||||
lcd.setFont(&fonts::Font6);
|
||||
lcd.setTextDatum(bottom_right);
|
||||
DataDisplay();
|
||||
lcd.setColorDepth(16); // LCDを16bitカラーモードに設定する。
|
||||
lcd.setSwapBytes(true); // バイト順変換を有効にする。
|
||||
int len = image_width * image_height;
|
||||
lcd.setAddrWindow(220, 0, image_width, image_height); // 描画範囲を設定。
|
||||
lcd.startWrite();
|
||||
lcd.setAddrWindow(0, 0, image_width, image_height);
|
||||
for (int y = 0; y < image_height; y++)
|
||||
{
|
||||
for (int x = 0; x < image_width; x++)
|
||||
{
|
||||
lcd.writeColor(getBaseColor(x, y - yoffset), 1);
|
||||
}
|
||||
}
|
||||
lcd.endWrite();
|
||||
|
||||
// lcd.setTextColor(0xFFFFFFU, 0x000000U);
|
||||
// lcd.fillScreen(0x000000U);
|
||||
|
||||
lcd.setFont(&fonts::Font2);
|
||||
lcd.setTextDatum(top_left);
|
||||
lcd.setTextColor(0xaa96daU, 0x000000U);
|
||||
lcd.drawString("V", 90, 145);
|
||||
lcd.setTextColor(0xfcbad3U, 0x000000U);
|
||||
lcd.drawString("A", 190, 145);
|
||||
lcd.setTextColor(0xffffd2U, 0x000000U);
|
||||
lcd.drawString("W", 290, 145);
|
||||
|
||||
// InitialDataV = ina.readBusVoltage();
|
||||
// InitialDataI = ina.readShuntCurrent();
|
||||
// ProcessedDataV = InitialDataV;
|
||||
// ProcessedDataI = InitialDataI;
|
||||
|
||||
// lcd.setFont(&fonts::Font6);
|
||||
|
||||
// // DataDisplay();
|
||||
// lcd.setColorDepth(16); // LCDを16bitカラーモードに設定する。
|
||||
// // lcd.setSwapBytes(true); // バイト順変換を有効にする。
|
||||
// int len = image_width * image_height;
|
||||
// lcd.setAddrWindow(220, 0, image_width, image_height); // 描画範囲を設定。
|
||||
}
|
||||
void loop(void)
|
||||
{
|
||||
lcd.setSwapBytes(true); // バイト順変換を有効にする。
|
||||
for (size_t i = 0; i < image_width; i++)
|
||||
static int prev_sec;
|
||||
static int fps;
|
||||
++fps;
|
||||
int sec = millis() / 1000;
|
||||
if (prev_sec != sec)
|
||||
{
|
||||
current_buf[i] = current_buf[i + 1];
|
||||
}
|
||||
current_buf[image_width - 1] = uint16_t(ina.readShuntCurrent() * 50);
|
||||
Graph_DrawCurve(current_buf, W);
|
||||
|
||||
lcd.writePixels((uint16_t *)rgb565, image_width * image_height); // RGB565の16bit画像データを描画。
|
||||
for (size_t i = 0; i < image_height * image_width; i++)
|
||||
{
|
||||
rgb565[i] = 0;
|
||||
lcd.setFont(&fonts::Font2);
|
||||
lcd.setTextColor(0x999999U, 0x000000U);
|
||||
prev_sec = sec;
|
||||
lcd.setCursor(10, 10);
|
||||
lcd.printf("FPS:%03d", fps);
|
||||
// lcd.drawNumber(fps, 320, 0);
|
||||
fps = 0;
|
||||
}
|
||||
|
||||
// number++;
|
||||
// if (number == 50)
|
||||
static int count;
|
||||
|
||||
for (int i = 0; i < LINE_COUNT; i++)
|
||||
{
|
||||
points[i][count % point_count] = -uint16_t((ina.readShuntCurrent() - 0.0026f) * 50) + 65;
|
||||
// points[1][count % point_count] = -uint16_t(ina.readBusVoltage() * 5) + 65;
|
||||
}
|
||||
++count;
|
||||
|
||||
lcd.startWrite();
|
||||
int index1 = count % point_count;
|
||||
for (int x = 0; x < point_count - 1; x++)
|
||||
{
|
||||
int index0 = index1;
|
||||
index1 = (index0 + 1) % point_count;
|
||||
for (int i = 0; i < LINE_COUNT; i++)
|
||||
{
|
||||
int y = points[i][index0];
|
||||
if (y != points[i][index1])
|
||||
{
|
||||
lcd.writePixel(x, y + yoffset, getBaseColor(x, y));
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < LINE_COUNT; i++)
|
||||
{
|
||||
int y = points[i][index1];
|
||||
lcd.writePixel(x, y + yoffset, colors[i]);
|
||||
}
|
||||
}
|
||||
lcd.endWrite();
|
||||
|
||||
// lcd.startWrite();
|
||||
// // lcd.setSwapBytes(true); // バイト順変換を有効にする。
|
||||
// for (size_t i = 0; i < image_width; i++)
|
||||
// {
|
||||
// DataDisplay();
|
||||
// number = 0;
|
||||
// current_buf[i] = current_buf[i + 1];
|
||||
// }
|
||||
// current_buf[image_width - 1] = uint16_t(ina.readShuntCurrent() * 50);
|
||||
// Graph_DrawCurve(current_buf, W);
|
||||
|
||||
// lcd.writePixels((uint16_t *)rgb565, image_width * image_height); // RGB565の16bit画像データを描画。
|
||||
// for (size_t i = 0; i < image_height * image_width; i++)
|
||||
// {
|
||||
// rgb565[i] = 0;
|
||||
// }
|
||||
// lcd.endWrite();
|
||||
|
||||
number++;
|
||||
if (number == 100)
|
||||
{
|
||||
lcd.setFont(&fonts::Font4);
|
||||
DataDisplay();
|
||||
number = 0;
|
||||
}
|
||||
|
||||
// delay(100);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue