RESOLU transmettre données binaire avec NRF24l01


bonjour, comme le dit le titre je cherche transmettre un mot binaire de 4 bits (roue codeuse) avec un nrf24l01. aucun problème avec les floats, ça marche.
comment faire avec le binaire ?
cordialement.
marcus.
//****************     convertion decimal binaire       ***********
void toint( int digit)
{   
     {for (int i=digit-1;i>-1;i--)
     { 
      if (nombre==1)
      { if      (i==3){decimal=decimal+8; ddrd = ddrd | b00100000;}//roue codeuse pd5 pd3 pd4 pd5 pin 11
        else{if (i==2){decimal=decimal+4; ddrd = ddrd | b00010000;}//roue codeuse pd4 pd3 pd4 pd5 pin 6
        else{if (i==1){decimal=decimal+2; ddrd = ddrd | b00001000;}//roue codeuse pd3 pd3 pd4 pd5 pin 5
        else{if (i==0){decimal=decimal+1; ddrd = ddrd | b00000100;}//roue codeuse pd2 pd3 pd4 pd5 pin 4
      }}}}}}
      portd = ddrd;}// applique sur le port d
     
void tobin(int valeur, int digit)
{   
     int i;
     int temp;
     temp=valeur;
     for (i=0;i<digit;i++)
     { 
     nombre=temp & 1;  // prend le lsb et le sauve dans nombre
     temp = temp >> 1;    // décalage d'un bit sur la droite
     }
}
//****************************************************************
int eeprom (int valeureeprom, int blocage )
{
 
  rc = valeureeprom;
     tobin(rc,4);
     for (int f =3;f>-1;f--){}   
     toint(4);
}

code: [select]
// emetteur roue codeuse montage dans l'habitacle
// recois l'info et affiche la led de vie
// emission vers habitacle l'etat haut de la led de vie


#include <spi.h>      // pour la communication via le port spi
#include <mirf.h>     // pour la gestion de la communication
#include <nrf24l01.h> // pour les définitions des registres du nrf24l01
#include <mirfhardwarespidriver.h> // pour la communication spi
int valeur2 = 999;
int diode;
int temp;
int packet[6]; // 6 pour future montage
int packet2[6];// 6 pour future montage

void setup() {
 int pinmode(2,output);
// serial.begin(9600);

  mirf.cepin = 9; // broche ce sur d9
  mirf.csnpin = 10; // broche csn sur d10
  mirf.spi = &mirfhardwarespi; // on veut utiliser le port spi hardware
  mirf.init(); // initialise la bibliothèque
  mirf.channel = 1; // choix du canal de communication (128 canaux disponibles, de 0 à 127)
  mirf.payload = sizeof(int)*6; // taille d'un message (maximum 32 octets)
  mirf.config(); // sauvegarde la configuration dans le module radio
  mirf.settaddr((byte *) "nrf01"); // adresse de transmission
  mirf.setraddr((byte *) "nrf02"); // adresse de réception
}
 
void loop()
{

 if(mirf.dataready())
 {
  mirf.getdata((byte *) &packet); // réception du paquet
  diode=packet[2];
  }

while (diode==2)
{
  digitalwrite(2,high);// led
  /*
  serial.print("recus valeur roue codeuse = :");
  serial.println(packet[0]); 
  serial.print("recus temperature moteur = :");
  serial.println(packet[1]);
  serial.print("recus led de vie = :");
  serial.println(packet[2]);
  */
  mirf.getdata((byte *) &packet); // réception du paquet
  diode=packet[2];
}

while (diode==4)
{
digitalwrite(2,low);// led

/*serial.print("affiche valeur roue codeuse :");
serial.println(packet2[0]); // affiche la valeur roue codeuse
serial.print("affiche valeur roue codeuse moteur :");
serial.println(packet[0]); // affiche la valeur roue codeuse moteur
*/
// lecture roue codeuse
// mise en plce des packets
packet2[0] = valeur2; //valeur de la roue codeuse
  mirf.send((byte *)&packet2); // on envoi le packet
  while(mirf.issending()); // on attend la fin de l'envoi
  delay(5);
  mirf.getdata((byte *) &packet); // réception du paquet
  diode=packet[2];
}
}








code: [select]
/*
   * emetteur montage avec l'injection
   * memorise la roue codeuse
   * informe le micro d'injection pour le %
   * envoie l'information pour la led de vie
   * envoie la temperature moteur
   *
   * ce  sur pin 15
   * csn sur pin 16
   * mosi pin 17
   * miso pin 18
   * sck  pin 19
   * roue codeuse pd2 pd3 pd4 pd5 pin 4-5-6-11
   * diode de vie pb0 pin 14
   * température moteur pc5 pin 28
   * pc0 à pc4 utilisation future pin 23 à pin 27
   * emission l'eta bas de la led de vie
   */
#include <eeprom.h>   // gestion eeprom
#include <spi.h>      // pour la communication via le port spi
#include <mirf.h>     // pour la gestion de la communication
#include <nrf24l01.h> // pour les définitions des registres du nrf24l01
#include <mirfhardwarespidriver.h> // pour la communication spi

int valeur=255; //roue codeuse
int diode;      // envoi information led de vie
int diode2;     // information led de vie
int temp=35;    // temperature moteur
int packet[6];  // envoi les information l'habitacle
int packet2[6]; // reception pour confirmation de modification roue codeuse

void setup()
{
int pinmode(8,input);
//serial.begin(9600);
  portd = b11111100; // high modifier pour 30%
  portd = portd | b11111100;// en sorties sauf pin 2 et 3 rx et tx
 // pord pin 2 à 6 et 12-13
 // portb pin 9-10-14 à 19(15 à 19 utiliser pour le nrf24l01)
  portb = portb | b00000001;// pour la lecture de la led de vie pbo pin 14
  mirf.cepin = 9; // broche ce sur pin 15
  mirf.csnpin = 10; // broche csn sur pin 16
  mirf.spi = &mirfhardwarespi; // on veut utiliser le port spi hardware
  mirf.init(); // initialise la bibliothèque
  mirf.channel = 1; // choix du canal de communication (128 canaux disponibles, de 0 à 127)
  mirf.payload = sizeof(int)*6; // taille d'un message (maximum 32 octets)
  mirf.config(); // sauvegarde la configuration dans le module radio
  mirf.settaddr((byte *) "nrf02"); // adresse de transmission
  mirf.setraddr((byte *) "nrf01"); // adresse de réception

}
 
void loop()
{
//temp = analogread(5); // lecture temperature moteur
// lecture roue codeuse

if ((pinb & (1 << 0))>>0== low)// lecture pb0
{diode2=2;}
if ((pinb & (1 << 0))>>0== high)
{diode2=4;}
// mise en place des packets 
packet[0] = valeur;
packet[1] = temp;
packet[2] = diode2;   
 
 while((pinb & (1 << 0))>>0== low)// envoi si pb0= low
{
  mirf.send((byte *) &packet); // on envoie les données si pb0=0
 /*
  serial.print(" envoi valeur roue codeuse: ");
  serial.println(packet[0]);
  serial.print(" envoi temp moteur : ");
  serial.println(packet[1]);
  serial.print(" envoi etat led : ");// 2 bas
  serial.println(packet[2]);
  */
  while(mirf.issending()); // on attend la fin de l'envoi 
}

while ((pinb & (1 << 0))>>0== high)// on recois les données si pb0=1

   diode=4;
   packet[2] = diode;
   mirf.send((byte *) &packet); // on envoie pour la led de vie
   while(mirf.issending()); // on attend la fin de l'envoi
   delay(5);
   mirf.getdata((byte *) &packet2); // réception habitacle
 /*
  serial.print("recus roue codeuse:");
  serial.println(packet2[0]); // affiche roue codeuse
 
  serial.print("lecture led de vie:");
  serial.println(packet[2]); // affiche led
 
  serial.print("lecture pinb:");
  serial.println(pinb,bin);
  */
  // controle si modification roue codeuse habitacle
  // si mofication on fait une pause
  // recontrole pour etre sur
  // modification de la valeur en eeprom
//  }
}
}   // fin de la boucle


Arduino Forum > International > Français (Moderators: jfs, Snootlab) > RESOLU transmettre données binaire avec NRF24l01


arduino

Comments

Popular posts from this blog

DHT11 Time out error using v0.4.1library

Sketch upload fails with Java error (___REMOVE___/bin/avrdude)!

Arduino Uno + KTY81/210 temperature sensor