#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include "AD9833.h"
AD9833 AD(10); // HW SPI, select pin 10
#include "Buttons.h"
Buttons button4(4, INPUT_PULLUP); //buttonRe
Buttons button5(5, INPUT_PULLUP); //buttenDn
Buttons button6(6, INPUT_PULLUP); //buttonLe
Buttons button7(7, INPUT_PULLUP); //buttenUp
Buttons button8(8, INPUT_PULLUP); //waveform
int waveform;
float frequency;
int p;
int q;
int d[2]; // 2 Nachkommastellen (Fractional part)
int f[8]; // 8 Vorkommastellen (Integer part)
void setup() {
Serial.begin(9600);
while (!Serial) {;}
Serial.println("Hello World");
lcd.init(); //initialize the lcd
lcd.backlight(); //open the backlight
lcd.clear();
display(f, d, q, waveform);
SPI.begin();
AD.begin();
AD.setWave(waveform);
AD.setFrequency(frequency, 0);
}
void loop() {
bool imp4 = button4.debounce(20);
bool imp5 = button5.debounce(20);
bool imp6 = button6.debounce(20);
bool imp7 = button7.debounce(20);
bool imp8 = button8.debounce(20);
if (imp8)waveform++;
if (waveform > 2)waveform = 0;
if (imp4)q--;
if (q < -2)q = 7;
if (imp6)q++;
if (q > 7)q = -2;
if (q < 0) {
p = (-1 * q) - 1;
if (imp7)d[p]++;
if (d[p] > 9)d[p] = 0;
if (imp5)d[p]--;
if (d[p] < 0)d[p] = 9;
} else {
if (imp7)f[q]++;
if (f[q] > 9)f[q] = 0;
if (imp5)f[q]--;
if (f[q] < 0)f[q] = 9;
}
if (imp4 || imp5 || imp6 || imp7 || imp8) display(f, d, q, waveform);
if (!imp5 && !imp7 && !imp8) return;
char frq[12];
snprintf(frq, 12, "%d%d%d%d%d%d%d%d.%d%d", f[7], f[6], f[5], f[4], f[3], f[2], f[1], f[0], d[0], d[1]);
frequency = atof(frq);
AD.setWave(waveform);
AD.setFrequency(frequency, 0);
Serial.println(frq);
Serial.println(frequency);
Serial.println(AD.getFrequency(0));
Serial.println();
}
void display(int *f, int*d, int cursor, int waveform) {
char line2[17];
lcd.noCursor();
switch (waveform) {
case 0:
lcd.setCursor(0, 0);
lcd.print(F(" SINE "));
break;
case 1:
lcd.setCursor(0, 0);
lcd.print(F(" SQUARE "));
break;
case 2:
lcd.setCursor(0, 0);
lcd.print(F(" TRIANGLE "));
break;
}
lcd.setCursor(0, 1);
snprintf(line2, 17, "%d%d,%d%d%d,%d%d%d.%d%d Hz", f[7], f[6], f[5], f[4], f[3], f[2], f[1], f[0], d[0], d[1]);
lcd.print(line2);
switch (cursor) {
case -2:
lcd.setCursor( 12, 1);
break;
case -1:
lcd.setCursor( 11, 1);
break;
case 0:
lcd.setCursor( 9, 1);
break;
case 1:
lcd.setCursor( 8, 1);
break;
case 2:
lcd.setCursor( 7, 1);
break;
case 3:
lcd.setCursor( 5, 1);
break;
case 4:
lcd.setCursor( 4, 1);
break;
case 5:
lcd.setCursor( 3, 1);
break;
case 6:
lcd.setCursor( 1, 1);
break;
case 7:
lcd.setCursor( 0, 1);
break;
}
lcd.cursor();
}
D13: CLK
D11: DATA
D10: FSYNC