#include "WaveformGenerator.ino_menu.h"
#include <MD_AD9833.h>
#define SECONDS_INTERVAL 1000
MD_AD9833 gen(11, 13, 10);
unsigned int startFreq, stopFreq, step;
unsigned int currentFreq = 0, taskId;
void setup() {
Serial.begin(9600);
setupMenu();
renderer.setTitleRequired(false);
gen.begin();
gen.setPhase(MD_AD9833::CHAN_0, (uint16_t)0);
}
void loop() {
taskManager.runLoop();
}
uint16_t getValueById(int id) {
auto* valItem = reinterpret_cast<ValueMenuItem*>(getMenuItemById(id));
return valItem->getCurrentValue();
}
void CALLBACK_FUNCTION obChangeWaveType(int id) {
uint16_t currentValue = getValueById(id);
switch(currentValue) {
case 0: // Square
gen.setMode(MD_AD9833::MODE_SQUARE1);
break;
case 1: // Triangle
gen.setMode(MD_AD9833::MODE_TRIANGLE);
break;
case 2: // Sine
gen.setMode(MD_AD9833::MODE_SINE);
break;
default:
gen.setMode(MD_AD9833::MODE_SQUARE1);
// Square
}
}
void CALLBACK_FUNCTION onChangeKnownFrequency(int id) {
uint16_t currentValue = getValueById(id);
if (taskId != 0) {
taskManager.cancelTask(taskId);
taskId = 0;
}
gen.setFrequency(MD_AD9833::CHAN_0, currentValue);
}
void CALLBACK_FUNCTION StartFrequencyWalk(int id) {
startFreq = getValueById(3);
stopFreq = getValueById(4);
step = getValueById(5);
currentFreq = startFreq;
taskId = taskManager.scheduleFixedRate(SECONDS_INTERVAL, [] {
if (currentFreq < stopFreq) {
currentFreq += step;
gen.setFrequency(MD_AD9833::CHAN_0, currentFreq);
Serial.println(currentFreq);
}
else {
taskManager.cancelTask(taskId);
taskId = 0;
}
});
renderer.getLCD()->clear();
}