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.