collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[27 de Março de 2024, 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

Autor Tópico: Ajuda Robo Movel  (Lida 1715 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?