Barrido con pulsador/simular comportamiento potenciometro y salida DAC due

Hola a todos, es un placer estar de nuevo por acá pidiendo sus aportes y comentarios.

Estoy implementando un barrido digital para simular el comportamiento de un potenciometro, que luego incorporare a otro sketch, que adjunto mas adelante en el cual interesa usar la salida DAC del DUE para hacer pruebas.

Usando la entrada digital 11 como entrada para el pulsador, necesito realizar un barrido usando un pulsador normalmente abierto entre los valores de 0 a 2 con pasos de 0.1 esto para simular digitalmente el comportamiento de un potenciomentro que tendré conectado mas adelante.

En realidad ya pude hacerlo pero quisiera sus opiniones, quizás pueda hacerlo de una forma mas sencilla o eficiente tal que consuma menos recursos de mi placa arduino, en este caso el Due, puesto que este sketch solo hace parte de otro aun mas grande que voy a incorporar.


int estadoActual1=0; //Guarda el estado actual del pulsador
int estadoActual2=0;
int estadoUltimo=0; //Guarda el último estado del pulsador
int contador=0; //Guarda las veces que se presiona el pulsador

void setup() {
  pinMode(11,INPUT);
  Serial.begin(9600);
  
}

void loop() {
  float Vcc;
  float paso=0.1;
  float Vi=0;

estadoActual1=digitalRead(11);
delay(10);
estadoActual2=digitalRead(11); 

// comprobando que los dos estados son iguales y asi solucionar el efecto bounce
 if (estadoActual1 == estadoActual2){

  if(estadoActual1 != estadoUltimo) { if(estadoActual1 == HIGH) { if(contador>=20) {contador=0;}
    contador = contador + 1;
Vcc= Vi + contador*(paso);

    Serial.println("Esta es la pulsacion n°: ");
    Serial.println(contador);
    Serial.println("Valor de vcc n°: ");
    Serial.println(Vcc);
   }
  }
 }  
estadoUltimo= estadoActual1;
  

}

En la continuación del proyecto adjunto el código, este consiste en leer una entrada análoga de 60Hz, y luego realizar un control con ella, en este básicamente me gustaría saber como puedo usar las salidas DAC del arduino DUE para verificar algunos comportamientos del código con la salida DAC en un osciloscopio. Específicamente las variables que necesito son V1 y V2 del código, puesto que la señal de entrada es V1 y esta la integro internamente usando un filtro digital pasa-bajos de orden uno y luego asignandola a la variable V2.

uint32_t tiempo=0;
float V1,V2,V3=1,V4,V5,V6,V7,deltaT=0.1,V2a;
float T=1/60.0,Vcc;
float V2ant=0.1,V1ant=0,V10; 
int tiempo2=0,tiempo3=0;
uint32_t now;
void setup() {
  Serial.begin(250000);
  pinMode(A0,INPUT);  //Lectura señal AC
  pinMode(A1,INPUT);  //Lectura señal potenciometro.
  pinMode(11,INPUT);  //Lectura Señal pulsador para hacer un barrido.
  pinMode(12,OUTPUT); //Pulso de encendido SCR1 y SCR2
  pinMode(13,OUTPUT); //Pulso de encendido SCR3 y SCR4
}
void loop() {

  now=micros();
  deltaT=(now-tiempo)*10-6;
  tiempo=now;    

  V1=analogRead(A0)*2.0/1023.0-1.0;



    V2=deltaT*(V1-V2ant*0.0001)+V2ant; //  Filtro de primer orden pasa bajos que a bajas frecuencias se comporta como un integrador.

    V2a=(V2/V3);
 if (V2>V3){V3=V2;}else{V3=V3;}
  V4=1+V2a;
  V5=1-V2a;
//  V3=1;// Detector de picos
//  V4=V3+V2a;
//  V5=V3-V2a;
//  Vcc=2.0*analogRead(A1)/1023.0;
//  if (Vcc>V4 && Vcc>V5 && Vcc<V4 && Vcc<V5){if (V4>V5){Vcc=V4;}else{Vcc=V5;}}

//  if (Vcc<V4 && Vcc<V5){if (V4<V5){Vcc=V4;}else{Vcc=V5;}}

 //if (Vcc<=0.33){Vcc=0.33;}
 //if (Vcc>=1.6){Vcc=1.6;}
  
  V2ant=V2;
  V1ant=V1;


// Codigo para realizar barrido

////////////////////////////////////////////

// Finaliza estructura que realiza el barrido
  
  if (V4>Vcc){
    V6=0;}else{V6=1;tiempo2=now;}
  if (V5>Vcc){
    V7=0;}else{V7=1;tiempo3=now;}
  if (V6==V7){if(tiempo2>tiempo3){V6=0;digitalWrite(13,LOW);V7=1;digitalWrite(12,HIGH);}else{V6=1;digitalWrite(13,HIGH);V7=0;digitalWrite(12,LOW);}}else{
  if(V6==1){digitalWrite(13,HIGH);}else{digitalWrite(13,LOW);};
  if(V7==1){digitalWrite(12,HIGH);}else{digitalWrite(12,LOW);}}

//  if (micros()>100000){}
//Serial.println(V2a);
//  Serial.println(deltaT); 
Serial.print("Vcc: ");
Serial.println(Vcc); 
 
 //Serial.print("Angulo SCR1: ");
 //Serial.println(acos(Vcc-1.0)*180.0/3.1416);
 //Serial.print("Vo(alpha): ");
 //Serial.println(acos(2*V1*cos(acos(Vcc-1.0))));
  //Serial.print("Angulo SCR2: ");
// Serial.println(acos(1.0-Vcc)*180.0/3.1416);
 //Serial.print("Vo(alpha): ");
 //Serial.println(acos(2*V1*cos(acos(1.0-Vcc))));
 
 //yolocoloqSerial.println(acos(Vcc-1.0)*180.0/3.1416);Serial.print(' ');Serial.print(acos(1.0-Vcc)*180.0/3.1416);
//  Serial.print(Vcc);Serial.print(' ');Serial.println(V4);
//Serial.print(Vcc);Serial.print(' ');Serial.print(V4);Serial.print(' ');Serial.println(V5); 
}

Muchas gracias a Todos.

El primer código yo lo haría asi pero... sujeto a que si el pulsador rebota fallaría.

Primer código levemente mejorado/corregido pero el tuyo estaba bien

bool estadoActual  = 0; //Guarda el estado actual del pulsador
bool estadoUltimo  = false; //Guarda el último estado del pulsador
float contador     = 0; //Guarda las veces que se presiona el pulsador

void setup() {
  pinMode(11,INPUT);
  Serial.begin(9600);
}

void loop() {
  float Vcc;
  float paso = 0.1f;
  float Vi   = 0.0f;

  estadoActual = digitalRead(11);

   if (estadoActual && !estadoActual2) {
      if (contador>= 2.0) 
          contador = 0.0;
      contador += 0.1;
      Vcc = Vi + contador;

      Serial.print("Esta es la pulsacion n°: ");
      Serial.println(contador);
      Serial.print("Valor de vcc n°: ");
      Serial.println(Vcc);
  }  
  estadoUltimo = estadoActual;
}

De hecho mirando el segundo no encuentro que mejorar. Pero es mi visión.

Listoo, muchas gracias.