#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <si5351.h>
#define I2C_ADDR 0x27
#define SERIAL_BAUD 9600
Si5351 si5351;
LiquidCrystal_I2C lcd(I2C_ADDR, 16, 2);
#define CLK_0 0
#define CLK_1 1
#define CLK_2 2
void setup() {
Serial.begin(SERIAL_BAUD);
Wire.begin();
lcd.begin(16, 2);
lcd.setBacklight(LOW);
si5351.init(SI5351_CRYSTAL_LOAD_8PF, 0, 0);
lcd.setBacklight(HIGH);
lcd.print("Frequency Output");
lcd.setCursor(0, 1);
lcd.print("Initialization");
delay(2000);
lcd.clear();
lcd.setBacklight(LOW);
}
void loop() {
if (Serial.available() > 0) {
String command = Serial.readStringUntil('\n');
unsigned long freq0, freq1, freq2;
sscanf(command.c_str(), "%lu %lu %lu", &freq0, &freq1, &freq2);
configureFrequency(CLK_0, freq0);
configureFrequency(CLK_1, freq1);
configureFrequency(CLK_2, freq2);
displayFrequencies(freq0, freq1, freq2);
Serial.println("Frequencies programmed successfully!");
}
}
void configureFrequency(uint8_t output, unsigned long frequency) {
si5351.set_freq(frequency, output);
}
void displayFrequencies(unsigned long freq0, unsigned long freq1, unsigned long freq2) {
lcd.clear();
lcd.setBacklight(HIGH);
lcd.print("Freq Output 1:");
lcd.setCursor(0, 1);
lcd.print(freq0);
delay(2000);
lcd.clear();
lcd.setBacklight(HIGH);
lcd.print("Freq Output 2:");
lcd.setCursor(0, 1);
lcd.print(freq1);
delay(2000);
lcd.clear();
lcd.setBacklight(HIGH);
lcd.print("Freq Output 3:");
lcd.setCursor(0, 1);
lcd.print(freq2);
delay(2000);
lcd.clear();
lcd.setBacklight(LOW);
}