nrf24 Receiver (bis)

kfjl

Member
Code:
/* ARDUINO RECEIVER
 *  
 * Arduino Pro Mini 328 5V/16MHz 
 * Power supply:3.3V from computer USB via FTDI. 
 *  
 * NRF                  Arduino
 * Pin      Colour        Pin
 * 1        Black         GND
 * 2        Red           3.3V      THREE POINT THREE !!!.!!!
 * 3        Brown         7         CE
 * 4        White         10        CSN
 * 5        Yellow        13        SCK
 * 6        Green         11        MOSI
 * 7        Orange        12        MISO
 * 8        Grey          8         nrfint PULLUP
 */

#include <SPI.h>

const int csn = 10;
const int ce = 7;
const int nrfint = 8;

void setup() {

  pinMode(ce,OUTPUT);
  digitalWrite(ce,LOW);
  delay(100);
  pinMode(csn, OUTPUT);
  digitalWrite(csn,HIGH);
  pinMode(nrfint, INPUT_PULLUP);
  SPI.begin();
  Serial.begin(9600);
  print_nrf_registers();           // Check Power-On values
  Serial.println();
 
  // CONFIG RX
  
  regWrite(0,11);                  // Power ON, CRC, 1 byte, PRX
  regWrite(6,8);                   // 2Mbps, -18dBm
  for (int reg=17;reg<23;reg++){   // Payload width 1 byte all pipes
    regWrite(reg,1);
    }

  digitalWrite(csn,LOW);
  SPI.transfer(226);                      // Flush_RX
  digitalWrite(csn, HIGH);
  
  regWrite(7,112);                        // Clear nrf interrupts    
      
  print_nrf_registers();                    // Check values after config
  
  digitalWrite(ce,HIGH);                    // Start listening
  Serial.println("Waiting for data....");
}

void loop() {
  
  int data = 0;
  int dataready = digitalRead(nrfint);
  
  if (dataready==LOW){  
    digitalWrite(ce,LOW);                   // Stop listening
    
    digitalWrite(csn, LOW);
    SPI.transfer(97);                     // Read RX_PAYLOAD
    data=SPI.transfer(0);
    
    SPI.transfer(226);                         // Flush_RX
    
    digitalWrite(csn,HIGH);
    regWrite(7,64);                             // Clear RX_DR
    
    Serial.print("Received ");
    Serial.println(data);
                          
    digitalWrite(ce, HIGH);                // Start listening
    Serial.println("Waiting for data....");   
  }    
}

int regRead(int address) {
  digitalWrite(csn, LOW);
  SPI.transfer(address);
  int value=SPI.transfer(0);
  digitalWrite(csn, HIGH);
  return value;
}

void regWrite(byte address, byte value){
  digitalWrite(csn,LOW);
  SPI.transfer(address+32);
  SPI.transfer(value);
  digitalWrite(csn, HIGH);
}

void readPipeAddress(int pipe){
  int buf[5];
  digitalWrite(csn, LOW);
  SPI.transfer(pipe+10);
  for (int i= 0;i<5;i++){
    buf[i]=SPI.transfer(0);
    Serial.print(buf[i]);
   }
  digitalWrite(csn,HIGH);
}

void print_nrf_registers(void){
  int regvalue;
  for (int reg = 0; reg < 10; reg++) {
      regvalue=regRead(reg);
      delay(10);
      Serial.println(regvalue);
    }
    for (int i=0;i<7;i++){
      readPipeAddress(i);
      delay(10);
      Serial.println();
    }
    for (int reg=17;reg<24;reg++){
      regvalue=regRead(reg);
      delay(10);
      Serial.println(regvalue);
    }
}
Je ne vois pas l'utilité d'une liaison Picaxe-Arduino.
Ca ne veut pas dire qu'il n'y en a pas.

A suivre...
 
Top