Pages: [1]   Go Down
Author Topic: [Duvida] Múltiplas programações no Arduino uno  (Read 1302 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

central nervous system
Offline Offline
Full Member
***
Karma: 0
Posts: 135
Causing havoc inside your brain since 1980
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pode sim, fazer tudo num sketch só

Code:
#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
}
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Obrigado neuron_upheava  smiley-grin 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 smiley-lol smiley-lol
Logged

Bom Princípio - RS
Offline Offline
Sr. Member
****
Karma: 0
Posts: 263
SOFTWARE DEVELOPER, HACKER, RASPBERRY/ARDUINO/QT ENTHUSIAST & METALLICA FAN
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

My Toys:
Raspberry Pi (Model B)
Arduino MEGA 1280: ( Shield LCD 16x2, Ethernet, RFID )
Freescale Kinetis KL25Z [/

Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
Code:
#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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aqui so algumas fotos de como esta o robô



Logged

Pages: [1]   Go Up
Jump to: