#include <Wire.h> //IDE Standard
#include <Adafruit_GFX.h> //Adafruit GFX https://github.com/adafruit/Adafruit-GFX-Library
#include <Adafruit_SSD1306.h> //Adafruit SSD1306 https://github.com/adafruit/Adafruit_SSD1306
#include <Rotary.h> //Ben Buxton https://github.com/brianlow/Rotary
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire);
Rotary r = Rotary(2, 3);
unsigned long freq = 27245000;
byte encoder = 1;
unsigned long fstep = 10000;
void set_channal(short dir) {
if (encoder == 1) { //Up/Down channal
if (dir == 1) freq = freq + fstep;
if (freq >= 29965000) freq = 27965000;
if (dir == -1) freq = freq - fstep;
//if (fstep == 1000000 && freq <= 1000000) freq = 1000000;
else if (freq < 27405000) freq = 27405000;
}
}
void loop() {
displayfreq();
layout();
drawbargraph();
}
void displayfreq() {
unsigned int m = freq / 1000000;
unsigned int k = (freq % 1000000) / 1000;
unsigned int h = (freq % 1000) / 1;
display.clearDisplay();
display.setTextSize(1);
char buffer[15] = "";
display.setCursor(21, 1);
sprintf(buffer, "%2d,%003d.%003d", m, k, h);
display.print(buffer);
}
void layout() {
display.setTextColor(WHITE);
display.drawLine(102, 13, 102, 42, WHITE);
display.drawLine(11, 55, 102, 55, WHITE);
display.setTextSize(1);
display.setCursor(3, 1);
display.print("Fq");
display.setTextSize(1);
display.setCursor(86, 1);
display.print("kHz");
display.setTextSize(1);
display.setCursor(3, 14);
display.print("Ch");
display.fillRect(108, 1, 18, 8, WHITE);
display.setTextColor(BLACK);
display.setTextSize(1);
display.setCursor(109, 1);
display.print("dig");
display.setTextColor(WHITE);
display.setTextSize(4);
display.setCursor(21, 14);
display.print("30");
display.setTextSize(2);
display.setCursor(69, 28);
display.print("a");
display.setTextSize(1);
display.setCursor(86, 13);
display.print("HI");
display.setTextSize(1);
display.setCursor(86, 24);
display.print("CB");
display.setTextSize(1);
display.setCursor(86, 35);
display.print("LO");
display.setTextSize(1);
display.setCursor(108, 13);
display.print("USB");
display.setTextSize(1);
display.setCursor(108, 24);
display.print("AM");
display.setTextSize(1);
display.setCursor(108, 35);
display.print("LSB");
display.setTextSize(1);
display.setCursor(108, 47);
display.print("RX");
display.setTextSize(1);
display.setCursor(3, 47);
display.print("s");
display.setTextSize(1);
display.setCursor(108, 56);
display.print("TX");
display.setTextSize(1);
display.setCursor(3, 56);
display.print("w");
display.display();
}
void drawbargraph() {
display.setCursor(10, 47);
display.fillRect(11, 47, 3, 6, WHITE);
display.fillRect(15, 47, 4, 6, WHITE);
display.fillRect(25, 47, 4, 6, WHITE);
display.fillRect(30, 47, 4, 6, WHITE);
display.fillRect(35, 47, 4, 6, WHITE);
display.fillRect(40, 47, 4, 6, WHITE);
display.fillRect(45, 47, 4, 6, WHITE);
display.fillRect(50, 47, 4, 6, WHITE);
display.fillRect(55, 47, 4, 6, WHITE);
display.fillRect(60, 47, 4, 6, WHITE);
display.fillRect(65, 47, 4, 6, WHITE);
display.fillRect(70, 47, 4, 6, WHITE);
display.fillRect(75, 47, 4, 6, WHITE);
display.fillRect(80, 47, 4, 6, WHITE);
display.fillRect(85, 47, 4, 6, WHITE);
display.fillRect(90, 47, 4, 6, WHITE);
display.fillRect(95, 47, 4, 6, WHITE);
display.fillRect(100, 47, 3, 6, WHITE);
display.display();
display.setCursor(10, 57);
display.fillRect(11, 57, 3, 6, WHITE);
display.fillRect(15, 57, 4, 6, WHITE);
display.fillRect(25, 57, 4, 6, WHITE);
display.fillRect(30, 57, 4, 6, WHITE);
display.fillRect(35, 57, 4, 6, WHITE);
display.fillRect(40, 57, 4, 6, WHITE);
display.fillRect(45, 57, 4, 6, WHITE);
display.fillRect(50, 57, 4, 6, WHITE);
display.fillRect(55, 57, 4, 6, WHITE);
display.fillRect(60, 57, 4, 6, WHITE);
display.fillRect(65, 57, 4, 6, WHITE);
display.fillRect(70, 57, 4, 6, WHITE);
display.fillRect(75, 57, 4, 6, WHITE);
display.fillRect(80, 57, 4, 6, WHITE);
display.fillRect(85, 57, 4, 6, WHITE);
display.fillRect(90, 57, 4, 6, WHITE);
display.fillRect(95, 57, 4, 6, WHITE);
display.fillRect(100, 57, 3, 6, WHITE);
display.display();
}