collapse

* Links de Robótica

* Posts Recentes

URGENTE - display de 7 segmentos com backpack por helderjsd
[Hoje às 14:25]


Preços e fabricantes de pcb por Sérgio_Sena
[Hoje às 10:20]


Palavras Cruzadas por Njay
[Hoje às 02:24]


Isaac Asimov - I, Robot por senso
[Ontem às 03:41]


Apresentação por TigPT
[17 de Setembro de 2017, 07:31]


ic SL440 da Plessey? por senso
[16 de Setembro de 2017, 13:11]


Compra Colectiva RS-Amidata por brunus
[15 de Setembro de 2017, 22:31]


Ideias para construir um quadrúpede simples por zordlyon
[15 de Setembro de 2017, 10:18]


Preparar bancada de testes por jm_araujo
[14 de Setembro de 2017, 10:24]


Mitos: mudança da ilumação tradicional p/ iluminação a LEDs? por LVirtual
[14 de Setembro de 2017, 07:46]

Autor Tópico: Duvida no codigo  (Lida 1683 vezes)

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

Offline DFC17

  • Mini Robot
  • *
  • Mensagens: 43
Duvida no codigo
« em: 09 de Setembro de 2012, 15:12 »
Boas sou um principiante no codigo de arduino, e tenho uma duvida que espero que alguem me consiga ajudar, o codigo e o seguinte:

Citar
t dataIn = 'S';        //Character/Data coming from the phone.
int tras = 11;     //Pin that controls the car's Forward-Back motor.
int direita = 12;       //Pin that controls the car's Left-Right motor.
int frente = 13;  //Pin that enables/disables Left-Right motor.
int esquerda = 3;    //Pin that sets the speed for the Left-Right motor.
int luzes1 = 4;    //Pin that activates the Front lights.
int luzes2 = 7;    //Pin that activates the Back lights.
int determinant;         //Used in the check function, stores the character received from the phone.
int det;                 //Used in the loop function, stores the character received from the phone.
int velocity = 0;

void setup() 
{       
//*************NOTE: If using Bluetooth Mate Silver use 115200 btu
//                   If using MDFLY Bluetooth Module use 9600 btu
Serial.begin(115200);  //Initialize serial communication with Bluetooth module at 115200 btu.
pinMode(frente, OUTPUT);
pinMode(tras, OUTPUT);
pinMode(direita, OUTPUT);
pinMode(esquerda, OUTPUT);
pinMode(luzes1 , OUTPUT);
pinMode(luzes2 , OUTPUT);
}

void loop()

    det = check();
      while (det == 'F')   //if incoming data is a F, move forward
      {     
          digitalWrite(tras, HIGH);
          digitalWrite(esquerda, HIGH);
          digitalWrite(direita, HIGH);
          digitalWrite(frente, HIGH);
         
          det = check();           
      }   
      while (det == 'B')   //if incoming data is a B, move back
      {     
          digitalWrite(tras, HIGH);
          digitalWrite(esquerda, HIGH);
          digitalWrite(direita, LOW);
          digitalWrite(frente, LOW);
          det = check();           
      } 

      while (det == 'L')   //if incoming data is a L, move wheels left
      {     
          digitalWrite(tras, LOW);
          digitalWrite(esquerda, HIGH);
          digitalWrite(direita, HIGH);
          digitalWrite(frente, LOW);       
          det = check();           
      }   
      while (det == 'R')   //if incoming data is a R, move wheels right
      {     
          digitalWrite(tras, HIGH);
          digitalWrite(esquerda, LOW);
          digitalWrite(direita, LOW);
          digitalWrite(frente, HIGH);         
          det = check();           
      }
                           
      while (det == 'U')   //if incoming data is a U, turn ON front lights
      {
          digitalWrite(luzes1, HIGH);           
          det = check(); 
      }
      while (det == 'u')   //if incoming data is a u, turn OFF front lights
      {
          digitalWrite(luzes1, LOW);           
          det = check(); 
      }
      while (det == 'W')   //if incoming data is a W, turn ON back lights
      {
          digitalWrite(luzes2, HIGH);           
          det = check(); 
      }
      while (det == 'w')   //if incoming data is a w, turn OFF back lights
      {
          digitalWrite(luzes2, LOW);
          det = check(); 
      }
}

int check()
{
  if (Serial.available() > 0)    //Check for data on the serial lines.
  {   
    dataIn = Serial.read();  //Get the character sent by the phone and store it in 'dataIn'.
        if (dataIn == 'F')
        {     
          determinant = 'F';
        }   
        else if (dataIn == 'B')
        { 
          determinant = 'B'; 
        }
        else if (dataIn == 'L')   
        { 
          determinant = 'L';
        }
        else if (dataIn == 'R')   
        { 
          determinant = 'R';
        } 
        else if (dataIn == 'S') 
        {
          determinant = 'S';
        }
        else if (dataIn == 'U') 
        {
          determinant = 'U';
        }
        else if (dataIn == 'u') 
        {
          determinant = 'u';
        }
        else if (dataIn == 'W') 
        {
          determinant = 'W';
        }
       
        else if (dataIn == 'w') 
        {
          determinant = 'w';
        }
  }
return determinant;
}/quote]

consiste num carro de dois motores controlado por um telemovel android atraves de bluetooth, onde recebe os dados e o ardumoto faz andar os motores, ele funciona bem, o problema e que quero que so ande enquanto primo o botao no android, como posso fazer isso no codigo? Este codigo foi reestruturado de um outro codigo...

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.223
    • Clube de Robotica
Re: Duvida no codigo
« Responder #1 em: 09 de Setembro de 2012, 15:26 »
acho que se for algo simples como ligar e desligar podes usar um loop como "do...while"

enquanto o botão tiver ativado então os motores andam, caso contrario não andam
Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/

Offline andlig

  • Mini Robot
  • *
  • Mensagens: 141
Re: Duvida no codigo
« Responder #2 em: 09 de Setembro de 2012, 15:34 »
luis RA consegues-me ajudar em relacao ao topico com o nome problema com arduino??

muito obrigado, era muito importante se nao conseguir nao posso continuar com o projecto ja tem la o esquema que estou a usar se poder experimentar agradecia

mais uma vez muito obrigado

em relacao a este problema infelizmente nao posso ajudar tb sou um novato nisto de programacao

Offline DFC17

  • Mini Robot
  • *
  • Mensagens: 43
Re: Duvida no codigo
« Responder #3 em: 09 de Setembro de 2012, 15:50 »
podes dar me um exemplo para um botao, por exemplo quando ele recebe o "F" para andar para a frente?? e que nao percebi muito bem

Offline LuísR.A.

  • Mini Robot
  • *
  • Mensagens: 1.223
    • Clube de Robotica
Re: Duvida no codigo
« Responder #4 em: 09 de Setembro de 2012, 17:56 »
nao te sei dizer muito bem com o android mas seria algo assim

Do
{
 
}while (dataIn = 'F');

metes nesse loop o que queres que faça enquanto dataIn=F. Caso não seja F ele devera sair do loop

Tiva MCU é que é.

Tutoriais Tiva+codigos exemplo:
https://sites.google.com/site/luiselectronicprojects/

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Duvida no codigo
« Responder #5 em: 09 de Setembro de 2012, 18:41 »
nao te sei dizer muito bem com o android mas seria algo assim

Do
{
 
}while (dataIn = 'F');

metes nesse loop o que queres que faça enquanto dataIn=F. Caso não seja F ele devera sair do loop
Isso não resulta.

DFC17,
Não precisas usar while's. Podes usar apenas if's. Para parar, podes enviar uma mensagem para parar do Android, ou parar quando não recebe nenhuma mensagem do Android há algum tempo.

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Duvida no codigo
« Responder #6 em: 09 de Setembro de 2012, 18:59 »
Editei o código:
Código: [Seleccione]
int dataIn = 'S';        //Character/Data coming from the phone.
int tras = 11;     //Pin that controls the car's Forward-Back motor.
int direita = 12;       //Pin that controls the car's Left-Right motor.
int frente = 13;  //Pin that enables/disables Left-Right motor.
int esquerda = 3;    //Pin that sets the speed for the Left-Right motor.
int luzes1 = 4;    //Pin that activates the Front lights.
int luzes2 = 7;    //Pin that activates the Back lights.
int determinant;         //Used in the check function, stores the character received from the phone.
int det;                 //Used in the loop function, stores the character received from the phone.
int velocity = 0;
unsigned long tempo = 0;

void setup()
{       
//*************NOTE: If using Bluetooth Mate Silver use 115200 btu
//                   If using MDFLY Bluetooth Module use 9600 btu
Serial.begin(115200);  //Initialize serial communication with Bluetooth module at 115200 btu.
pinMode(frente, OUTPUT);
pinMode(tras, OUTPUT);
pinMode(direita, OUTPUT);
pinMode(esquerda, OUTPUT);
pinMode(luzes1 , OUTPUT);
pinMode(luzes2 , OUTPUT);
}

void loop()
{
    det = check();
      if (det == 'F')   //if incoming data is a F, move forward
      {     
          digitalWrite(tras, HIGH);
          digitalWrite(esquerda, HIGH);
          digitalWrite(direita, HIGH);
          digitalWrite(frente, HIGH);
      }   
      else if(det == 'B')   //if incoming data is a B, move back
      {     
          digitalWrite(tras, HIGH);
          digitalWrite(esquerda, HIGH);
          digitalWrite(direita, LOW);
          digitalWrite(frente, LOW);   
      }
      else if (det == 'L')   //if incoming data is a L, move wheels left
      {     
          digitalWrite(tras, LOW);
          digitalWrite(esquerda, HIGH);
          digitalWrite(direita, HIGH);
          digitalWrite(frente, LOW);
      }   
      else if (det == 'R') //if incoming data is a R, move wheels right
      {     
          digitalWrite(tras, HIGH);
          digitalWrite(esquerda, LOW);
          digitalWrite(direita, LOW);
          digitalWrite(frente, HIGH);
      }
      else if (det == 'P') Parar();
      else if (det == 'U')   //if incoming data is a U, turn ON front lights
          digitalWrite(luzes1, HIGH);           
      else if (det == 'u')   //if incoming data is a u, turn OFF front lights
          digitalWrite(luzes1, LOW);           
      else if (det == 'W')   //if incoming data is a W, turn ON back lights
          digitalWrite(luzes2, HIGH);           
      else if (det == 'w')   //if incoming data is a w, turn OFF back lights
          digitalWrite(luzes2, LOW);'
     
      if ((millis()-tempo)>500)
      {Parar(); det == 'P';}
}

void Parar()
{
  digitalWrite(tras, LOW);
  digitalWrite(esquerda, LOW);
  digitalWrite(direita, LOW);
  digitalWrite(frente, LOW);
}

int check()
{
  if (Serial.available() > 0)    //Check for data on the serial lines.
  {   
    dataIn = Serial.read();  //Get the character sent by the phone and store it in 'dataIn'.
        if (dataIn == 'F')
        {     
          determinant = 'F';
          tempo = millis();
        }   
        else if (dataIn == 'B')
        {
          determinant = 'B';
          tempo = millis();
        }
        else if (dataIn == 'L')   
        {
          determinant = 'L';
          tempo = millis();
        }
        else if (dataIn == 'R')   
        {
          determinant = 'R';
          tempo = millis();
        }
        else if (dataIn == 'S')
        {
          determinant = 'S';
        }
        else if (dataIn == 'U')
        {
          determinant = 'U';
        }
        else if (dataIn == 'u')
        {
          determinant = 'u';
        }
        else if (dataIn == 'W')
        {
          determinant = 'W';
        }
       
        else if (dataIn == 'w')
        {
          determinant = 'w';
        }
  }
return determinant;
}

O código para parar é este?:
Código: [Seleccione]
digitalWrite(tras, LOW);
  digitalWrite(esquerda, LOW);
  digitalWrite(direita, LOW);
  digitalWrite(frente, LOW);

Offline DFC17

  • Mini Robot
  • *
  • Mensagens: 43
Re: Duvida no codigo
« Responder #7 em: 09 de Setembro de 2012, 19:28 »
sim e, mas tambem nao pode ter os tempos, ja experimentei e o meu robo so anda meio segundo de cada vez, tenho de voltar a carregar no botao para ele voltar a andar mais meio segundo, obrigado na mesma :)

Offline Pedrock

  • Mini Robot
  • *
  • Mensagens: 279
Re: Duvida no codigo
« Responder #8 em: 09 de Setembro de 2012, 19:43 »
sim e, mas tambem nao pode ter os tempos, ja experimentei e o meu robo so anda meio segundo de cada vez, tenho de voltar a carregar no botao para ele voltar a andar mais meio segundo, obrigado na mesma :)
O código do Arduino está correcto então.
Tu é que fizeste a app para android? Tens que fazer com que a app envie o sinal para andar várias vezes e não apenas uma quando clicas no botão. E quando largares o botão pode enviar um 'P' para parar imediatamente.

Offline DFC17

  • Mini Robot
  • *
  • Mensagens: 43
Re: Duvida no codigo
« Responder #9 em: 09 de Setembro de 2012, 19:48 »
Obrigado a todos ja descobri o problema :P ja ta resolvido :) fica aqui o codigo a quem quiser brincar com o programa android bluetooth RC disponivel no android market :)

Este codigo apenas funciona para controlar 2 motores e leds :)

Citar
int dataIn = 'S';        //Character/Data coming from the phone.
int tras = 11;     //Pin that controls the car's Forward-Back motor.
int direita = 12;       //Pin that controls the car's Left-Right motor.
int frente = 13;  //Pin that enables/disables Left-Right motor.
int esquerda = 3;    //Pin that sets the speed for the Left-Right motor.
int luzes1 = 4;    //Pin that activates the Front lights.
int luzes2 = 7;    //Pin that activates the Back lights.
int determinant;         //Used in the check function, stores the character received from the phone.
int det;                 //Used in the loop function, stores the character received from the phone.
int velocity = 0;

void setup() 
{       
//*************NOTE: If using Bluetooth Mate Silver use 115200 btu
//                   If using MDFLY Bluetooth Module use 9600 btu
Serial.begin(115200);  //Initialize serial communication with Bluetooth module at 115200 btu.
pinMode(frente, OUTPUT);
pinMode(tras, OUTPUT);
pinMode(direita, OUTPUT);
pinMode(esquerda, OUTPUT);
pinMode(luzes1 , OUTPUT);
pinMode(luzes2 , OUTPUT);
}

void loop()

    det = check();
     while (det == 'F')   //if incoming data is a F, move forward
      {     
          digitalWrite(tras, HIGH);
          digitalWrite(esquerda, HIGH);
          digitalWrite(direita, HIGH);
          digitalWrite(frente, HIGH);
         
          det = check();           
      }   
     while (det == 'B')   //if incoming data is a B, move back
      {     
          digitalWrite(tras, HIGH);
          digitalWrite(esquerda, HIGH);
          digitalWrite(direita, LOW);
          digitalWrite(frente, LOW);
          det = check();           
      } 

      while (det == 'L')   //if incoming data is a L, move wheels left
      {     
          digitalWrite(tras, LOW);
          digitalWrite(esquerda, HIGH);
          digitalWrite(direita, HIGH);
          digitalWrite(frente, LOW);       
          det = check();           
      }   
     while (det == 'R')   //if incoming data is a R, move wheels right
      {     
          digitalWrite(tras, HIGH);
          digitalWrite(esquerda, LOW);
          digitalWrite(direita, LOW);
          digitalWrite(frente, HIGH);         
          det = check();           
      }
     
      while (det == 'S')   //if incoming data is a I, turn right forward
      {     
         digitalWrite(tras, LOW);
          digitalWrite(esquerda, LOW);
          digitalWrite(direita, LOW);
          digitalWrite(frente, LOW);         
          det = check();           
      } 
                           
      while (det == 'U')   //if incoming data is a U, turn ON front lights
      {
          digitalWrite(luzes1, HIGH);           
          det = check(); 
      }
      while (det == 'u')   //if incoming data is a u, turn OFF front lights
      {
          digitalWrite(luzes1, LOW);           
          det = check(); 
      }
      while (det == 'W')   //if incoming data is a W, turn ON back lights
      {
          digitalWrite(luzes2, HIGH);           
          det = check(); 
      }
      while (det == 'w')   //if incoming data is a w, turn OFF back lights
      {
          digitalWrite(luzes2, LOW);
          det = check(); 
      }
}

int check()
{
  if (Serial.available() > 0)    //Check for data on the serial lines.
  {   
    dataIn = Serial.read();  //Get the character sent by the phone and store it in 'dataIn'.
        if (dataIn == 'F')
        {     
          determinant = 'F';
        }   
        else if (dataIn == 'B')
        { 
          determinant = 'B'; 
        }
        else if (dataIn == 'L')   
        { 
          determinant = 'L';
        }
        else if (dataIn == 'R')   
        { 
          determinant = 'R';
        } 
        else if (dataIn == 'S') 
        {
          determinant = 'S';
        }
        else if (dataIn == 'U') 
        {
          determinant = 'U';
        }
        else if (dataIn == 'u') 
        {
          determinant = 'u';
        }
        else if (dataIn == 'W') 
        {
          determinant = 'W';
        }
       
        else if (dataIn == 'w') 
        {
          determinant = 'w';
        }
  }
return determinant;
}