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);
}
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
Post a Comment