[Duvida] Múltiplas programações no Arduino uno

Estou elaborando um projeto que consiste em um robô guiado por três formas de sensoreamento ( IR seguidor de linha, IR sensor de distancia, Sensor de toque)
Mas ele so ira de guiar por um tipo de sensor por vez, onde teria três opções de botões:
Botão 1: o robô se guia pelo sensor IR de seguidor de linas, desabilitando os outros dois sensores.
Botão 2: o robô se guia pelo sensor IR de distancia, desabilitando os outros dois sensores.
Botão 3: o robô se guia pelo sensor de toque, desabilitando os outros dois sensores.

Minha duvida é se é possível colocar estas três programações no Arduino e faze-lo executa-las na forma descrita acima, ou se terei que reprogramar ele toda vez que for mudar o tipo de sensoreamento.

Pode sim, fazer tudo num sketch só

#define BOTAO1 7
#define BOTAO2 8
#define BOTAO3 9

boolean botao1 = false;
boolean botao2 = false;
boolean botao3 = false;

void setup() {
    // coloque aqui o que será executado logo ao ligar o Arduino, por exemplo:
    pinMode( BOTAO1, INPUT );
    pinMode( BOTAO2, INPUT );
    pinMode( BOTAO3, INPUT );
}

void loop() {

    if ( digitalRead( BOTAO1 ) == HIGH ) {
        botao1 = true;
        botao2 = false;
        botao3 = false;
    } else if ( digitalRead( BOTAO2 ) == HIGH ) {
        botao1 = false;
        botao2 = true;
        botao3 = false;
    } else if ( digitalRead( BOTAO3 ) == HIGH ) {
        botao1 = false;
        botao2 = false;
        botao3 = true;
    }

    if ( botao1 ) {
        executarFuncao1();
    } else if ( botao2 ) {
        executarFuncao2();
    } else if ( botao3 ) {
        executarFuncao3();
    }
}

void executarFuncao1() {
    // seguidor de linhas
}

void executarFuncao2() {
    // seguidor de distancia
}

void executarFuncao3() {
    // sensor de toque
}

Obrigado neuron_upheava :smiley: Fiquei mais tranquilo em saber que o meu projeto é viável, a parte mecânica e eletrônica ja esta pronta, mas como sou iniciante em programação fique com medo de não poder fazer as funções do jeito desejado, agora é so estudar para tentar fazer as três programações XD XD

faz um um switch de 3 vias que vai ficar bem legal...

Estes dias retomei a idei de selecionar a função do robô pelos botoes.
O codigo esta desta forma, onde função1 e o seguidor de linha, função2 controlado por IR e a função3 e o desvia de obstaculos (ainda não comecei este codigo)
Bem o codigo esta assim:

#include <IRremote.h> 

int BOTAO1 = 0;
int BOTAO2 = 1;
int BOTAO3 = 2;

int  motor1pin1 = 5;    
int  motor1pin2 = 6;      
int  motor2pin1 = 9;    
int  motor2pin2 = 10;  

int led1 = 3; 
int led2 = 4;  
int led3 = 7;


int PinoSensor1 = A0; 
int PinoSensor2 = A1; 
int receiver = A3; 

IRrecv irrecv(receiver); 
decode_results results; 

boolean botao1 = false;
boolean botao2 = false;
boolean botao3 = false;

void setup() {
    // coloque aqui o que será executado logo ao ligar o Arduino

  pinMode( BOTAO1, INPUT );
  pinMode( BOTAO2, INPUT );
  pinMode( BOTAO3, INPUT );

  pinMode(motor1pin1, OUTPUT);
  pinMode(motor1pin2, OUTPUT);
  pinMode(motor2pin1, OUTPUT);
  pinMode(motor2pin2, OUTPUT);
  
  pinMode(led1, OUTPUT);  
  pinMode(led2, OUTPUT);       
  pinMode(led3, OUTPUT);   

  pinMode(PinoSensor1,INPUT);        
  pinMode(PinoSensor2,INPUT);  
  pinMode(receiver, INPUT); 
   

  Serial.begin(9600); 
  irrecv.enableIRIn(); 

}



void loop() {

    if ( digitalRead( BOTAO1 ) == HIGH ) {
        botao1 = true;
        botao2 = false;
        botao3 = false;
    } else if ( digitalRead( BOTAO2 ) == HIGH ) {
        botao1 = false;
        botao2 = true;
        botao3 = false;
    } else if ( digitalRead( BOTAO3 ) == HIGH ) {
        botao1 = false;
        botao2 = false;
        botao3 = true;
    }

    if ( botao1 ) {
        executarFuncao1();
    } else if ( botao2 ) {
        executarFuncao2();
    } else if ( botao3 ) {
        executarFuncao3();
    }
}

void executarFuncao1() {

 digitalWrite(led1, HIGH); // led sinalisador

 int sensorValor1 = analogRead(PinoSensor1); 
 Serial.println(sensorValor1); 
 if (sensorValor1 <=100){ 
  
  digitalWrite(motor1pin1,HIGH); 

  } 
  else { 

 digitalWrite(motor1pin1,LOW); 

 } 
  
  int sensorValor2 = analogRead(PinoSensor2); 
  if (sensorValor2  <= 350){ 
  Serial.println(sensorValor2); 

  digitalWrite(motor2pin1,HIGH); 

  } 

  else {  

  digitalWrite(motor2pin1,LOW); 

  } 
  
}

void executarFuncao2() {

  digitalWrite(led2, HIGH); // led sinalisador

if (irrecv.decode(&results)){  
switch(results.value){ 
    
            //CONTROLE 
  
case 16736925:{ //  Mode
  digitalWrite(motor1pin1,HIGH); 
  digitalWrite(motor1pin2,LOW);
  digitalWrite(motor2pin1,HIGH);
  digitalWrite(motor2pin2,LOW);
  Serial.println("IR - FRENTE"); 
  break; 
} 
case 16761405:{ //  >>/
  digitalWrite(motor1pin1,HIGH); 
  digitalWrite(motor1pin2,LOW);
  digitalWrite(motor2pin1,LOW);
  digitalWrite(motor2pin2,HIGH);
  Serial.println(" GIRAR HORARIO "); 
  break; 
} 
case 16720605:{ //      >//
  digitalWrite(motor1pin1,LOW); 
  digitalWrite(motor1pin2,HIGH);
  digitalWrite(motor2pin1,HIGH);
  digitalWrite(motor2pin2,LOW); 
  Serial.println("GIRAR ANTI-HORARIO"); 
  break; 
} 
case 16754775:{ //     VOL -
  digitalWrite(motor1pin1,LOW); 
  digitalWrite(motor1pin2,HIGH);
  digitalWrite(motor2pin1,LOW);
  digitalWrite(motor2pin2,HIGH); 
  Serial.println("IR - TRAS"); 
  break; 
} 
case 16712445:{ //     /<<
  digitalWrite(led1, HIGH); 
  digitalWrite(led2, HIGH);
  Serial.println("LIGAR LEDs"); 
  break; 
 } 
} 
  delay(100); 
  irrecv.resume(); 
  } 
 }


void executarFuncao3() {
  // desvia de obstaculos 
}

o problema e que assim que eu ligo o robô ele ja entra na função 1, sem ter apertado nada.
estou ligando os botoes da seguinte forma http://blog.samuelcavalcante.com/wp-content/uploads/2011/06/Acionando-o-LED-com-botao-fritzing-289x300.jpg mas com o positivo e negativo trocado para que ele envie sinal positivo quando pressionado.

sa refiz as ligações de tudo farias vezes, então se alguem poder me ajudar em onde meu codigo esta errado agradeço.

Aqui so algumas fotos de como esta o robô