#define DAC_SW 48 #define DAC_LED0 46 #define DAC_LED1 50 int dac_select = 0; bool dac_sw_pressed = false; #define ADC_SW 42 #define ADC_LED0 44 #define ADC_LED1 40 #define LP_IN_CLK 6 #define LP_OUT_CLK 7 int adc_select = 0; bool adc_sw_pressed = false; //max 12 #define BITS 12 //max 150000 (1.5 kHz) #define FILT_FREQ 150000 void setup() { Serial.begin(115200); //analog analogWriteResolution(BITS); analogReadResolution(BITS); //DAC pinMode(DAC_SW, INPUT); digitalWrite(DAC_SW, HIGH); pinMode(DAC_LED0, OUTPUT); digitalWrite(DAC_LED0, HIGH); pinMode(DAC_LED1, OUTPUT); pinMode(DAC0, OUTPUT); pinMode(DAC1, OUTPUT); //ADC pinMode(ADC_SW, INPUT); digitalWrite(ADC_SW, HIGH); pinMode(ADC_LED0, OUTPUT); digitalWrite(ADC_LED0, HIGH); pinMode(ADC_LED1, OUTPUT); //PWM pinMode(LP_IN_CLK, OUTPUT); pinMode(LP_OUT_CLK, OUTPUT); //50% analogWrite(LP_IN_CLK, pow(2, BITS) / 2); analogWrite(LP_OUT_CLK, pow(2, BITS) / 2); //Set duty PWMC_ConfigureClocks(FILT_FREQ * PWM_MAX_DUTY_CYCLE, 0, VARIANT_MCK); } bool check_switch(int in, int led0, int led1, int * select, bool * pressed) { if (digitalRead(in) == 0 && *pressed == false) { *pressed = true; *select = !(*select); digitalWrite(led0, *select == 0); digitalWrite(led1, *select == 1); return true; } if (digitalRead(in) == 1) *pressed = false; return false; } long x = 0; long y = 0; void loop() { check_switch(DAC_SW, DAC_LED0, DAC_LED1, &dac_select, &dac_sw_pressed); check_switch(ADC_SW, ADC_LED0, ADC_LED1, &adc_select, &adc_sw_pressed); //read adc if (adc_select == 0) x = analogRead(A0); else x = analogRead(A1); //remove offset x -= 2048; //****************** //****************** //restore offest y += 2048; //write dac if (dac_select == 0) analogWrite(DAC0, y); else analogWrite(DAC1, y); }