Bonjour,
J'ai fait un programme qui fonctionne dans lequel j'attribue les entrées/sorties et je défini des fonctions francisées.
/*nom et cablage des entrees et des sorties*/
#include <Servo.h> /* autorise l'utilisation d'un servomoteur*/
Servo servomoteur; /* Servomoteur sur D9*/
int led1 =13;/* module LED sur D13*/
int led2 =12;/* module LED sur D12*/
int ledvar1 =11;/* module LED sur D11*/
int ledvar2 =10;/* module LED sur D10*/
int buzzer =3;/* module buzzer sur D3*/
int bp1 =8;/* module bp, inter ou ils sur D8*/
int bp2 =7;/* module bp, inter ou ils sur D7*/
int bp3 =6;/* module bp, inter ou ils sur D6*/
int bp4 =5;/* module bp, inter ou ils sur D5*/
int Ma =1;/* D1 sur Ma du module L293D*/
int Mb =0;/* D0 sur MB du module L293D*/
int Mc = 4;/*moteur 2 */
int Md = 2; /*moteur 2*/
int ldr =0;/* module LDR sur A0*/
int temp =2;/* module TEMP sur A2*/
int ir =3;/* module Barrierre IR sur A3*/
int frappe =4;/* module capteur de frappe sur A4*/
int ligne1 =1; /*suiveur deligne1*/
int ligne2 =5; /*suiveur de ligne 2*/
int etatbp1;/* variable qui enregistre la valeur du module bp1*/
int etatbp2;/* variable qui enregistre la valeur du module bp2*/
int etatbp3;/* variable qui enregistre la valeur du module bp3*/
int etatbp4;/* variable qui enregistre la valeur du module bp4*/
int lumiere;/* variable qui enregistre la valeur du module LDR*/
int temperature;/* variable qui enregistre la valeur du module TEMPERATURE*/
int barriere;/* variable qui enregistre la valeur du module Barri�re IR(infrarouge)*/
int intensite;/* variable qui enregistre la valeur du module capteur de frappe */
int couleur1;/*vleur luepar le suiveur deligne 1*/
int couleur2; /*valeur lue par le suiveurde ligne2*/
/*declaration des entrees et des sorties*/void setup(){
Serial.begin(9600);
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(ledvar1,OUTPUT);
pinMode(ledvar2,OUTPUT);
pinMode(bp1, HIGH);
pinMode(bp2, HIGH);
pinMode(bp3, HIGH);
pinMode(bp4, HIGH);
pinMode(buzzer, OUTPUT);
servomoteur.attach(9);
pinMode(Ma, OUTPUT);
pinMode(Mb, OUTPUT);
}
/************************************/
/** Boucle du programme principal **/
/**********************************/
void loop()
{
}
/**************************************/
/**************************************/
// fonctions à utiliser dans le programme principal//
void allumer(int quoi)
{
digitalWrite(quoi,HIGH);
}
void eteindre(int quoi)
{
digitalWrite(quoi,LOW);
}
void clignoter(int quoi, int millisecondes)
{
digitalWrite(quoi,HIGH);
delay(millisecondes);
digitalWrite(quoi,LOW);
delay(millisecondes);
}
void varierled(int quoi,int valeur)
{
analogWrite(quoi, valeur);
}
void pendant(int millisecondes)
{
delay(millisecondes);
}
void avancer()// avec le circuit L293D
{
digitalWrite(Ma, HIGH);
digitalWrite(Mb,LOW);
digitalWrite(Mc, HIGH);
digitalWrite(Md,LOW);
delay(5);
}
void reculer()// avec le circuit L293D
{
digitalWrite(Ma, LOW);
digitalWrite(Mb,HIGH);
digitalWrite(Mc, LOW);
digitalWrite(Md,HIGH);
delay(5);
}
void arret()// avec le circuit L293D
{
digitalWrite(Ma, LOW);
digitalWrite(Mb,LOW);
digitalWrite(Mc, LOW);
digitalWrite(Md,LOW);
delay(5);
}
void gauche()// avec le circuit L293D
{
digitalWrite(Ma, HIGH);
digitalWrite(Mb,LOW);
digitalWrite(Mc, LOW);
digitalWrite(Md,HIGH);
delay(5);
}
void droite()// avec le circuit L293D
{
digitalWrite(Ma, LOW);
digitalWrite(Mb,HIGH);
digitalWrite(Mc, HIGH);
digitalWrite(Md,LOW);
delay(5);
}
void angleservo(int angle)
{
servomoteur.write(angle);
delay(15);
}
void avanceservo()
{
servomoteur.write(0);
delay(15);
}
void reculeservo()
{
servomoteur.write(180);
delay(15);
}
void stopservo()
{
servomoteur.write(90);
delay(15);
}
void lire(int quoi)
{
if(quoi==bp1){
etatbp1=digitalRead(bp1);
}
else if(quoi==bp2){
etatbp2=digitalRead(bp2);
}
else if(quoi==bp3){
etatbp3=digitalRead(bp3);
}
else if(quoi==bp4){
etatbp4=digitalRead(bp4);
}
}
void lirecapteur(int quoi)
{
if(quoi==ldr){
lumiere=analogRead(ldr);
}
else if (quoi==ir){
barriere=analogRead(ir);
}
else if (quoi==frappe){
intensite=analogRead(frappe);
}
else if (quoi==ligne1){
int testcouleur1=analogRead(ligne1);
if (testcouleur1<=500){
couleur1=0;
}
else {
couleur1=1;
}
} // donne une valeur logique à la couleur 1=noir
else if (quoi==ligne2){
int testcouleur2=analogRead(ligne2);
if (testcouleur2<=500){
couleur2=0;
}
else {
couleur2=1;
}
} // idem
}
void liretemp()
{
int tempc = 0; // variables pour stocker les valeurs de temp�ratures.
int samples[8]; // variables pour calculer la temp�rature avec pr�scision
int maxi = -100,mini = 100; // valeurs initiales des temp�ratures min/max
int i; //variable de comptage
for(i = 0;i<=7;i++){ // enregistre 8 valeurs de temp�ratures et fait une moyenne
samples[i] = ( 5.0 * analogRead(temp) * 100.0) / 1024.0;
tempc = tempc + samples[i];
delay(1000);
}
tempc = tempc/8.0; // calcule la temp�rature
if(tempc > maxi) {
maxi = tempc;
} // set max temperature
if(tempc < mini) {
mini = tempc;
} // set min temperature
delay(1000); // attend 1s avant une nouvelle mesure
temperature=tempc; // enregistre la valeur de la temp�rature
}
void melodie()
{
byte names[] = {
'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int tones[] = {
1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };
byte melody[] = "2d2a1f2c2d2a2d2c2f2d2a2c2d2a1f2c2d2a2a2g2p8p8p8p";
// count length: 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
// 10 20 30
int count = 0;
int count2 = 0;
int count3 = 0;
int MAX_COUNT = 24;
digitalWrite(buzzer, LOW);
for (count = 0; count < MAX_COUNT; count++) {
for (count3 = 0; count3 <= (melody[count*2] - 48) * 30; count3++) {
for (count2=0;count2<8;count2++) {
if (names[count2] == melody[count*2 + 1]) {
digitalWrite(buzzer,HIGH);
delayMicroseconds(tones[count2]);
digitalWrite(buzzer, LOW);
delayMicroseconds(tones[count2]);
}
}
}
}
}
Je souhaite créer une ou deux librairies afin de fixer deux modes de fonctionnement :
- avec les entrées sorties ci dessus;
- avec d'autres attributions pour faire un robot (2 servomoteurs continus).
J'ai regardé les tutoriels Morse et les librairies disponibles, j'ai essayer de copier/adapter, mais il y a toujours des erreurs de compilation, alors j’essaie de faire simple pour comprendre.
fichier .h
/* MODUA.H */
/* 2/2/13 */
#define LED 13
#ifndef MODUA_H
#define MODUA_H
#include <Arduino.h>
class MODU // Objet
{
private :
int temps;
public:
MODU();
int led;
void allumer(int);
void initialiser();
int broche;
};
#endif
fichier .ccp
/* MODU1.ccp */
/* 2/2/13 */
#include "MODUA.h"
MODU::MODU()
{}
MODU ::~MODU()
{} //utile ?
void MODU::allumer(int broche)
{
digitalWrite(broche,HIGH);
}
void MODU:: initialiser()
{
LED =13;
pinMode(LED, OUTPUT);}
/*void MODU::eteindre()
{
digitalWrite(broche,LOW);
}*/
void MODU::pendant(int time)
{
int temps= time
delay(temps);
}
Le croquis de test
#include <MODUA.h>
MODU robot;
void setup(){
robot.initialiser();}
void loop()
{
//MODU::allumer(13);//modu.allumer();
//pendant(1000);
//modu.eteindre();
//modu.pendant(1000);
}
L'erreur du moment :
sketch_feb02a.cpp.o: In function
__static_initialization_and_destruction_0': C:\Users\NOAR\AppData\Local\Temp\build4035633229277018135.tmp/sketch_feb02a.cpp:5: undefined reference to
MODU::MODU()'
sketch_feb02a.cpp.o: In functionsetup': C:\Users\NOAR\AppData\Local\Temp\build4035633229277018135.tmp/sketch_feb02a.cpp:8: undefined reference to
MODU::initialiser()'
Si vous avez quelques conseils pour m'aider peu à peu à comprendre comment parvenir à transformer le code du haut en bibliothèque qui compile, je vous en remercie d'avance.