nrf24 Transmitter (bis)

kfjl

Member
Code:
/* ARDUINO TRANSMITTER
 *  
 * Arduino Pro Mini 328 5V/16MHz 
 * Power supply:3.3V from computer USB or phone charger, 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 (not used for transmitter)
 */

#include <SPI.h>

const int csn = 10;
const int ce = 7;
const int nrfint = 8;
byte data = 0;

void setup() {

  pinMode(ce,OUTPUT);
  digitalWrite(ce,LOW);
  delay(20);
  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 TX
  
  regWrite(0,10);                  // Power ON, CRC, 1 byte, PTX
  regWrite(4,255);                 // 15 Retries, 4ms wait
  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(225);                      // Flush_TX
  digitalWrite(csn, HIGH);
  
  regWrite(7,112);                        // Clear nrf interrupts    
      
  print_nrf_registers();                    // Check values after config
  
}

void loop() {
  
 digitalWrite(csn,LOW);                      // Write TX payload
 SPI.transfer(160);
 SPI.transfer(data);
 digitalWrite(csn,HIGH);
 
 digitalWrite(ce,HIGH);
 delayMicroseconds(10);                               // Pulse it out
 digitalWrite(ce,LOW); 
 delay(10);
 
 Serial.print("Sent ");
 Serial.println(data);
 
 digitalWrite(csn,LOW);
 SPI.transfer(225);                      // Flush_TX
 digitalWrite(csn, HIGH);
 
 regWrite(7,112);                        // Clear nrf interrupts  
 
 if (data<10){
  data++;
 }
  else{
    data=0;
  }
 delay(1000);   
}

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);              // Add 32 to reg address to write
  SPI.transfer(value);
  digitalWrite(csn, HIGH);
}

void readPipeAddress(int pipe){
  int buf[5];
  digitalWrite(csn, LOW);
  SPI.transfer(pipe+10);                // pipe #0 address is in reg #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);
    }
}
NB: Pour les émetteurs, méfiez-vous des messages "sent". Un émetteur dirait "sent" même s'il n'y avait pas de module nrf24 connecté!

A suivre...
 
Top