Pages: [1]   Go Down
Author Topic: Define pour un Binaire incomplet  (Read 752 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 0
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Autant y aller direct ! Je cherche à initialisé une variable de carte sur le bus I2C. J'ai pensé naturellement au #define tel que
#define carteBtn B0111000

Il manque 1 bit et c'est logique car j'utilise plus bas ceci:
Wire.requestFrom(B0111000, 1);  //Appel de la carte en lecture

En théorie, j'aurais du employé le système 0x?? Sauf qu'avec un bit en moins, je voie pas trop comment faire la conversion. Existe-t-il une autre solution?
Logged

Ales
Online Online
Faraday Member
**
Karma: 39
Posts: 3736
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

J'ai du mal à saisir ... Ou bloques-tu ?? 0x c'est juste une notation pour le compilateur pour dire que c'est de l'hexadécimal, comme B... veut dire binaire et rien du tout veut dire décimal.
Logged


Offline Offline
Full Member
***
Karma: 0
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je saisie pas ta réponse.

Si je fais:
#define test B0111000

puis:
Wire.requestFrom(test, 1);

A priori, ma carte n'est pas appeler. En revanche si je met Wire.requestFrom(B0111000, 1); ma carte est appelé.

C'est peut-être plus clair ainsi !
Logged

France
Offline Offline
Full Member
***
Karma: 0
Posts: 154
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Peut être :

byte test=B111000;
Logged

Offline Offline
Full Member
***
Karma: 0
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Déjà testé !

Si je met 111000 ça ne correspond plus non plus à ma carte en I2C. La carte s'apelle 0111000 puis 0 en écriture ou 1 en lecture.
Logged

Ile-de-France (92 sud), France
Offline Offline
Edison Member
*
Karma: 24
Posts: 2055
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Si je fais:
#define test B0111000

puis:
Wire.requestFrom(test, 1);

A priori, ma carte n'est pas appeler. En revanche si je met Wire.requestFrom(B0111000, 1); ma carte est appelé.

Dans le contexte ci-dessus, les 2 écritures sont 100% identiques.
#define est une méthode du préprocesseur qui est appellé avant le compilateur. Il fait un chercher/remplacer dans le texte de la chaine "test" par la chaine définie.
Je répète, cela est fait au niveau texte du fichier source avant la compilation
Si tu as écrit exactement dans ton code ce que tu as écrit ci-dessus, quand le code arrive au compilo c'est la même chose.
Donc si ça ne fait pas la même chose, c'est que tu n'as pas écrit comme ci-dessus.

Ne redéfinis tu pas test ailleurs plusieurs fois
Logged

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Ales
Online Online
Faraday Member
**
Karma: 39
Posts: 3736
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En plus j'utilise couramment la forme byte addr=Bxxxxxxx et je n'ai aucun problème.
Logged


Offline Offline
Full Member
***
Karma: 0
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok, j'ai trouver !

Il manquais un "1" dans le binarie !

Problème résolu  smiley-mr-green
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Concernant le bit de R/W en I2C la librairie Wire le gère en interne.
Il faut juste lui fournir l'adresse "brute" sur 7 bits.

Si tu as une adresse avec le bit de R/W il suffit de supprimer le bit de point faible en décalant la valeur d'un bit vers la droite.

En version define ça donne ça (juste pour comprendre le truc) :
Code:
#define ADDR_BRUTE B10101010
#define ADDR_WIRE (ADDR_BRUTE >> 1)

J'ai du mal à saisir ... Ou bloques-tu ?? 0x c'est juste une notation pour le compilateur pour dire que c'est de l'hexadécimal, comme B... veut dire binaire et rien du tout veut dire décimal.
0x... -> notation hexa pour le compilateur, ok
0.... -> notation octal
0b.. -> notation binaire

B.... c'est juste une série de #define dégueulasse que la team arduino à cacher sous le tapis dans binary.h smiley-wink
Allez un petit extrait juste pour le fun :
Code:
#define B0 0
#define B00 0
#define B000 0
#define B0000 0
#define B00000 0
#define B000000 0http://arduino.cc/forum/Smileys/arduinoWide/smiley-wink.png
#define B0000000 0
#define B00000000 0
#define B1 1
#define B01 1
#define B001 1
#define B0001 1
#define B00001 1
#define B000001 1
#define B0000001 1
#define B00000001 1

(tout ça pour pas avoir à dire que la notation 0b... existe smiley-roll)
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Full Member
***
Karma: 0
Posts: 113
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Lol !

En effet, bel exemple...

Bon, ceci dit, chu pas encore totalement à l'aise avec tout le système Arduino. C'est que ça me manquerais presque l'ASM  smiley-lol
(Je déconne)...

Bon, voila, donc pour le moment, prends pas peut mais ça ressemble à ça ma déclaration sur ma télécommande.
Quote
/*
   Télécommande sur 433 Mhz bi-directionnelle
   ------------------------------------------
   
   Auteur : Alexandre LAB
   Aide DVP : Ragmaxone, sevyc64, Winjerome, Bousk
   Aide Arduino.cc : barbudor, SesechXP, skywodd
   Création : le 30 octobre 2012
   Dernière modification : le 16 janvier 2013
   Version 1.0
   ------------------------------------------
   
   Pins utilisés
   TX1 -> Modem 433Mhz
   RX1 <- Modem 433Mhz
   SDA <-> Data I2C
   SCL <-> Horloge I2C
   
   SPI <-> Carte Ethernet / SD Card
   04 (PWM) -> Ethernet CS
   
   10 (PWM) -> Ethernet Librairie
   50 (Digit) -> Ethernet Librairie
   51 (Digit) -> Ethernet Librairie
   52 (Digit) -> Ethernet Librairie
   53 (Digit) -> Ethernet Librairie
   
   AN0 -> Voie 1
   AN1 -> Voie 2
   AN2 -> Voie 3
   AN3 -> Voie 4
   
   22 (Digit) -> Voie 5 = Btn On/Off/On 1
   23 (Digit) -> Voie 5 = Btn On/Off/On 1
   24 (Digit) -> Voie 6 = Btn On/Off/On 2
   25 (Digit) -> Voie 6 = Btn On/Off/On 2
   
   Pour infos:
   - Les voies analogiques sont reliée chacune à leur potar.
   
   - 22 et 23 Corresponde à un potar à 3 positions.
   - 00 = Milieu
   - 10 = Haut
   - 01 = Bas
   
   - 24 et 25 Corresponde à un potar à 3 positions.
   - 00 = Milieu
   - 10 = Haut
   - 01 = Bas   
*/

/* INC */
#include <Wire.h>
#include <SD.h>

/* DEFINITIONS CARTES I2C */
#define adresseLcd 0x63  //Ecran LCD
#define carteBtn B0111000  //Carte boutons

/* DEFINITIONS AUTRES */
#define SIZE_VOIES 10  //Nombre de voies

#define SIZE_BUFFER 32  //Nombre de case du buffer
#define SIZE_CMDE 10  //Nombre de commandes

#define potarVoie1 0  //Manche gauche haut/bas
#define potarVoie2 1  //Manche gauche droite/gauche
#define potarVoie3 2  //Manche droite haut/bas
#define potarVoie4 3  //Manche droite droite/gauche

int btnVoie5Up = 22;  //Bouton voie 5 Haut
int btnVoie5Do = 23;  //Bouton voie 5 Bas
int btnVoie6Up = 24;  //Bouton voie 6 Haut
int btnVoie6Do = 25;  //Bouton voie 6 Bas

/* VARIABLES GLOBALES */
int tensionVoie1, tensionVoie2, tensionVoie3, tensionVoie4;  //Tensions aux bornes des entrées analogiques
byte voies[SIZE_VOIES];  //Initialise le tableau des voies

int mixVoie1, mixVoie2;  //Valeur de mixage

String trame;  //Trame d'émission

//char bufferRx[SIZE_BUFFER];

File myFile;  //Fichier
String tblFicMdle[SIZE_CMDE];  //Le tableau des noms des fichiers modèles
String tblFicSvg[SIZE_CMDE];  //Le tableau des noms des fichiers de sauvegardes
int nbFichierMdle;  //Nombre de fichier

char tblConfSvg[SIZE_CMDE][SIZE_BUFFER];  //Le tableau des configuration du fichier de sauvegarde
char tblConfMdle[SIZE_CMDE][SIZE_BUFFER]; //Le tableau des configurations du fichier de modèle

//Configuration pour un modèle
String confNom, confType;
boolean confMix_V1V2, confMix_V3V4;
boolean etatVoie07, etatVoie08, etatVoie09, etatVoie10;

byte etatBtnI2c;
int ecran = 1;
int cmptPassage = 0, passageMax = 5;

Et en dessous, ben, il y a le setup()...

On notera quand même que je prends soint dès le début de commenter mes pin(s). Normal si c'est une sortie "->" c'est pas pour y recevoir un signal, sauf si c'est bi-directionnel "<->". Enfin, bon, vous m'aurez, ou pas, compris smiley-wink
Logged

Pages: [1]   Go Up
Jump to: