#include <Arduino.h>
#include <stdint.h>
#include "time_base.h"
#include "dac.h"
#include "gpio_button.h"
#include "signal_generator.h"
#include "keypad_polling.h"
static inline bool checkNumber(uint8_t number){
return (number >= 0 && number <= 9);
}
static inline bool checkLetter(uint8_t letter){
return (letter >= 0x0A && letter <= 0x0C);
}
static inline bool checkFreq(uint32_t freq){
return (freq >= 1 && freq <= 12000000);
}
static inline bool checkAmp(uint32_t amp){
return (amp >= 100 && amp <= 2500);
}
static inline bool checkOffset(uint32_t offset){
return (offset >= 50 && offset <= 1250);
}
// Objects initialization
time_base_t tb_print;
dac_t my_dac;
gpio_button_t my_button;
signal_t my_signal;
key_pad_t my_keypad;
int my_led = 18;
// Auxiliar variables
uint8_t in_param_state = 0x00; // 0: Nothing, 1: Entering amp (A), 2: Entering offset (B), 3: Entering freq (C)
uint32_t param = 0; // This variable will store the value of any parameter that is being entered
uint8_t key_cont = 0;
void setup (){
Serial1.begin(2400);
Serial1.println("Hello, Raspberry Pi Pico W!");
tb_init(&tb_print, 1000000, true);
dac_init(&my_dac, 10, true);
button_init(&my_button, 0, 100000, true);
signal_gen_init(&my_signal,1, 1000, 500, true);
signal_calculate_next_value(&my_signal);
kp_init(&my_keypad,2,6,100000,true);
pinMode(my_led, OUTPUT);
}
void loop(){
// Process printing
if(tb_check(&tb_print)){
tb_next(&tb_print);
switch (my_signal.STATE.ss){
case 0:
Serial1.print("Sinusoidal: ");
break;
case 1:
Serial1.print("Triangular: ");
break;
case 2:
Serial1.print("Saw tooth: ");
break;
case 3:
Serial1.print("Square: ");
break;
}
Serial1.print("Amp: ");
Serial1.print(my_signal.amp);
Serial1.print(" Offset: ");
Serial1.print(my_signal.offset);
Serial1.print("Freq: ");
Serial1.println(my_signal.freq);
}
}