Usar 1 pulsador en lugar de 2

Hola a todos, soy nuevo en este mundo ARDUINO y no tengo mucha experiencia en programación. Estoy con un proyecto utilizando el modelo UNO, es un medidor de concentración de oxigeno en gases. Cuando tengo que calibrarlo oprimo un pulsador para el 20,9% de O2 y después otro pulsador para registrar el 100% de O2, hasta aqui todo funciona de maravilla, mi problema es que quisiera utilizar un solo pulsador para esto, es decir, presiono y tomo el 20,9%, si vuelvo a presionar tomo el 100%, si vuelvo a presionar tomo el 20,9% otra vez y así sucesivamente. Agradecería si alguien me da una mano con esto que no logro resolver. Aquí les dejo mi código:

ANALIZADOR_O2__Pro_.ino (2.22 KB)

Creo que ya te lo dije pero lo repito.

No se ponen mensajes por todos lados con el mismo tema.

Ahora lee las normas del foro (cosa que afirmaste haberlo hecho cuando te registrarste, pero que no hiciste) y entonces se espera a ser respondido.

Ahora te respondo:
Veamos si esto sirve, he re escrito tu programa

#include <EEPROM.h>

const byte OP 		= 0; 	// Señal proveniente del Amplificador Operacional
const byte pinCAL 	= 7;	// Pin de calibración

byte pulsador, pulsadorAnt;
byte calibrar 		= 0;

int y1 = 0; 				// Valor de tension al 20.9%, guardado en la EEPROM
int y2 = 0; 				// Valor de tension al 100%, guardado en la EEPROM
int Direcciony1 = 0; 		// Dirección de la EEPROM donde se almacena valor y1
int Direcciony2 = 1; 		// Dirección de la EEPROM donde se almacena valor y1
 
float m; 					// Pendiente de la recta
float y11 = 0; 				// Valor y1 leido de la EEPROM
float y22 = 0; 				// Valor y2 leido de la EEPROM
float Vfinal = 0;			// Valor de la concentración de O2 medido, que se verá en el display


void setup() {

  Serial.begin(9600);
  calibrar = 0;
}


void loop() {
  
  //Ajuste de cero y ganancia. Aquí comienza si fuera necesario la calibración al 20,9% y 100% de O2
  pulsador = digitalRead(pinCAL); //el valor que tome var  será  el leído en el pin 7
 
  if (pulsador == HIGH && pulsadorAnt == LOW) {
  	  calibrar++;
  	  if (calibrar >= 3)
  	     calibrar = 0;
  }
  pulsadorAnt = pulsador;

  switch (calibrar) {
  	    case 0: 
  	   			Serial.println("CALIBRAR AL 20.9%");
         		y1 = (analogRead(OP)) / 4;
         		EEPROM.write(Direcciony1, y1);
      			break;
      	case 1: 
 				Serial.println("CALIBRAR AL 100%");
        		y2 = (analogRead(OP)) / 4;
        		EEPROM.write(Direcciony2, y2);
        		break;
        case 2:  
              	//Fin ajuste de Cero
      			Serial.println("Fin ajuste de Cero");
      			delay (2000);
      			y11 = (EEPROM.read(Direcciony1)) / 51.07659648; //Leemos los valores almacenados en las direcciones
      			y22 = (EEPROM.read(Direcciony2)) / 51.07659648;
      			m = (y22 - y11) / 79.1; //Calculamos la pendiente
      			Vfinal = ((analogRead(OP)) * 0.00488 - (y11) + (m * 20.9)) / m; //La ecuacion de la recta nos devuelve el Valor Final
      			Serial.println(Vfinal);
      			break;
   }
}

Quite los delays de 4 seg. si los crees útiles los vuelves a poner.