LusoRobótica - Robótica em Português

Software => Software e Programação => Tópico iniciado por: Flavio21 em 25 de Abril de 2011, 16:05

Título: Programação nRF24L01
Enviado por: Flavio21 em 25 de Abril de 2011, 16:05
Boas..

Preciso de ajuda a configurar duas destas (nRF24L01 (http://www.arduino.cc/playground/InterfacingWithHardware/Nrf24L01)), uma como receptor outra como emissor..

No emissor tenho dois potenciómetros, frente e trás, e esquerda direita..   E gostava quando mexesse o potenciómetro para a frente manda-se sinal de "w" para a outra placa se isto for possível..

A programação que tenho é este, do user XicoMBD, para a pcb que eles fez para controlar os motores.. Agora queria juntar a nRF24L01 para funcionar como receptor..

Código: [Seleccione]
int normalSpeed = 200; // General speed
int spinSpeed = 200; // Spins Speed


void setup(){
  Serial.begin(9600);
}


void loop(){
  if (Serial.available() > 0) {
  char motors = Serial.read();
   switch(motors) {
    case 'w':
        analogWrite(5,0);
        analogWrite(6,normalSpeed);
        analogWrite(9,0);
        analogWrite(10,normalSpeed);
     break;
    case 's':
        analogWrite(5,normalSpeed);
        analogWrite(6,0);
        analogWrite(9,normalSpeed);
        analogWrite(10,0);
     break;
    case 'a':
        analogWrite(5,0);
        analogWrite(6,spinSpeed);
        analogWrite(9,spinSpeed);
        analogWrite(10,0);
     break;
    case 'd':
        analogWrite(5,spinSpeed);
        analogWrite(6,0);
        analogWrite(9,0);
        analogWrite(10,spinSpeed);
     break;
   case 'g':
        analogWrite(5,0);
        analogWrite(6,0);
        analogWrite(9,0);
        analogWrite(10,0);
      break;
   } 
  }
}

Deixo aqui a layout do "comando"..

(https://lusorobotica.com/proxy.php?request=http%3A%2F%2Fimg847.imageshack.us%2Fimg847%2F2880%2Fflavio3.png&hash=62b025a7a67c8d5d5ce2f7b72f3be768b5572730)

Cumps


Título: Re: Programação nRF24L01
Enviado por: senso em 25 de Abril de 2011, 16:14
E porque não mandas os valores dos potenciometros?
Assim tens logo controlo de velocidade e direcção.
Título: Re: Programação nRF24L01
Enviado por: Flavio21 em 25 de Abril de 2011, 16:23
E porque não mandas os valores dos potenciometros?
Assim tens logo controlo de velocidade e direcção.

Não sabia que isso dava para fazer..
Nem sei como fazer..  andei  aqui a ver (http://www.arduino.cc/playground/Portugues/LearningAnalogInput) mas não me entendi :x

Título: Re: Programação nRF24L01
Enviado por: senso em 25 de Abril de 2011, 16:28
Não consegues perceber como funciona?
Então como é que estás a pensar ler os potenciometros para enviar o tal 'w'?
Título: Re: Programação nRF24L01
Enviado por: Flavio21 em 25 de Abril de 2011, 16:44
Não consegues perceber como funciona?
Então como é que estás a pensar ler os potenciometros para enviar o tal 'w'?

Nem por isso, o tal "w" era a minha primeira ideia, se da para controlar logo a velocidade e direcção melhor.. Só não sei é como..
Título: Re: Programação nRF24L01
Enviado por: senso em 25 de Abril de 2011, 17:15
Então mandas fazer um pcb com uns joysticks que nem sequer sabes como usar?
Não tens nenhum potenciometro?
Ligas como está nesse link, mexes nele e vê os valores a mudar na porta serial.
É das coisas mais faceis de usar e perceber..
Título: Re: Programação nRF24L01
Enviado por: Flavio21 em 25 de Abril de 2011, 17:27
Então mandas fazer um pcb com uns joysticks que nem sequer sabes como usar?
Não tens nenhum potenciometro?
Ligas como está nesse link, mexes nele e vê os valores a mudar na porta serial.
É das coisas mais faceis de usar e perceber..

Eu sabia que era possível fazer, só não sei como..
Tão vou testar isso a ver se pesco alguma coisa..
Título: Re: Programação nRF24L01
Enviado por: senso em 25 de Abril de 2011, 17:27
Até está em portugues, é só ler e fazer.
Título: Re: Programação nRF24L01
Enviado por: Flavio21 em 25 de Abril de 2011, 19:54
Até está em portugues, é só ler e fazer.

E em relação em enviar os dados, encontrei isto. Posso aproveitar isto.?

Código: [Seleccione]
#include <Spi.h>
#include <mirf.h>

// converts a float into a char
// and sends it via nRF24L01
void transmit( float v)
{
  byte c;
  char buf[10];
 
  dtostrf(v,9,3,buf);

  for( int i=0 ; i<8 ; i++ )
  {
    c = buf[i];
    Mirf.send(&c);
    while( Mirf.isSending() ) ;
  }
}

// sends a string via the nRF24L01
void transmit(const char *string)
{
  byte c;
 
  for( int i=0 ; string[i]!=0x00 ; i++ )
  {
    c = string[i];
    Mirf.send(&c);
    while( Mirf.isSending() ) ;
  }
}

// send a CR/LF sequence via the nRF24L01
void transmitlf(void)
{
  byte c;
 
  c = '\r';
  Mirf.send(&c);
    while( Mirf.isSending() ) ;
 
  c = '\n';
  Mirf.send(&c);
    while( Mirf.isSending() ) ;
}

void setup()
{
 
  // init the transceiver
  Mirf.init();
 
  // we transmit only a single byte each time
  Mirf.payload = 1;
 
  // selecting a channel which is not too noisy
  Mirf.channel = 90;
  Mirf.config();
 
  // Set 1MHz data rate
  Mirf.configRegister(RF_SETUP,0x06);
 
  // Set address - this one must match the
  // address the receiver is using!
  Mirf.setTADDR((byte *)"TX_01");
}

void loop()
{
  float v01,v02;
 
  // read in some values
  v01 = analogRead(0);
  v02 = analogRead(1);
 
  // transmit a fixed token
  transmit(" : ");
 
  // transmit the first value
  transmit(v01);
 
  // transmit a separator
  transmit(" : ");
 
  // transmit a second token
  transmit(v02);
 
  // transmit a CR/LF for the PC
  // software to sync to
  transmitlf();
 
  // ... just take your time
  delay(100);
}
Título: Re: Programação nRF24L01
Enviado por: senso em 25 de Abril de 2011, 22:33
Depende, o analogRead retorna um inteiro entre 0 e 1023, e não um float..