//Arduino Uno with SSD1306 OLED display for SU-1 SMSL DAC
// 3 Inputs select from source "USB / OPT / COAX "
// This code adapt to suit with Wokki simulator and component
// Added frequency counter for DAC bit rate (AK9433 Chip)
// Code design for active low from SMSL DAC output,no need pull-up
// resistor
#include "SPI.h"
#include "Wire.h"
#include "Adafruit_GFX.h"
#include "Adafruit_SSD1306.h"
#include "FreeSansBold9pt7b.h"
#include "FreqCount.h"
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define NUMFLAKES 10 // Number of snowflakes in the animation example
#define LOGO_HEIGHT 16
#define LOGO_WIDTH 16
int SW_IN1 = 8;
int SW_IN2 = 9;
int SW_IN3 = 10;
int SW_input1;
int SW_input2;
int SW_input3;
unsigned long f;
float f0;
int x,n=3,r;
//String f_unit =" kHZ";
int f_unit =1; // ( 1 = kHZ, 2 = MHZ)
String f_unit_s = "kHZ";
int f_out = 44;
void setup() {
Serial.begin(115200);
pinMode(7,INPUT);
FreqCount.begin(1000);
pinMode(SW_IN1, INPUT_PULLUP);
pinMode(SW_IN2, INPUT_PULLUP);
pinMode(SW_IN3, INPUT_PULLUP);
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
// Show initial display buffer contents on the screen --
// the library initializes this with an Adafruit splash screen.
display.display();
delay(500);
// Clear the buffer
display.clearDisplay();
Draw_text_SU1_DAC();
delay (4000); // Pause for 4 seconds
}
void loop() {
SW_input1 = digitalRead(SW_IN1);
SW_input2 = digitalRead(SW_IN2);
SW_input3 = digitalRead(SW_IN3);
Serial.print("Sw input1 status");Serial.println(SW_input1);
Serial.print("Sw_input2 status");Serial.println(SW_input2);
Serial.print("Sw_input3 status");Serial.println(SW_input3);
//Fdisplay(f_out,f_unit);
if (SW_input1 == 0 && SW_input2 == 1 && SW_input3 == 1) {
Draw_text_USB(f_out,f_unit); // Draw USB text
delay (500);
}
if (SW_input1 == 1 && SW_input2 == 0 && SW_input3 == 1) {
Draw_text_OPT(f_out,f_unit); // Draw OPT text
delay (500);
}
if (SW_input1 == 1 && SW_input2 == 1 && SW_input3 == 0) {
Draw_text_COAX(f_out,f_unit); // Draw COAX text
delay (500);
}
}
void Draw_text_SU1_DAC(){
display.clearDisplay();
display.setTextSize(2); // Draw 2X-scale text
display.setTextColor(WHITE);
display.setCursor(3, 3);
display.println(F(" SU1-DAC "));
display.println(F(" "));
display.println(F(" SMSL "));
display.display(); // Show initial text
delay(500);
}
void Draw_text_USB(int &f_outj,int &f_unitj) {
display.clearDisplay();
display.setTextSize(2); // Draw 2X-scale text
display.setTextColor(WHITE);
display.setCursor(16, 32);
display.setFont(&FreeSansBold9pt7b);
display.println(F(" USB "));
//display.println(F(" "));
if (f_unitj == 1){
f_unit_s = "kHZ";
}
if (f_unitj == 2) {
f_unit_s = "MHZ";
}
// display.setTextSize(2); // Draw 2X-scale text
// display.print("Samp ");display.print(f_outj);display.println(f_unit_s);//println(f_unitj);
display.display(); // Show initial text
delay(500);
}
void Draw_text_OPT(int &f_outk,int &f_unitk){
display.clearDisplay();
display.setTextSize(2); // Draw 2X-scale text
display.setTextColor(WHITE);
display.setCursor(16, 32);
display.setFont(&FreeSansBold9pt7b);
display.println(F(" OPT "));
//display.println(F(" "));
if (f_unitk == 1){
f_unit_s = "kHZ";
}
if (f_unitk == 2) {
f_unit_s = "MHZ";
}
// display.print("Samp ");display.print(f_outk);display.println(f_unit_s);
display.display(); // Show initial text
delay(500);
}
void Draw_text_COAX(int &f_outl,int &f_unitl) {
display.clearDisplay();
display.setTextSize(2); // Draw 2X-scale text
display.setTextColor(WHITE);
display.setCursor(6, 32);
display.setFont(&FreeSansBold9pt7b);
display.println(F(" COAX "));
// display.println(F(" "));
if (f_unitl == 1){
f_unit_s = "kHZ";
}
if (f_unitl == 2) {
f_unit_s = "MHZ";
}
// display.print("Samp ");display.print(f_outl);display.println(f_unit_s);
display.display(); // Show initial text
delay(500);
}