//Chariot Démo Conduit par Télécommande IR /* Compléter les lignes de 85 à 90 */ #define Telecommande 2 #define M_G_ARR 9 #define M_G_AV 10 #define M_D_AV 11 #define M_D_ARR 12 #define Capt_D A5 #define Capt_G A4 #define vitesse_moy 128 #define vitesse_max 200 #include RC5 rc5(Telecommande); uint8_t vitesse,mode; unsigned long time_cote; // commande moteur pour les différents déplacements void Marche_AV() { digitalWrite(M_D_ARR,LOW); digitalWrite(M_G_ARR,LOW); analogWrite(M_D_AV,vitesse); analogWrite(M_G_AV,vitesse); } void Marche_AV_G() { digitalWrite(M_D_ARR,LOW); digitalWrite(M_G_ARR,LOW); analogWrite(M_D_AV,LOW); analogWrite(M_G_AV,vitesse); } void Marche_AV_D() { digitalWrite(M_D_ARR,LOW); digitalWrite(M_G_ARR,LOW); analogWrite(M_D_AV,vitesse); analogWrite(M_G_AV,LOW); } void Marche_ARR_D() { digitalWrite(M_D_ARR,HIGH); digitalWrite(M_G_ARR,LOW); digitalWrite(M_D_AV,LOW); digitalWrite(M_G_AV,LOW); } void Marche_ARR_G() { digitalWrite(M_D_ARR,LOW); digitalWrite(M_G_ARR,HIGH); digitalWrite(M_D_AV,LOW); digitalWrite(M_G_AV,LOW); } void Marche_NULL() { digitalWrite(M_D_ARR,LOW); digitalWrite(M_G_ARR,LOW); digitalWrite(M_D_AV,LOW); digitalWrite(M_G_AV,LOW); } void setup() { pinMode(Telecommande,INPUT); pinMode(Capt_D,INPUT); pinMode(Capt_G,INPUT); pinMode(M_D_ARR, OUTPUT); pinMode(M_G_ARR, OUTPUT); pinMode(M_D_AV, OUTPUT); pinMode(M_G_AV, OUTPUT); mode=8; } void loop() { // frottements sur les cotés if ((digitalRead(Capt_D)==0) && mode!=1) { mode=1; time_cote=millis(); } if ((digitalRead(Capt_G)==0) && mode!=2){ mode=2; time_cote=millis(); } // Direction selon la télécommande unsigned char toggle; unsigned char address; unsigned char command; if (rc5.read(&toggle, &address, &command)){ if (command== ) mode= ; // Av tourne à gauche else if(command== ) mode= ; // AR tourne à gauche else if(command== ) mode= ; // AV tourne à droite else if(command== ) mode= ; // AR tourne à droite else if(command== ) mode= ; // Marche AV else if(command== ) mode= ; // STOP } // Commande du mouvement switch(mode){ // mouvement dû aux parechocs case 1: if ((millis()-time_cote)<200) Marche_ARR_G(); else { vitesse=vitesse_moy; Marche_AV_D(); if ((millis()-time_cote)>400) mode=8; } break; case 2: if ((millis()-time_cote)<200) Marche_ARR_D(); else { vitesse=vitesse_moy; Marche_AV_G(); if ((millis()-time_cote)>400) mode=8; } break; // Mouvements commandés par la télécommande case 3: // Roue gauche AV vitesse=vitesse_moy; Marche_AV_G() ; break; case 4: // Roue gauche ARR vitesse=vitesse_moy; Marche_ARR_G() ; break; case 5: // Roue droite AV vitesse=vitesse_moy; Marche_AV_D() ; break; case 6: // Roue droite ARR vitesse=vitesse_moy; Marche_ARR_D() ; break; case 7: // Roue droite et gauche AV vitesse=vitesse_max; Marche_AV() ; break; case 8: // Arrêt Marche_NULL() ; break; } }