collapse

* Links de Robótica

* Posts Recentes

Ajuda Projecto IR / RF por Gb
[Hoje às 16:01]


Medir Agua que está no Poço por edeweld
[Ontem às 09:15]


CNC Laser 60w por nandotx
[15 de Outubro de 2017, 19:01]


Equipar laboratorio por LVirtual
[13 de Outubro de 2017, 08:34]


Arranjo de Berbequim por jm_araujo
[13 de Outubro de 2017, 08:34]


Escolher ligações por dropes
[08 de Outubro de 2017, 23:26]


Perfis V-Slot vs C-Beam vs Bosch vs 8020 por senso
[08 de Outubro de 2017, 18:22]


Ideias para construir um quadrúpede simples por Njay
[07 de Outubro de 2017, 22:12]


Meu projecto - Arm Robot com arduino por Diogo Bento
[05 de Outubro de 2017, 20:54]


Alimentar arduino nano com 12V por helderjsd
[05 de Outubro de 2017, 16:26]

Autor Tópico: Programação nRF24L01  (Lida 3101 vezes)

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

Offline Flavio21

  • Mini Robot
  • *
  • Mensagens: 59
  • xD
Programação nRF24L01
« em: 25 de Abril de 2011, 16:05 »
Boas..

Preciso de ajuda a configurar duas destas (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"..



Cumps


xD

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.397
  • Helpdesk do sitio
Re: Programação nRF24L01
« Responder #1 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.
Avr fanboy

Offline Flavio21

  • Mini Robot
  • *
  • Mensagens: 59
  • xD
Re: Programação nRF24L01
« Responder #2 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 mas não me entendi :x

xD

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.397
  • Helpdesk do sitio
Re: Programação nRF24L01
« Responder #3 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'?
Avr fanboy

Offline Flavio21

  • Mini Robot
  • *
  • Mensagens: 59
  • xD
Re: Programação nRF24L01
« Responder #4 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..
xD

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.397
  • Helpdesk do sitio
Re: Programação nRF24L01
« Responder #5 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..
Avr fanboy

Offline Flavio21

  • Mini Robot
  • *
  • Mensagens: 59
  • xD
Re: Programação nRF24L01
« Responder #6 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..
xD

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.397
  • Helpdesk do sitio
Re: Programação nRF24L01
« Responder #7 em: 25 de Abril de 2011, 17:27 »
Até está em portugues, é só ler e fazer.
Avr fanboy

Offline Flavio21

  • Mini Robot
  • *
  • Mensagens: 59
  • xD
Re: Programação nRF24L01
« Responder #8 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);
}
xD

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.397
  • Helpdesk do sitio
Re: Programação nRF24L01
« Responder #9 em: 25 de Abril de 2011, 22:33 »
Depende, o analogRead retorna um inteiro entre 0 e 1023, e não um float..
Avr fanboy