for reference, here is my code :
#include "DFRobot_GP8403.h"
DFRobot_GP8403 dac(&Wire,0x58);
DFRobot_GP8403 dac2(&Wire,0x5F);
int StateMachine = 0;
// Interrupt Service Routine (ISR)
void changeState ()
{
StateMachine++;
if(StateMachine>4)
{
StateMachine=9;
}
Serial.print("Machine State = ");
Serial.println(StateMachine);
}
void resetState ()
{
Serial.println("reset");
StateMachine=0;
}
void setup() {
Serial.begin(115200);
while(dac.begin()!=0){
Serial.println("init error 1");
delay(500);
}
while(dac2.begin()!=0){
Serial.println("init error 2");
delay(500);
}
Serial.println("init succeed");
dac.setDACOutRange(dac.eOutputRange10V);//Set the output range as 0-10V
dac2.setDACOutRange(dac2.eOutputRange10V);//Set the output range as 0-10V
attachInterrupt(digitalPinToInterrupt(5), changeState, RISING);
attachInterrupt(digitalPinToInterrupt(4), resetState, RISING);
}
void loop(){
switch (StateMachine) {
case 1:
dac.setDACOutVoltage(2000,0); // OUT0 channel 1
dac.setDACOutVoltage(2000,1); // OUT1 channel 1
dac2.setDACOutVoltage(2000,0); // OUT0 channel 2
break;
case 2:
dac.setDACOutVoltage(4000,0); // OUT0 channel 1
dac.setDACOutVoltage(4000,1); // OUT1 channel 1
dac2.setDACOutVoltage(4000,0); // OUT0 channel 2
break;
default:
dac.setDACOutVoltage(0,0); // OUT0 channel 1
dac.setDACOutVoltage(0,1); // OUT1 channel 1
dac2.setDACOutVoltage(0,0); // OUT0 channel 2
break;
}
dac.store();
dac2.store();
}