Go Down

Topic: besoin de renseignement (Read 641 times) previous topic - next topic

vimper

bonjour je débute sur arduino, je commence a faire un robot avec 4 moteur piloté avec 2   L293D et un
capteur HC-SR04 pour le moment c'est tout mais je pense continuer à l'évoluer.le tout est monté sur le robot avec la carte arduino et une breadboard et fais un programme avec des infos glané sur le net pour le moment il ne fais qu'avancer et tourner a droite quand il y as un obstacle objectif atteint pour moi.
voila maintenant j'arrive a ma première question concernant le programme et ce que j'ai lu sur les fichier .h et .cpp.
est que je devrais faire un fichier .h pour le sonar en sachant que le code que je vais mettre fonctionne bien
Code: [Select]
/*definition des moteurs avec le L293D */

//attribution des des broches utilisées
#define Input1 13 //sortie l293D puce 1(roue arriere droite)
#define Input2 12 //sortie l293D puce 1(roue arriere droite)
#define Input3 11 //sortie l293D puce 1(roue arriere gauche)
#define Input4 10 //sortie l293D puce 1(roue arriere gauche)
#define Input5 9  //sortie l293D puce 2(roue avant droite)
#define Input6 8  //sortie l293D puce 2(roue avant droite)
#define Input7 7  //sortie l293D puce 2(roue avant gauche)
#define Input8 6  //sortie l293D puce 2(roue avant gauche)

/* Utilisation du capteur Ultrason HC-SR04 */

/* définition des broches utilisées */
int trig = 5;
int echo = 4;
long lecture_echo;
long cm;


void setup()
{
  /* definition des pins sur arduino */
 
  pinMode (Input1 , OUTPUT); // definir les sorties
  pinMode (Input2 , OUTPUT); // definir les sorties
  pinMode (Input3 , OUTPUT); // definir les sorties
  pinMode (Input4 , OUTPUT); // definir les sorties
  pinMode (Input5 , OUTPUT); // definir les sorties
  pinMode (Input6 , OUTPUT); // definir les sorties
  pinMode (Input7 , OUTPUT); // definir les sorties
  pinMode (Input8 , OUTPUT); // definir les sorties

  /* definition pour le capteur Ultrason */

  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  Serial.begin(9600);
}
void loop()
{
  // programme pour le capteur ultrason
 
  long duration,distance;
  digitalWrite(trig, LOW);
  delayMicroseconds(2);   
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  duration = pulseIn(echo, HIGH);
  distance = duration / 58;
  Serial.print("Distance : ");
  Serial.println(distance);
 
  // programme pour faire tourner les moteurs
 
  if(distance >= 15)
  {                       //marche avant
    digitalWrite (Input1 ,LOW);
    digitalWrite (Input2 ,HIGH);
    digitalWrite (Input3 ,LOW);
    digitalWrite (Input4 ,HIGH);
    digitalWrite (Input5 ,LOW);
    digitalWrite (Input6 ,HIGH);
    digitalWrite (Input7 ,LOW);
    digitalWrite (Input8 ,HIGH);
  }
  if (distance < 15)
  {                         // tourne a droite en bloquant les roues droites
    digitalWrite (Input1 ,LOW);
    digitalWrite (Input2 ,LOW);
    digitalWrite (Input3 ,LOW);
    digitalWrite (Input4 ,HIGH);
    digitalWrite (Input5 ,LOW);
    digitalWrite (Input6 ,LOW);
    digitalWrite (Input7 ,LOW);
    digitalWrite (Input8 ,HIGH);
  } 
 }


j'ai un seconde question car je voudrais remplacer ma bread par une carte shield, j'ai vu qu'il y avais des shield empilables ma seconde question est si je met plusieurs cartes shield  les pins qui sont prise avec les première carte peut on les réutiliser sur les autre carte sur le prochain programme je pense que non mais je voudrais une confirmation et dans ce ca j'aurais un souci si je veux évoluer mon robot, comment je pourrais faire pour continuer a évoluer ?

j'espere que j'ai été clair dans mes explications  :smiley-confuse:  (en tout cas je me suis compris moi     :) )
merci de votre aide

kamill

#1
Jul 18, 2016, 08:42 am Last Edit: Jul 18, 2016, 09:36 am by kamill
Bonjour,

Un fichier .h permet de partager des définitions, constantes ... avec plusieurs fichier .cpp ou .ino. Il permet aussi de structurer le programme. Pour un petit programme comme le tiens ça ne se justifie pas, mais si ton programme s'agrandit peut être que ça vaudra le coup.
Par contre, tu peux améliorer la déclaration de tes constantes.
Déjà déclarer une sortie comme Inputx c'est ... spécial. Ensuite au lieu de déclarer tes sortie comme 1, 2, 3... tu devrais les déclarer en rapelant leur fonctionalité car tu vas vite t'y perdre dans les appellations
par exemple
Code: [Select]
//attribution des des broches utilisées
#define OutArDAv 13 //sortie l293D puce 1(roue arriere droite)
#define OutArDAr 12 //sortie l293D puce 1(roue arriere droite)
...


Quand on emplie des shields, les pins utilisées par un shield ne peuvent pas être utilisés par les autres, sauf cas particulier (par exemple I2C,...)

vimper

#2
Jul 18, 2016, 04:09 pm Last Edit: Jul 18, 2016, 04:19 pm by vimper
merci de l'info  kamill.

j'avais nommé imput car les sorties du L293D c'etais nommé comme ca. :) et comme je suis un grand baléze en programmation  cuisine plutôt j'ai fais  ma sauce :smiley-confuse: .

(sauf cas particulier (par exemple I2C,...)).suite à ta réponse une question me brule les lèvres ,
c'est quoi un I2C?

pour remplacer ma bread et le tas de fil je vais empiler ce module:

http://www.ebay.fr/itm/5023-Module-L293D-H-Pont-Moteur-Motor-Drive-Board-Shield-pour-Arduino-UNO-/171743450110?hash=item27fcb513fe:g:TCgAAOSweW5VH9lp

je vais pouvoir ajouter 2 servos moteur mais je serais vite limité y aurais t'il un autre moyen? Ou je dois rajouter une autre carte arduino?

merci

kamill

#3
Jul 18, 2016, 04:27 pm Last Edit: Jul 18, 2016, 04:27 pm by kamill
I2C c'est un bus de communication entre un processeur et des périphériques. Comme c'est un bus tous les périphériques utilisent les mêmes pins.

D'après les caractéristiques de ta carte, elle peut gérer 4 moteurs à courant continu et 2 servos, donc devrait donc te convenir.

Tu as un tutoriel en français pour cette carte ici

vimper

ok merci vais me pencher la dessus.

merci pour le lien du tuto.

Go Up