You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
200 lines
7.3 KiB
200 lines
7.3 KiB
#include <Wire.h>
|
|
#include <Adafruit_GFX.h>
|
|
#include <Adafruit_SSD1306.h>
|
|
#include "extDisplay.h"
|
|
#include "radDisplaySettings.h"
|
|
|
|
#define EXT_DISPLAY_I2C_ADDRESS 0x3C
|
|
#define EXT_SCREEN_WIDTH 128
|
|
#define EXT_SCREEN_HEIGHT 64
|
|
|
|
|
|
Adafruit_SSD1306 extDisplay(EXT_SCREEN_WIDTH, EXT_SCREEN_HEIGHT, &Wire, -1);
|
|
|
|
void initExtDisplay() {
|
|
Wire.begin(EXT_I2C_SDA, EXT_I2C_SCL);
|
|
if(!extDisplay.begin(SSD1306_SWITCHCAPVCC, EXT_DISPLAY_I2C_ADDRESS)) {
|
|
//Serial.println("SSD1306 #1 allocation failed");
|
|
for(;;);
|
|
}
|
|
|
|
changeExt(50);
|
|
}
|
|
|
|
void changeExt(float value) {
|
|
extDisplay.clearDisplay();
|
|
overlayOnExtDisplay();
|
|
drawLineExtDisplay(valueOnExtDisplay(value));
|
|
extDisplay.display();
|
|
}
|
|
|
|
void pixelOnExtDisplay(int16_t x, int16_t y) {
|
|
extDisplay.clearDisplay();
|
|
extDisplay.drawPixel(x, y, WHITE);
|
|
extDisplay.display();
|
|
}
|
|
|
|
float valueOnExtDisplay(float value) {
|
|
return mapFloat(value, 0, 100, 150, 210);
|
|
}
|
|
|
|
void drawLineExtDisplay(float value) {
|
|
int r1 = 122;
|
|
int r2 = 112;
|
|
float rad = value * PI / 180.0;
|
|
float radSin = sin(rad);
|
|
float radCos = cos(rad);
|
|
|
|
for (int x = extCenterX - 1; x < extCenterX + 1; x++) {
|
|
for (int y = extCenterY - 1; y < extCenterY + 1; y++) {
|
|
extDisplay.drawLine(
|
|
x + (r1 * radSin),
|
|
y - (r1 * radCos),
|
|
x + (r2 * radSin),
|
|
y - (r2 * radCos),
|
|
WHITE);
|
|
}
|
|
}
|
|
}
|
|
|
|
void overlayOnExtDisplay() {
|
|
int duga[2] = {85, 125};
|
|
for (int d = 0; d < 2; d++) {
|
|
for (int angleCalc = 150; angleCalc <= 210.0; angleCalc+= 1) {
|
|
float rad = angleCalc * PI / 180.0;
|
|
int angle = map(angleCalc, 210, 150, 0, 100);
|
|
float radSin = sin(rad);
|
|
float radCos = cos(rad);
|
|
|
|
int endX = 64 + (duga[d] * radSin);
|
|
int endY = -70 - (duga[d] * radCos);
|
|
extDisplay.drawPixel(endX, endY, WHITE);
|
|
|
|
if (d == 0 && angle % 10 == 0) {
|
|
int duga0ext = 95;
|
|
int startX = 64 + (duga0ext * radSin);
|
|
int startY = -70 - (duga0ext * radCos);
|
|
extDisplay.drawLine(endX, endY, startX, startY, WHITE);
|
|
}
|
|
|
|
if (d == 0 && angle % 5 == 0) {
|
|
int duga0ext = 90;
|
|
int startX = 64 + (duga0ext * radSin);
|
|
int startY = -70 - (duga0ext * radCos);
|
|
extDisplay.drawLine(endX, endY, startX, startY, WHITE);
|
|
}
|
|
|
|
if (d == 1 && angle % 5 == 0) {
|
|
int duga1ext = 128;
|
|
int startX = 64 + (duga1ext * radSin);
|
|
int startY = -70 - (duga1ext * radCos);
|
|
extDisplay.drawLine(endX, endY, startX, startY, WHITE);
|
|
}
|
|
|
|
if (d == 0 && angle % 10 == 0) {
|
|
int neededLetter = abs(100 - angle);
|
|
int duga1ext = duga[d] + 15;
|
|
int startX = 64 + (duga1ext * radSin);
|
|
int startY = -70 - (duga1ext * radCos);
|
|
int moveLetters = 5;
|
|
|
|
for (int i = 0; i < sizeof(ZeroLetterPoint) / sizeof(ZeroLetterPoint[0]); i++) {
|
|
extDisplay.drawPixel(startX + ZeroLetterPoint[i][0], startY + ZeroLetterPoint[i][1], WHITE);
|
|
}
|
|
|
|
switch (neededLetter) {
|
|
case 10:
|
|
for (int i = 0; i < sizeof(OneLetterPoint) / sizeof(OneLetterPoint[0]); i++) {
|
|
extDisplay.drawPixel(startX + OneLetterPoint[i][0], startY + OneLetterPoint[i][1] + moveLetters, WHITE);
|
|
}
|
|
break;
|
|
|
|
case 20:
|
|
for (int i = 0; i < sizeof(TwoLetterPoint) / sizeof(TwoLetterPoint[0]); i++) {
|
|
extDisplay.drawPixel(startX + TwoLetterPoint[i][0], startY + TwoLetterPoint[i][1] + moveLetters, WHITE);
|
|
}
|
|
break;
|
|
|
|
case 30:
|
|
for (int i = 0; i < sizeof(ThreeLetterPoint) / sizeof(ThreeLetterPoint[0]); i++) {
|
|
extDisplay.drawPixel(startX + ThreeLetterPoint[i][0], startY + ThreeLetterPoint[i][1] + moveLetters, WHITE);
|
|
}
|
|
break;
|
|
|
|
case 40:
|
|
for (int i = 0; i < sizeof(FourLetterPoint) / sizeof(FourLetterPoint[0]); i++) {
|
|
extDisplay.drawPixel(startX + FourLetterPoint[i][0], startY + FourLetterPoint[i][1] + moveLetters, WHITE);
|
|
}
|
|
break;
|
|
|
|
case 50:
|
|
for (int i = 0; i < sizeof(FiveLetterPoint) / sizeof(FiveLetterPoint[0]); i++) {
|
|
extDisplay.drawPixel(startX + FiveLetterPoint[i][0], startY + FiveLetterPoint[i][1] + moveLetters, WHITE);
|
|
}
|
|
break;
|
|
|
|
case 60:
|
|
for (int i = 0; i < sizeof(SixLetterPoint) / sizeof(SixLetterPoint[0]); i++) {
|
|
extDisplay.drawPixel(startX + SixLetterPoint[i][0], startY + SixLetterPoint[i][1] + moveLetters, WHITE);
|
|
}
|
|
break;
|
|
|
|
case 70:
|
|
for (int i = 0; i < sizeof(SevenLetterPoint) / sizeof(SevenLetterPoint[0]); i++) {
|
|
extDisplay.drawPixel(startX + SevenLetterPoint[i][0], startY + SevenLetterPoint[i][1] + moveLetters, WHITE);
|
|
}
|
|
break;
|
|
|
|
case 80:
|
|
for (int i = 0; i < sizeof(EightLetterPoint) / sizeof(EightLetterPoint[0]); i++) {
|
|
extDisplay.drawPixel(startX + EightLetterPoint[i][0], startY + EightLetterPoint[i][1] + moveLetters, WHITE);
|
|
}
|
|
break;
|
|
|
|
case 90:
|
|
for (int i = 0; i < sizeof(NineLetterPoint) / sizeof(NineLetterPoint[0]); i++) {
|
|
extDisplay.drawPixel(startX + NineLetterPoint[i][0], startY + NineLetterPoint[i][1] + moveLetters, WHITE);
|
|
}
|
|
break;
|
|
|
|
case 100:
|
|
for (int i = 0; i < sizeof(ZeroLetterPoint) / sizeof(ZeroLetterPoint[0]); i++) {
|
|
extDisplay.drawPixel(startX + ZeroLetterPoint[i][0], startY + ZeroLetterPoint[i][1] + moveLetters, WHITE);
|
|
}
|
|
|
|
for (int i = 0; i < sizeof(OneLetterPoint) / sizeof(OneLetterPoint[0]); i++) {
|
|
extDisplay.drawPixel(startX + OneLetterPoint[i][0], startY + OneLetterPoint[i][1] + moveLetters * 2, WHITE);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//display calc
|
|
// center 64 / -70
|
|
// break high radius 132
|
|
// break low raduis 80
|
|
|
|
// 80 min 150
|
|
// 80 max 210
|
|
|
|
void lineCalcOnExtDisplay(int16_t x, int16_t y, int radius) {
|
|
extDisplay.clearDisplay();
|
|
overlayOnExtDisplay();
|
|
|
|
float rad = x * PI / 180.0;
|
|
int endX = 64 + (radius * sin(rad));
|
|
int endY = -70 - (radius * cos(rad));
|
|
|
|
if (endX <= 128 && endX >= 0 && endY <= 64 && endY >= 0) {
|
|
extDisplay.drawPixel(endX, endY, WHITE);
|
|
}
|
|
|
|
|
|
extDisplay.display();
|
|
}
|