RESOLU transmettre données binaire avec NRF24l01

Bonjour, comme le dit le titre je cherche a 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);*
}

// Emetteur roue codeuse montage dans l'habitacle
// Recois l'info et affiche la LED de vie
// Emission vers habitacle a 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];
}
}
/* 
   * 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 a 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 a l'habitacle
int packet2[6]; // reception pour confirmation de modification roue codeuse

void setup()
{
int pinMode(8,INPUT); 
//Serial.begin(9600);
  PORTD = B11111100; // HIGH a 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

marcus_95:
Bonjour, comme le dit le titre je cherche a 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.

bonsoir
le binaire ce n'est qu'une convention de représentation
une roue codeuse sur 4 bits peut representer une valeur entiere comprise entre 0 et 15 (0 à 9 en codage BCD)
tu transmet simplement cette valeur entiere

Bonsoir, donc j'envoi 3 (0011) lecture du PORTD, je reçois 3 a distance (aucun problème), comment le convertir en Binaire pour commuter l'autre PORTD d'un 328P.
Cdt.
Marcus.

J'ai pensé a une boucle qui part de 2 à 15 avec traduction en binaire ex 9=1001 et commuter le port en direct.
Une autre idée.
Cdt.
Marcus.

marcus_95:
Bonsoir, donc j'envoi 3 (0011) lecture du PORTD, je reçois 3 a distance (aucun problème), comment le convertir en Binaire pour commuter l'autre PORTD d'un 328P.
Cdt.
Marcus.

il semble que tu utilise ta roue codeuse sur les pins 4 5 6 11
il faut simplement utiliser un masque binaire ( bitwise & ) avec la valeur reçue et mettre à HIGH ou LOW les sorties en respectant les poids forts/faible

oui 4 5 6 11 sur le montage de réception, pas beaucoup de choix.
Cdt.
Marcus.

comment faire d'un 8 en 1000 ?
Cdt.

marcus_95:
comment faire d'un 8 en 1000 ?
Cdt.

1000 (8+0+0+0)

Merci.
Cdt.
Marcus.