Cours:TPS 2103 5 : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
m (Brochages de quelques cartes Arduino pour le SPI)
Ligne 24 : Ligne 24 :
 
Voici par exemple ci- dessous la connectique ICSP présente sur une carte [[w:Arduino|Arduino]].
 
Voici par exemple ci- dessous la connectique ICSP présente sur une carte [[w:Arduino|Arduino]].
 
[[Fichier:Serial_Peripheral_Interface_on_Arduino_Mega_01.JPG|thumb|center|150px|Connectique ISP de l'Arduino]]
 
[[Fichier:Serial_Peripheral_Interface_on_Arduino_Mega_01.JPG|thumb|center|150px|Connectique ISP de l'Arduino]]
 +
 
=Dialoguer en i2c avec une manette Nunchuk=
 
=Dialoguer en i2c avec une manette Nunchuk=
 +
=={{Bleu|Exemple de programme}}==
 +
<source lang=c>
 +
#include <Servo.h>;#include <Wire.h>;// Doit être ajusté en fonction de chaque nunchuck#define ZEROX 530  #define ZEROY 530#define ZEROZ 530// adresse I2C du nunchuck#define WII_NUNCHUK_I2C_ADDRESS 0x52// définition d'une variable ServoServo servomoteur;// définition d'une variable counterint counter;// définition d'un tableau de donnéesuint8_t data[6];void setup() {  // on attache le servomoteur à la pin 11 (PWM)  servomoteur.attach(11);  // initialisation du nunchuck  Wire.begin();  Wire.beginTransmission(WII_NUNCHUK_I2C_ADDRESS);  Wire.write(0xF0);  Wire.write(0x55);  Wire.endTransmission();  Wire.beginTransmission(WII_NUNCHUK_I2C_ADDRESS);  Wire.write(0xFB);  Wire.write(0x00);  Wire.endTransmission();}void loop() {    // on demande 6 octets au nunchuck    Wire.requestFrom(WII_NUNCHUK_I2C_ADDRESS, 6);    counter = 0;    // tant qu'il y a des données    while(Wire.available())    {      // on récupère les données      data[counter++] = Wire.read();    }    // on réinitialise le nunchuck pour la prochaine demande    Wire.beginTransmission(WII_NUNCHUK_I2C_ADDRESS);    Wire.write(0x00);    Wire.endTransmission();    if(counter >= 5)    {      // on extrait les données      // dans mon exemple j'utilise uniquement les données d'accélération sur l'axe Y      double accelX = ((data[2] << 2) + ((data[5] >> 2) & 0x03) - ZEROX);      double accelY = ((data[3] << 2) + ((data[5] >> 4) & 0x03) - ZEROY);      double accelZ = ((data[4] << 2) + ((data[5] >> 6) & 0x03) - ZEROZ);      // on limite la valeur entre -180 et 180      int value = constrain(accelY, -180, 180);      // on mappe cette valeur pour le servomoteur soit entre 0 et 180      value = map(value, -180, 180, 0, 180);      // on écrit sur le servomoteur la valeur      servomoteur.write(value);      // un petit delai pour pas saturer le servomoteur      delay(100);    }}
 +
</source>

Version du 3 septembre 2014 à 19:33

Communication série asynchrone rs232

Communication par bus SPI

Brochages de quelques cartes Arduino pour le SPI

Voici présenté les brochages utilisés par les cartes Arduino que nous possédeons à l'IUT :

SPI MISO MOSI SCK SS
UNO PB4 (Arduino:12) PB3 (Arduino:11) PB5 (Arduino:13) PB2 (Arduino:10)
LEONARDO PB3 (ICSP:1) PB2 (ICSP:4) PB1 (ICSP:3) -
MEGA2560 PB3 (Arduino:50) PB2 (Arduino:51) PB1 (Arduino:52) PB0 (Arduino:53)

Comme on peut le voir dans ce tableau, les broches utilisées pour SPI sur la Leonardo ne sont pas reliées aux connecteurs mais directement sur le programmateur ICSP. Il n'y a aucune broche dédiée au SS.

Pour éviter des recherches sur internet, nous rappelons la connectique associée des six broches avec les deux photos ci-dessous :

Connectique SPI

Voici par exemple ci- dessous la connectique ICSP présente sur une carte Arduino.

Connectique ISP de l'Arduino

Dialoguer en i2c avec une manette Nunchuk

Exemple de programme

#include <Servo.h>;#include <Wire.h>;// Doit être ajusté en fonction de chaque nunchuck#define ZEROX 530  #define ZEROY 530#define ZEROZ 530// adresse I2C du nunchuck#define WII_NUNCHUK_I2C_ADDRESS 0x52// définition d'une variable ServoServo servomoteur;// définition d'une variable counterint counter;// définition d'un tableau de donnéesuint8_t data[6];void setup() {   // on attache le servomoteur à la pin 11 (PWM)  servomoteur.attach(11);  // initialisation du nunchuck  Wire.begin();  Wire.beginTransmission(WII_NUNCHUK_I2C_ADDRESS);  Wire.write(0xF0);  Wire.write(0x55);  Wire.endTransmission();  Wire.beginTransmission(WII_NUNCHUK_I2C_ADDRESS);  Wire.write(0xFB);  Wire.write(0x00);  Wire.endTransmission();}void loop() {     // on demande 6 octets au nunchuck    Wire.requestFrom(WII_NUNCHUK_I2C_ADDRESS, 6);    counter = 0;    // tant qu'il y a des données    while(Wire.available())    {      // on récupère les données      data[counter++] = Wire.read();    }    // on réinitialise le nunchuck pour la prochaine demande    Wire.beginTransmission(WII_NUNCHUK_I2C_ADDRESS);    Wire.write(0x00);    Wire.endTransmission();    if(counter >= 5)    {      // on extrait les données      // dans mon exemple j'utilise uniquement les données d'accélération sur l'axe Y      double accelX = ((data[2] << 2) + ((data[5] >> 2) & 0x03) - ZEROX);      double accelY = ((data[3] << 2) + ((data[5] >> 4) & 0x03) - ZEROY);      double accelZ = ((data[4] << 2) + ((data[5] >> 6) & 0x03) - ZEROZ);      // on limite la valeur entre -180 et 180      int value = constrain(accelY, -180, 180);      // on mappe cette valeur pour le servomoteur soit entre 0 et 180      value = map(value, -180, 180, 0, 180);      // on écrit sur le servomoteur la valeur      servomoteur.write(value);      // un petit delai pour pas saturer le servomoteur      delay(100);    }}