Pages: [1]   Go Down
Author Topic: Clignotement LED I2C PCF8574  (Read 250 times)
0 Members and 1 Guest are viewing this topic.
Vosges, Lorraine, France
Offline Offline
Jr. Member
**
Karma: 0
Posts: 55
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour, pour un de mes projets, j'ai voulu réduire un maximum l'utilisation de PIN.

J'ai donc utilisé un PCF8574 (Documentation), c'est assez simple d'utilisation.

Voici un schéma pour relier le PCF8574 à la carte Arduino (Mega / Uno ...):
Allez prenons l'example sur une Arduino Uno : il faut relier le SDA du PCF8574 sur le SDA de l'Arduino Uno (PIN A4), et le SCL sur le SCL de l'Arduino Uno (PIN A5).
Ce qui nous donne :

Maintenant branchons une LED, sur le pin P1 du PCF8574 et celles non utilisées sur le GND:
Nous aurons ceci:

Passons au code:
Importez #include <Wire.h>

Déffinissez l'adresse du PCF8574:
#define adress 0x20

dans la fonction setup, ont initialise la communicatio I2C par:
Wire.begin();

on à donc:


on va maintenant créer une fonction qui s’appellera Write

On à donc:


dans Write(), passons une variable de type byte nommée _data (donnée)
dans cette fonction, nous y mettons la "transmission":
Code:
 Wire.beginTransmission(adress); // Commence la transmission sur l'adresse défini plus haut
  Wire.write(_data);              // On envoie la donnée
  Wire.endTransmission();         // On termine la transmission

on aura:


Passons maintenant au clignotement de la LED, dans loop() on va utiliser notre fonction Write():

alors pour le clignotement, c'est simple, c'est comme faire:
Code:
digitalWrite(LED, HIGH);
delay(1000);
digitalWrite(LED, LOW);
delay(1000);

mais digitalWrite est remplacé par Write
Donc comme ceci:
Code:
 Write(B00000010);  // On passe P1 à 1 et les autre à 0 pour allumer la LED
  delay(1000);       // On attend 1s (1000ms)
  Write(B00000000);  // On passe tout à 1 pour etteindre la LED
  delay(1000);       // On attend 1s (1000ms)

Donc B pour dire que c'est du binaire. Ensuite le 1 pour passer la LED en état Haut et en avant dernier car on à P7 en début et P1 en fin, en gros on a ceci:
Code:
Write(P7, P6, P5, P4, P3, P2, P1, P0);

Donc la fonction loop est comme ceci:


Le code final:
Code:
/*
*  Clignotement de LED en I2C avec un PCF8574
*  @author Manghao
*/
#include <Wire.h>

#define adress 0x20

void setup() {
  Wire.begin();
}

void loop() {
  Write(B00000010);  // On passe P1 à 1 et les autre à 0 pour allumer la LED
  delay(1000);       // On attend 1s (1000ms)
  Write(B00000000);  // On passe tout à 1 pour etteindre la LED
  delay(1000);       // On attend 1s (1000ms)
}


void Write(byte _data) {
  Wire.beginTransmission(adress); // Commence la transmission sur l'adresse défini plus haut
  Wire.write(_data);              // On envoie la donnée
  Wire.endTransmission();         // On termine la transmission
}

Plus qu'a téléverser sur votre carte et tout est bon, la led devrait clignoter.

C'est mon premier tuto donc si vous n'avez pas compris quelque chose ou que je me suis mal expliqué j'en suis désolé.

Cordialement Manghao.
« Last Edit: June 27, 2014, 04:55:26 pm by manghao » Logged


France S-O
Offline Offline
Edison Member
*
Karma: 41
Posts: 2165
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonne mise en jambe, on attend les autres  smiley-mr-green smiley-mr-green
Logged

Vosges, Lorraine, France
Offline Offline
Jr. Member
**
Karma: 0
Posts: 55
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci, d'autres seront à venir, je pense sur l'utilisation du clavier
Logged


Moselle (FR)
Offline Offline
Edison Member
*
Karma: 16
Posts: 1233
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir,
Sur ton schéma, il manque les résistances de pullup des liaisons SDA et SCL.
Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

Moselle (FR)
Offline Offline
Edison Member
*
Karma: 16
Posts: 1233
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir,
Si tu souhaites en savoir plus sur le PCF 8574, tu peux étudier la lib : https://github.com/skywodd/pcf8574_arduino_library
Il y a beaucoup de chose à apprendre.
Il y a également une discussion avec des possibilités plus élargies ici : http://forum.arduino.cc/index.php?topic=182507.msg1398941#msg1398941
@+
Logged

2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

Vosges, Lorraine, France
Offline Offline
Jr. Member
**
Karma: 0
Posts: 55
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oui, oublie de ma part, je rajoute aussi les résistance sur la LED

Ce qui est de la librairie icare, je l'ai vu elle est même implantée dans mon arduino IDE
« Last Edit: June 27, 2014, 04:57:53 pm by manghao » Logged


Pages: [1]   Go Up
Jump to: