Bien le bonjour
Je suis entrain de faire faire mon premier programe pour arduino
Ce programme sert a diriger un robot via une ligne noir
J'ai voulu testé sous proteus ISIS(je n'ais pas encore la carte et le matériel) mais ... sa apas été =( donc je vien a vous pour voir si mon code est juste et ci j'ai fait des erreur, m'expliquer pourquoi et comment les corriger
Voila mon code actuelle (il peut se diriger tout droit uniquement)
Nouveau (dernière modif 1/02/12 22:00)
//int debug = 1; // -> utiliser un couple variable + if pour un test de debug n'est pas génial
#define __DEBUG__ // Mieux vaut utiliser un define et un test AVANT la compilation (#ifdef)
boolean sTop = 0; // Préférer le type byte (1 octet) au int (2 octets) pour les valeurs <255
boolean start = 0; //
byte pin_read[11]; //
unsigned long temp_depart; // Les valeurs retourner par millis() sont des unsigned long pas des int
void setup()
{
//capteurs
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT); //Arret bouton
pinMode(8, INPUT); //Démarage via cordon
pinMode(9, INPUT);//debug on/off
//moteur
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
Serial.begin(9600); //Port série
}
void loop()
{
for(int i = 2; i <= 10; i++) // l'utiliation d'une boucle for est ici bien plus intéréssante et pratique
pin_read[i] = digitalRead(i);
if (pin_read[7] == HIGH) sTop = 1; // Les accolades sont inutile si il n'y a qu'une seul intrustion dans le if
if (pin_read[9] == HIGH) debug =1;
else if (pin_read[9] == LOW) debug = 0;
if (!pin_read[8] && !start) // défini le démarage et enregistre le temp de départ
{
temp_depart = millis();
start = 1;
}
//int temp_ecoule = millis() - temp_depart;
unsigned long temp_ecoule = millis() - temp_depart; // Les valeurs retourner par millis() sont des unsigned long pas des int
if (!sTop && temp_ecoule < 90000 && start)
{
#ifdef __DEBUG__ // Remplacement du if debug == 1
for(int i = 2; i <= 10; i++)
{
Serial.print("Capteur ");
Serial.print(i);
Serial.print(' : ');
Serial.println(analogRead(i));
delay(10);
}
#endif
if (!pin_read[2] && !pin_read[3] && pin_read[4] && !pin_read[5] && !pin_read[6]) //Tout droit
{
digitalWrite(9, 1);
digitalWrite(10, 0);
digitalWrite(11, 1);
digitalWrite(12, 0);
}
}
}
ancien :
/*
Capteur
2 = extreme gauche
3 = gauche
4 = tout droit
5 = droit
6 = extreme droit
7 = moteur droit
8 = moteur gauche
9 = bp STOP
*/
const int capteur[10] = {2, 3, 4, 5, 6, 7, 8, 9, 10};
int debug = 1; // debug actif
int mode = 0 ;// Modde du robot 0 = auto, 1 = manuelle
int sTop = 0;
int start = 0;
int temp_depart;
int pin_read[10];
int init_pin;
void setup()
{
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, OUTPUT);//moteur1
pinMode(8, OUTPUT);//Moteur1
pinMode(11, OUTPUT);//Moteur 2
pinMode(12, OUTPUT);//Moteur 2
pinMode(9, INPUT);// bp
pinMode(10, INPUT);//Ficelle qui définis le démarage
Serial.begin(9600); //port série
}
void loop()
{
init_pin = 0;
while(init_pin < 11) // lis la valeur des 10 premier pin
{
pin_read[init_pin] = 0;
pin_read[init_pin] = digitalRead(init_pin);
init_pin++;
}
if (pin_read[9] == HIGH) // SI le BP est appuier Le robot passe sTop^a 1 se qui l'arretera
{
int sTop = 1;
}
if (pin_read[10] == LOW && start == 0) // défini le démarage et remet millis à 0
{
temp_depart = millis();
start = 1;
}
int temp_ecoule = millis() - temp_depart;
if (sTop == 0 && temp_ecoule < 90000 && start == 1) // tant que sTop = 0 ET que millis() est < à 90000 Milliseconds (90 seconde) ET que start = 1 le robot ira
{
int ncapteur = 1;
while (ncapteur < 11 && debug == 1)
{
Serial.print("\n By Adrien V. \n Capteur n-");
Serial.print(ncapteur);
Serial.print(analogRead(capteur[ncapteur]));
ncapteur++;
delay(10);
}
/*
Commande motteur
relais mot 1: pin 8 et 9
relais mot 2 : pin 11 et 12
Capteur : pin 2 à 6
*/
if (pin_read[2] == LOW && pin_read[3] == LOW && pin_read[4] == HIGH && pin_read[5] == LOW && pin_read[6] == LOW) //Tout droit
{
digitalWrite(8, 1);
digitalWrite(9, 0);
digitalWrite(11, 1);
digitalWrite(12, 0);
}
}
}
Merci d’avance