conmutador toggle switch de 3 posiciones para distintas funciones

jose casi lo tenía!! funciona perfectamente!! muchas gracias!!... Aunque ahora viene la parte más complicada diría yo...

Yo tengo un código como decia, para un riego automático que funciona muy bien... cuando llega cierta hora, si el suelo está seco... riega. Esa funcionalidad que tiene quiero que funcione cuando la palanca esté en el centro... pero cuando esté "arriba" quiero que riegue independientemente del sensor de humedad del suelo y de la hora, y cuando esté abajo quiero que pare de regar también independientemente de todo... el problema que veo es que para que comience a regar a cierta hora tengo hecho un Alarm.alarmRepeat en el Setup() del sckech, por lo que no sé ahora cómo sacarlo de ahí para meterlo en el if del comnutador...

Dejo el código que tengo del sistema de riego a ver si alguien me puede echar una mano...

#include <Time.h>
#include <TimeAlarms.h>
#include <DS1307RTC.h>
#include <LiquidCrystal.h>

// Creamos un objeto lcd con los pines a los que está conectado
LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);

// Declaramos la entrada del pin del sensor de humdad de tierra
const int sensorPin = A0; 

// Declaramos la salida del pin del Relé, LOW para abrir electroválvula y HIGH para cerrar.
const int relePin = 2; 

void setup() {
  // Iniciamos el pin del sensor de humedad del suelo como input
  pinMode(sensorPin, INPUT);
  //definir el pin del relé como salida
  pinMode(relePin, OUTPUT);  
  // Preparar la interfaz serial
  Serial.begin(9600);

  //cargamos un objeto lcd e iniciamos la pantalla con 20 caracteres por línea y 4 líneas
  lcd.begin(20, 4);

  // Configurar los pines de salida de relevadores desactivados al inicio
  // recordamos que los modulos de reles se activan con un estado bajo
  digitalWrite(relePin, HIGH);

  // Ponemos la palabra no en el LCD en la parte donde pone Regando:, para así que siempre empiece en no y se modique cuando se está regando o cuando ha parado de regar.
  lcd.setCursor(9,1);
  lcd.write("NO");

  // Cargar la hora actual desde el RTC e indicar que esto suceda de forma automática durante loop()
  // Utilizamos el método RTC.get() de la libreria DS1307RTC. El RTC debe estar conectado como se
  // indica en el texto y debe tener la fecha y hora correctas
  setSyncProvider(RTC.get);
  if (timeStatus() != timeSet)
    Serial.println("Fallo de RTC");
  else
    Serial.println("Sincronizado con RTC");
    

  // Crear las alarmas y configurar las funciones correspondientes a cada una
  [b]Alarm.alarmRepeat(20, 30, 0, aperturaelectrovalvula);
  Alarm.alarmRepeat(8, 30, 0, aperturaelectrovalvula);[/b]

}

void loop() {

  Serial.println("");
  // Mostrar el reloj en el monitor serial
  Serial.print("Hora: ");
  digitalClockDisplay();
  // Mostrar el reloj en el LCD2004
  LCD1602ClockDisplay();

  // función map para ver porcentajes de humedad suelo en vez de un valor
  int valorHumedad = map(analogRead(sensorPin), 0, 1023, 100, 0);
  int humedad = analogRead(sensorPin);

  // Imprimimos por pantalla los valores de humedad y su porcentaje
  Serial.print("Humedad en porcentaje: ");
  Serial.print(valorHumedad);
  Serial.println("%");

  Serial.print("Humedad en valor: ");
  Serial.println(humedad);

 // Imprimimos en pantalla si se está regando o no.
  Serial.println("Regando: NO"); 
  Serial.println("");
  
 // llamamos a la función humedadporcentaje, pasándole el valorHumedad en porcentaje, para que valore si está por debajo del 10, que mueva los caracteres en el LCD para una correcta visualización
  humedadPorcentaje(valorHumedad);

 // llamamos a la función humedadValor, pasándole la humedad, para que valore si está por debajo del 10, que mueva los caracteres en el LCD para una correcta visualización
  humedadValor(humedad);

  // Esperar 1 segundo y procesar las Alarmas mientras tanto...
  // El metodo Alarm.delay() procesa en el fondo las alarmas y llamara a las funciones indicadas
  Alarm.delay(1000);
  
  lcd.setCursor(0,0);
  lcd.write("Hora:");
  lcd.setCursor(0,1);
  lcd.write("Regando: ");
  lcd.setCursor(0,2);
  lcd.write("Humedad: ");
  lcd.setCursor(9,2);
  lcd.print(humedad);

  digitalWrite(relePin, HIGH);
  lcd.setCursor(9,1);
  lcd.write("NO");
  
}

void aperturaelectrovalvula(){
  
  while(int humedad = analogRead(sensorPin)  > 500)
   { 

   // llamamos a la función humedadporcentaje, pasándole el valorHumedad en porcentaje, para que valore si está por debajo del 10, que mueva los caracteres en el LCD para una correcta visualización    
  int valorHumedad = map(analogRead(sensorPin), 0, 1023, 100, 0);

  // Cogemos la información del sensor de humedad por segunda vez.
  int humedad2 = analogRead(sensorPin);

  // Mostrar el reloj en el monitor serial
   Serial.print("Hora: ");
  digitalClockDisplay();
  
  // Imprimimos por pantalla los valores de humedad y su porcentaje tanto en LCD como en Serial Monitor.
  Serial.print("Humedad en porcentaje: ");
  Serial.print(valorHumedad);
  Serial.println("%");

  Serial.print("Humedad en valor: ");
  Serial.println(humedad2);
  
  lcd.setCursor(9,2);
  lcd.print(humedad2);

  // Ponemos el relé en LOW por lo que se abrirá la electroválvula.
  digitalWrite(relePin, LOW);

  // Imprimimos en el LCD la palabra SI donde pone regando: y antes ponía NO.
  lcd.setCursor(9,1);
  lcd.write("SI");

  // Imprimimos en pantalla si se está regando o no.
  Serial.println("Regando: SI"); 
  Serial.println("");

  // Mostrar el reloj en el LCD2004
  LCD1602ClockDisplay();

  // llamamos a la función humedadValor, pasándole la humedad, para que valore si está por debajo del 10, que mueva los caracteres en el LCD para una correcta visualización
  humedadValor(humedad2);

  // llamamos a la función humedadporcentaje, pasándole el valorHumedad en porcentaje, para que valore si está por debajo del 10, que mueva los caracteres en el LCD para una correcta visualización
  humedadPorcentaje(valorHumedad);

  delay(1000);
   }
}


/**
   Funciones para la impresion del reloj al monitor serial de arduino
*/
void digitalClockDisplay() {
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.println();
}

void LCD1602ClockDisplay(){

lcd.setCursor(6,0);
printDigitsLCDHora(hour() );

lcd.setCursor(8,0);
lcd.print(':');

lcd.setCursor(9,0);
printDigitsLCD(minute());;

lcd.setCursor(11,0);
lcd.print(':');

lcd.setCursor(12,0);
printDigitsLCD(second());
}


// Si los minutos o segundos son inferiores a 10, pone un cero a la izquierda en la pantalla del Monitor Serie.
void printDigits(int digits) {
  Serial.print(":");
  if (digits < 10)
    Serial.print('0');
    Serial.print(digits);
}


// Si los minutos o segundos son inferiores a 10, pone un cero a la izquierda en la pantalla LCD.
void printDigitsLCD(int digits) {
  if (digits < 10)
    lcd.print('0');
    lcd.print(digits);
}

// Si la hora es inferior a 10, pone un cero a la izquierda en la pantalla LCD
void printDigitsLCDHora(int digits) {
  if (digits < 10)
    lcd.print(' ');
    lcd.print(digits);
}


// Si el porcentaje de humedad es inferior a 10, movemos los caracteres para que no se quede el último visualizado en pantalla y parezca un dato incorrecto.
void humedadPorcentaje(int valorHumedad){
      if (valorHumedad < 10){
  lcd.setCursor(15,2);
  lcd.print(' ');
  lcd.setCursor(16,2);
  lcd.print(valorHumedad);
  lcd.setCursor(17,2);
  lcd.print('%');
    }else{
      lcd.setCursor(15,2);
      lcd.print(valorHumedad);
      lcd.setCursor(17,2);
      lcd.print('%');
      }
}

// Si el valor numérico del sensor de humedad es inferior a 1000, ajusta los caractéres para una correcta visualización en el display LCD
void humedadValor(int humedad){
    if(humedad < 1000){
  lcd.setCursor(12,2);
  lcd.print(' ');
      }
}

Gracias.