Pages: [1]   Go Down
Author Topic: Lire un bit d'une variable ?  (Read 924 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous,
(désolé si je post dans la mauvaise section, mais je pense que la réponse peut servir à d'autres)

Je suis tout nouveau dans le monde de l'Arduino, du C et des AVR. Habituellement je développe en BASIC sur des PIC avec Proton+
Je cherche à faire un truc qui me semble tout bête en BASIC mais je ne trouve pas l’équivalent en C
Admetons que j'ai une variable quelconque, un int par exemple, et que je veuille lire 1 seul bit de cette variable pour l'attribuer à un boolean ou même directement à une sortie.

En BASIC j'écrirais ça ainsi
Code:
dim mavariable as word
dim bitvar as bit

mavariable = 5891
bitvar = mavariable.0 'lit le bit 0 de la variable (LSB)
bitvar = mavariable.15 'lit le bit 15 de la variable (MSB)

portB.1 = mavariable.8 'met la sortie 1 du port B à 1 si le premier bit du deuxième octet est à 1

voyez c'est tout simple et c'est comme ça qu'on fait en BASIC. Sauf que je ne trouve pas l’équivalent en C, même en passant par des opérateur logique genre & et | pour n'extraire qu'un seul bit, je ne trouve cependant pas comment passer d'un byte ou d'un int vers un boolean !
Merci d'avance.
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 30
Posts: 3231
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

désolé si je post dans la mauvaise section, mais je pense que la réponse peut servir à d'autres


Sauf que ce n'est pas un cours, ni un tutoriel, mais une simple question, donc je le déplace dans la catégorie généraliste du forum  smiley-lol
« Last Edit: December 28, 2012, 07:09:27 am by Jean-François » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

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

En effet mauvaise section ^^' pas grave le grand chef est pas loin pour le déplacer smiley-wink

Pour ce genre de manipulation on peut utiliser les bitwise : http://www.arduino.cc/en/Reference/Bitwise
Par exemple pour récuperer le LSB tu peux faire :
Code:
int mavariable=4;
mavariable &= 1; // 100 & 001 = 000
mavariable=5;
mavariable &= 1; // 101 & 001 = 001
Tu peux aussi utiliser ça : http://arduino.cc/en/Reference/BitRead

Après tu peut manipuler les pin par port : http://www.arduino.cc/en/Reference/PortManipulation
« Last Edit: December 28, 2012, 07:12:21 am by B@tto » Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci pour le déplacement, j'avais pas vu qu'il y avait une section généraliste (a cause de la dimension de la fenêtre de mon navigateur je ne voyais que les sous-sections et j'ai pas trouvé celle qui était le plus adapté  smiley-red)

bitRead semble effectivement le plus proche de ce que je cherche à faire, et répond exactement au problème, merci !
la technique du bitwise (que l'on peut aussi faire en BASIC) ne correspond pas, parce qu'au final on se retrouve quand même avec une variable du type de départ (qui ne contient que 0 ou 1 c'est vrai) et pas un boolean
Logged

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

Bin la j'ai travaillé sur mavariable, rien n'empêche de jouer avec un boolean :

int mavariable=4;
boolean i;
i = mavariable & 1; // 100 & 001 = 0
mavariable=5;
i = mavariable & 1; // 101 & 001 = 1
Logged


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

bitRead semble effectivement le plus proche de ce que je cherche à faire, et répond exactement au problème, merci !
la technique du bitwise (que l'on peut aussi faire en BASIC) ne correspond pas, parce qu'au final on se retrouve quand même avec une variable du type de départ (qui ne contient que 0 ou 1 c'est vrai) et pas un boolean
Toutes valeurs autre que 0 est vrai (true) en C/C++ smiley-wink

Tu peut donc faire sans problème des tests logiques sur du bitwise, exemple :
Code:
if (variable & (1 << 2)) {
    // le bit 3 (ou 2 en partant de 0) de "variable" est à "1"
}
Logged

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

Pages: [1]   Go Up
Jump to: