collapse

* Links de Robótica

* Posts Recentes

Carro telecomandado atraves do PC por almamater
[Hoje às 17:58]


Ontem pequei... por senso
[Hoje às 16:47]


Escolher Multimetro por filjoa
[Hoje às 14:46]


Qual a melhor técnica? por dropes
[Hoje às 14:30]


Wamp Server por jm_araujo
[Ontem às 23:07]


TV Avariou - Sanyo por almamater
[Ontem às 13:54]


Ligar telefone fixo a arduino por helderjsd
[Ontem às 11:07]


Procuro cristal de 30.875 Mhz? por Hugu
[25 de Setembro de 2016, 17:20]


Encomenda Colectiva N2-2016[@Mouser - Aberta a pedidos!] por Hugu
[25 de Setembro de 2016, 16:42]


Mosfet trocado? por almamater
[25 de Setembro de 2016, 12:42]

Autor Tópico: Ajuda Robo Movel  (Lida 634 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline Silvio Severino

  • Mini Robot
  • *
  • Mensagens: 76
Ajuda Robo Movel
« em: 24 de Setembro de 2011, 00:32 »
Ola pessoal estou a fazer um robô utilizando a comunicação xbee entre o arduino e o pc.
O programa que tenho no arduino é o seguinte
Código: [Seleccione]
  #define LED 1
  int PWMA = 6;
  int AIN1 = 12;
  int AIN2 = 13;
 
  int BIN1 = 10;
  int BIN2 = 8;
  int PWMB = 9;
 
  int STBY = 11;
 
  int speed_val=255;
 
  #include <Servo.h>
  Servo servo1;
  int GRAUS = 0;
 
//--- so se realiza ao iniciar o programa-----
  void setup()
  {
    pinMode(PWMA,OUTPUT);
    pinMode(AIN1,OUTPUT);
    pinMode(AIN2,OUTPUT);
   
    pinMode(PWMB,OUTPUT);
    pinMode(BIN1,OUTPUT);
    pinMode(BIN2,OUTPUT);
   
    pinMode(STBY,OUTPUT);
   
    pinMode(LED,OUTPUT);
   
    Serial.begin(9600);
    Serial.println('x', BYTE);
   
    speed_val = 50;
    M1_stop() ;
    M2_stop() ;
    GRAUS=0;
     
  }
//----------------------------------------
  void loop()
  {
     if(Serial.available()>0)
       {
       char A=Serial.read();
       digitalWrite(LED,HIGH);
       
          if (A== 'n') // se cicar na tecla 'n' incrementa 10 uindades a velocidade
          {
          speed_val = speed_val + 10;
          test_speed();
          }
         
          else if (A=='m') // se cicar na tecla 'm'retira 10 uindades a velocidade
         {
         speed_val = speed_val - 10;
         test_speed();
         }
       
          else if (A=='8') // se cicar na tecla '8' o robo anda em frente
         {
         M1_forward(speed_val);
         M2_forward(speed_val);
         delay(25);
         }
     
         else if (A=='2') // se cicar na tecla '2' o robo anda para traz
         {
         M1_reverse(speed_val);
         M2_reverse(speed_val);
         delay(25);
         }
       
         else if (A=='4')// se cicar na tecla '4' o robo vira para a direita
        {
         M1_reverse(speed_val);
         M2_forward(speed_val);
         delay(25);
        }
       
         else if (A=='6')// se cicar na tecla '6' o robo vira para a esquerda
        {
        M1_forward(speed_val);
        M2_reverse(speed_val);
        delay(25);
        }

        else if (A=='i')// se cicar na tecla 'i' sobes a camara 10 unidades
       {
       GRAUS= GRAUS + 10;
       test_GRAUS();
       servo1.write(GRAUS);
       delay(25);
       }

       else if (A=='k') // se cicar na tecla 'k' desces a camara 10 unidades
      {
      GRAUS= GRAUS - 10;
      test_GRAUS();
      servo1.write(GRAUS);
      delay(25);
      }
   
      else
      {
      M1_stop();
      M2_stop();
      digitalWrite(LED, LOW);
      }

     
       }
  }
//------ teste da velocidade------------------
 
  void test_speed()
  {
    if (speed_val > 250)
    {
     speed_val = 255;
    }
   
    if (speed_val < 0)
    {
     speed_val = 0;
    }
  }
//-----teste da posição da camara-----------
 
  void test_GRAUS()
  {
 
    if (GRAUS > 180)
    {
     GRAUS = 180;
    }
   
    if (GRAUS < 0)
    {
    GRAUS = 0;
    }
  }
//-----Funções de Movimento---------------------------------
 
  void M1_reverse(int x)
  {
  digitalWrite(STBY,HIGH);
  digitalWrite(BIN1, LOW);
  digitalWrite(BIN2, HIGH);
  analogWrite(PWMB, x);
  }
 
  void M1_forward(int x)
  {
  digitalWrite(STBY,HIGH);
  digitalWrite(BIN2, LOW);
  digitalWrite(BIN1, HIGH);
  analogWrite(PWMB, x);
  }
 
  void M1_stop()
  {
  digitalWrite(BIN1, LOW);
  digitalWrite(BIN2, LOW);
  digitalWrite(PWMB, LOW);
  }
 
  void M2_forward(int y)
  {
  digitalWrite(STBY,HIGH);
  digitalWrite(AIN1, LOW);
  digitalWrite(AIN2, HIGH);
  analogWrite(PWMA, y);
  }
 
  void M2_reverse(int y)
  {
  digitalWrite(STBY,HIGH);
  digitalWrite(AIN2, LOW);
  digitalWrite(AIN1, HIGH);
  analogWrite(PWMA, y);
  }
 
  void M2_stop()
  {
  digitalWrite(AIN1, LOW);
  digitalWrite(AIN2, LOW);
  digitalWrite(PWMA, LOW);
  }
//--- Fim ---------------------------------

O que queria é que se carrega-se na tecla 8, andar para a frente e assim sucessivamente nas outras teclas.
sendo o n para incrementar o valor de velocidade e o m para diminuir a velocidade.

Não estou a conseguir meter o robo a andar com este código alguem pode dar uma ajuda?