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.