Arduino

From Fabelier
Jump to: navigation, search

Contents

Arduino

  • For more information : www.arduino.cc

Our line follower

Coder sans l'IDE

C'est tres simple car ils fournissent un Makefile, donc :

 $ aptitude install arduino-core
 $ mkdir your_project
 $ cd your_project
 $ emacs your_project.cpp
 $ cat - > Makefile
 ARDUINO_DIR            = /usr/share/arduino
 TARGET                 = line_follower
 ARDUINO_LIBS           =
 MCU                    = atmega328p
 F_CPU                  = 16000000
 ARDUINO_PORT           = /dev/ttyACM0
 AVRDUDE_ARD_BAUDRATE   = 115200
 AVRDUDE_ARD_PROGRAMMER = arduino
 include /usr/share/arduino/Arduino.mk
 C-d // You should TYPE C-d not copy past the string "C-d"
 $ make upload
 $ yes


Exemple d'utilisation d'un Afficheur 7 segments

Ce code gère deux types de sorties (analogique et numérique). Ce code affiche les 10 chiffres arabes sur l'afficheur 7 segments.

#define a_min 0   //valeur min pour les analogiques
#define a_max 255 //valeur max pour les analogiques
#define d_min 0   //valeur min pour les numériques
#define d_max 1   //valeur max pour les numériques

//toutes les sorties possibles, et leur type
byte outs[][2] = {
   {0, 'r'},
   {1, 't'},
   {2, 'd'},
   {3, 'a'},
   {4, 'd'},
   {5, 'a'},
   {6, 'a'},
   {7, 'd'},
   {8, 'd'},
   {9, 'a'},
   {10, 'a'},
   {11, 'a'},
   {12, 'd'},
   {13, 'd'}
};
//les sorties qu'on utilise
byte my_outs[] = {2, 3, 4, 5, 6, 7, 8};

//liste des chiffres, et leur composition par rapport aux branchements fait sur le Arduino
byte numbers[][7] = {
   {2, 3, 4, 5, 6, 7},
   {3, 4},
   {2, 3, 5, 6, 8},
   {2, 3, 4, 5, 8},
   {3, 4, 7, 8},
   {2, 4, 5, 7, 8},
   {2, 4, 5, 6, 7, 8},
   {2, 3, 4},
   {2, 3, 4, 5, 6, 7, 8},
   {2, 3, 4, 5, 7, 8}
};

//Afficher ou eteindre une LED
void write(byte id, byte level)
{
   //Analogique
   if (outs[id][1] == 'a')
       analogWrite(outs[id][0], level > 0 ? a_max : a_min);
   //Numérique
   else if (outs[id][1] == 'd')
       digitalWrite(outs[id][0], level > 0 ? d_max : d_min);
}

//Afficher un chiffre
void print(byte number)
{
   byte j, k;

   //Extinsion de tt les segments
   for (k = 0; k < sizeof(my_outs); k++)
       write(my_outs[k], 1);

   //Affichage des segments pour le chiffre choisi
   for (j = 0; j < sizeof(numbers[number]); j++)
       write(numbers[number][j], 0);
}

//Init
void setup()
{
   byte i;

   for (i = 0; i < sizeof(my_outs); i++)
       pinMode(outs[my_outs[i]][0], OUTPUT);
}

//Loop
void loop()
{
   byte i;
   for (i = 0; i <= 9; i++)
   {
       print(i);            //affiche 0 > 9
       delay(1000);         //pause de 1s.
   }
   delay(2000);             //pause de 2s.
}
Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox