collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[Ontem às 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: NRF24L01 e Kastduino  (Lida 3173 vezes)

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

Offline kast

  • Mini Robot
  • *
  • Mensagens: 868
NRF24L01 e Kastduino
« em: 11 de Outubro de 2012, 17:18 »
Boas

Estou aqui com um problema em transmitir dados de um kastduino para outro através de um NRFL01.

O código que tenho no emissor é o seguinte:
Código: [Seleccione]
* NO DE DOMOTICA v0.01
 
 */

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"

//
// Configuração do NRF24L01
//

 
RF24 radio(10,9); // Define o RF24L01 radio em bus SPI bus mais os pinos 10 (CE) & 9 (CSN)

unsigned int payload[2];
unsigned int no_id=4;   //alterar o numero do no aqui
unsigned int carga_media;

void setup(void)
{
  Serial.begin(57600);
  analogReference(INTERNAL);
  printf_begin();
  //printf("\n\rRF24/examples/GettingStarted/\n\r");
  printf("DOMOTICA SERVER v0.01\n\r");
  printf("\n\r");
 
  radio.begin(); 
  radio.setChannel(101);   
  radio.setAutoAck(true);
  radio.setDataRate(RF24_250KBPS);
 
  radio.setPayloadSize(16); // define tamanho máximo da var a transmitir
  radio.setRetries(15,15); //define n de tentativas e tempo entre elas
 
//falta definir a potência de emissão

 
  const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL }; // Radio pipe addresses for the 2 nodes to communicate.
  radio.openReadingPipe(1,pipes[0]); // abre o pipe para receber
  radio.openWritingPipe(pipes[1]);  // abre o pipe para enviar
 
  radio.printDetails(); //Mostra os detalhes do radio
  printf("ID do nó\n\r", no_id);
  printf("\n\r");
 
  radio.startListening(); // inicia a escuta
  radio.stopListening();  // Necessario para comecar a enviar dados
 
  printf("\n\rA escuta ...\n\r");
  printf("\n\r");
  pinMode(8, OUTPUT);
  digitalWrite(8, LOW);
}


void loop(void)
{
  // Faz 20 leituras a bateria
  carga_media=0;
 
  for(int i=1;i<21;i++){
      carga_media=carga_media+analogRead(A0);
   }
   
  delay(20);
  radio.powerUp(); //necessario devido ao power down no fim do loop
 
  payload[1]=no_id;
  payload[2]=carga_media/20;
 
  Serial.print("Enviando... ");
  bool ok = radio.write( payload , sizeof(payload));
  if (ok)
  {
     Serial.print("ok ");
     digitalWrite(8, HIGH);
     delay(1);
     digitalWrite(8, LOW);
     Serial.print("ID ");
     Serial.print(payload[1]);
     Serial.print(" Bateria ");
     Serial.println(payload[2]);   
  }
  else
  {
     Serial.println("Erro na transmissão !!!");
  }


radio.powerDown(); // coloca o radio em stand-by
delay(5000);       // espera 5 segundos
}


O código que tenho receptor é o seguinte:
Código: [Seleccione]
/* SERVIDOR DE DOMOTICA v0.01
 
 */

#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#include "printf.h"

//
// Configuração do NRF24L01
//

RF24 radio(10,9); // Define o RF24L01 radio em bus SPI bus mais os pinos 10 (CE) & 9 (CSN)

unsigned int payload[2];

void setup(void)
{
  Serial.begin(57600);
 
  printf_begin();
  //printf("\n\rRF24/examples/GettingStarted/\n\r");
  printf("DOMOTICA SERVER v0.01\n\r");
  printf("\n\r");
 
  radio.begin(); 
  radio.setChannel(101);   
  radio.setAutoAck(true);
  radio.setDataRate(RF24_250KBPS);
 
  radio.setPayloadSize(16); // define tamanho máximo da var a transmitir
  radio.setRetries(15,15); //define n de tentativas e tempo entre elas
 
//falta definir a potência de emissão

 
  const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL }; // Radio pipe addresses for the 2 nodes to communicate.
  radio.openReadingPipe(1,pipes[1]); // abre o pipe para receber
  radio.openWritingPipe(pipes[0]);  // abre o pipe para enviar
 
  radio.printDetails(); //Mostra os detalhes do radio
  printf("ID do server\n\r");
  printf("\n\r");
 
  radio.startListening(); // inicia a escuta
  printf("\n\rA escuta ...\n\r");
  printf("\n\r");
  pinMode(8, OUTPUT);
  digitalWrite(8, LOW);
}

void loop(void)
{

    if ( radio.available() )
    {
      //payload_t payload;
      radio.read( payload, sizeof(payload) );
      Serial.print(sizeof(payload));
      // Print the ID of this message.  Note that the message
      // is sent 'big-endian', so we have to flip it.
      Serial.print("ID ");
      Serial.print(payload[1]);
      Serial.print(" Bateria ");
      Serial.println(payload[2]);
      //printf("#%05u ID ",flip_endian(payload.id)); // mostra o id do emissor

      //printf("%s Bateria ",payload.bstatus); // mostra o estado da bateria
      //printf("\n\r");
     
      digitalWrite(8, HIGH);   // turn the LED on (HIGH is the voltage level)
      delay(1);               // wait for a second
      digitalWrite(8, LOW);    // turn the LED off by making the voltage LOW 
    }
}

//
// Helper functions
//

// Change a big-endian word into a little-endian
uint16_t flip_endian(uint16_t in)
{
  uint16_t low = in >> 8;
  uint16_t high = in << 8;

  return high | low;
}


No entanto o resultado que obtenho no receptor é:
Código: [Seleccione]
4ID 3 Bateria 2577
4ID 4 Bateria 3639
4ID 2 Bateria 3719
4ID 3 Bateria 7476
4ID 4 Bateria 8547
4ID 2 Bateria 8628

Alguém me consegue explicar qual o problema ?

A mim parece-me que isto acontece quando é "descodificado" o payload[2] no receptor, porque no lado do emissor tudo é emitido como deve de ser.

A referência interna do atmega também não está a funcionar, talvez devido à falta do condensador entre o ARef e o GND referido pelo senso.
Os electrões são nossos amigos !!! :D

Offline kast

  • Mini Robot
  • *
  • Mensagens: 868
Re: NRF24L01 e Kastduino
« Responder #1 em: 12 de Outubro de 2012, 02:09 »
Resolvido !!!
Os electrões são nossos amigos !!! :D