98
« Son İleti Gönderen: TA1AYH 03 Kasım 2022, 16:06:21 »
Teşekkürler Kemal bey.
.
.
.
.
Merhaba aşağıdaki kod AD8307 için yazıldı, 73
#include "U8glib.h"
U8GLIB_SH1106_128X64_2X u8g(U8G_I2C_OPT_NO_ACK);
#include <EEPROM.h>
const int eepromWindowAdress = 4;
const int Buzzer_PIN = 10;
const int Sensor_PIN = A0; //A0
int eepromWindow = 0;
// arc
int xmax = 131;
int ymax = 64;
int xcenter = xmax / 2;
int ycenter = ymax / 2 + 10;
int arc = ymax / 2;
int maxf = 10;
uint8_t Angle = 0;
volatile int bilink = 0;
unsigned long bilinkTime = 0;
// graph
const int WIDTH = 128;
const int HEIGHT = 64;
const int LENGTH = WIDTH;
int x = 19;
int y[LENGTH];
int DisplayType = 0;
float IR_Val = 0;
int Cleared = 0;
unsigned long Max_Time = 0;
float Max_Val = 0;
String Max_ValT;
void setup() {
pinMode(Buzzer_PIN, OUTPUT);
//Serial.begin(115200);
eepromWindow = readIntFromEEPROM(eepromWindowAdress);
if (eepromWindow == 0) {
eepromWindow = 1;
} else {
eepromWindow = 0;
}
SavetoEEPROM(eepromWindowAdress, eepromWindow);
}
void loop() {
IR_Val = map(analogRead(Sensor_PIN), 61, 515, 0, 87);
if (IR_Val < 0) IR_Val = 0;
else if (IR_Val > 87) IR_Val = 87;
if (IR_Val > Max_Val) {
Max_Val = IR_Val;
Max_Time = millis();
maxf = 1;
} else if ((millis() - Max_Time) > 10000) {
Max_Val = IR_Val;
Max_Time = millis();
maxf = 0;
}
Max_ValT = String(Max_Val - 70, 0);
if ((millis() - bilinkTime) > 500) {
if (bilink == 0) bilink = 1;
else bilink = 0;
bilinkTime = millis();
}
if (eepromWindow == 0) {
Graph();
delay(50);
} else {
if (IR_Val >= 69) {
digitalWrite(Buzzer_PIN, HIGH);
} else if (IR_Val > 43) {
digitalWrite(Buzzer_PIN, HIGH);
delay(270 - IR_Val * 2.5);
digitalWrite(Buzzer_PIN, LOW);
} else if (IR_Val < 69) {
digitalWrite(Buzzer_PIN, LOW);
}
Arcer();
}
}
void Arcer() {
Angle = map(IR_Val, 0, 87, 0, 90);
if (Angle < 45) {
Angle = Angle + 135;
} else {
Angle = Angle - 45;
}
u8g.firstPage();
do {
gauge(Angle);
} while (u8g.nextPage());
}
// ------------------------------------------------- void gauge() ------------------------------------------
void gauge(uint8_t angle) {
u8g.drawCircle(xcenter, ycenter, arc + 6, U8G_DRAW_UPPER_RIGHT);
u8g.drawCircle(xcenter, ycenter, arc + 4, U8G_DRAW_UPPER_RIGHT);
u8g.drawCircle(xcenter, ycenter, arc + 6, U8G_DRAW_UPPER_LEFT);
u8g.drawCircle(xcenter, ycenter, arc + 4, U8G_DRAW_UPPER_LEFT);
float x1 = sin(2 * angle * 2 * 3.14 / 360);
float y1 = cos(2 * angle * 2 * 3.14 / 360);
u8g.drawLine(xcenter, ycenter, xcenter + arc * x1, ycenter - arc * y1);
u8g.drawLine(xcenter, ycenter, xcenter + arc * sin(2 * 26 * 2 * 3.14 / 360), ycenter - arc * cos(2 * 26 * 2 * 3.14 / 360));
u8g.drawDisc(xcenter, ycenter, 5, U8G_DRAW_UPPER_LEFT);
u8g.drawDisc(xcenter, ycenter, 5, U8G_DRAW_UPPER_RIGHT);
u8g.setFont(u8g_font_chikita);
u8g.setFont(u8g_font_6x10);
u8g.setPrintPos(2, 10);
if (bilink == 0)
u8g.print("dBm");
else
u8g.print(" ");
u8g.setPrintPos(45, 29);
u8g.print("TA1AYH");
u8g.drawStr(8, 40, "-70");
u8g.drawStr(18, 14, "-48");
u8g.drawStr(54, 18, "-26");
u8g.drawStr(93, 14, "-5");
u8g.drawStr(108, 40, "+17");
int DBM_Val = map(IR_Val, 0, 87, -70, 17);
u8g.setFont(u8g_font_profont22);
if (DBM_Val >= 0) {
u8g.setPrintPos(57, 62);
} else {
u8g.setPrintPos(47, 62);
}
u8g.print(DBM_Val);
if (maxf == 0) u8g.setFont(u8g_font_6x10);
else u8g.setFont(u8g_font_helvR14r);
u8g.setPrintPos(95, 62);
u8g.print(Max_ValT.c_str());
}
void Graph() {
if (Cleared == 0) {
x = 19;
clearY();
Cleared = 1;
}
y[x] = map(IR_Val, 0, 87, HEIGHT - 4, 13);
u8g.firstPage();
do {
drawChart();
drawY();
u8g.drawStr(0, y[x] + 2, String(IR_Val - 70, 0).c_str());
u8g.setFont(u8g_font_6x10);
u8g.setPrintPos(2, 10);
u8g.print("TA1AYH");
u8g.setPrintPos(60, 10);
u8g.print("Max");
u8g.setPrintPos(85, 10);
u8g.print(Max_ValT.c_str());
u8g.print(" dBm");
} while (u8g.nextPage());
x++;
if (x >= WIDTH - 1) {
Cleared = 0;
} else if (y[x] >= HEIGHT - 13) {
Cleared = 0;
}
}
void drawChart() {
u8g.drawLine(19, 14, 19, 63); // Y ax
//u8g.drawLine(19, 20, 128, 20); // X ax
for (int i = 14; i <= WIDTH; i = i + 10) {
if (i <= LENGTH) {
if (i > 20) {
//u8g.drawPixel(i, 19);
u8g.drawPixel(i, 23);
}
u8g.drawPixel(20, i);
u8g.drawPixel(21, i);
} else if (i <= WIDTH) {
//u8g.drawPixel(i, 19);
u8g.drawPixel(i, 23);
}
}
}
void drawY() {
for (int i = 20; i < LENGTH; i++) {
if (y != -1) {
//u8g.drawPixel(i - 1, y[i - 1]);
u8g.drawLine(i - 1, y[i - 1], i, y);
} else {
break;
}
}
}
void clearY() {
for (int i = 0; i < LENGTH; i++) {
y = -1;
}
}
void SavetoEEPROM(int address, int number) {
byte byte1 = number >> 8;
byte byte2 = number & 0xFF;
EEPROM.write(address, byte1);
EEPROM.write(address + 1, byte2);
}
int readIntFromEEPROM(int address) {
return (EEPROM.read(address) << 8) + EEPROM.read(address + 1);
}