Bonjour à tous,
J'ai un petit soucis : J'ai 2 shields connectées sur mon arduino Mega 2560
Un shield wifi qui utilise les pin 4-7-10-11-12-13
un shield moteur adafruit qui utilise les pins 3-5-6-9-11
J'ai acheté un shield Go-Between de Sparkfun pour changer la pin 11 du moteur vers la pin 8
Ma question est : comment faire pour qu'au niveau de mon code ce soit pris en compte ? que faut-il écrire ?
En gros dans mon code d'évitement dobstacles j'ai ça :
/*
* Robot Waia.
* ultrasonic sensor = trigger pin 12, echo pin 13
* servo motor = pin 10
* by Romain DAROS Feb 2016
*/
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_MS_PWMServoDriver.h"
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_DCMotor *motor1 = AFMS.getMotor(1);
Adafruit_DCMotor *motor2 = AFMS.getMotor(2);
Adafruit_DCMotor *motor3 = AFMS.getMotor(3);
Adafruit_DCMotor *motor4 = AFMS.getMotor(4);
#include <Servo.h>
Servo scanservo; //Ping Sensor Servo
#define trigPin 12
#define echoPin 13
const int scanservopin = 10;
const int distancelimit = 40; //in cm
void setup() {
Serial.begin(9600);
AFMS.begin();
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
motor1->setSpeed(150);
motor2->setSpeed(150);
motor3->setSpeed(150);
motor4->setSpeed(150);
scanservo.attach(scanservopin); // Attach the scan servo
delay(2000); // wait two seconds
}
void loop() {
go();
int jarak = ping();
if (jarak<distancelimit){
stopp();
char turndir = scan();
switch (turndir){
case 'l':
turnleft();
break;
case 'r':
turnright();
break;
case 's':
turnaround();
break;
}
}
}
int ping(){
long duration, distance;
//Send Pulse
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(5);
digitalWrite(trigPin, LOW);
//Read Echo
duration = pulseIn(echoPin, HIGH);
// convert the time into a distance
distance = (duration/2) / 29.1;
return round(distance);
}
void go(){
motor1->run(FORWARD);
motor2->run(FORWARD);
motor3->run(FORWARD);
motor4->run(FORWARD);
}
void turnleft(){
motor1->run(BACKWARD);
motor2->run(FORWARD);
motor3->run(FORWARD);
motor4->run(BACKWARD);
delay(1000);
motor1->run(RELEASE);
motor2->run(RELEASE);
motor3->run(RELEASE);
motor4->run(RELEASE);
}
void turnright(){
motor1->run(FORWARD);
motor2->run(BACKWARD);
motor3->run(BACKWARD);
motor4->run(FORWARD);
delay(1000);
motor1->run(RELEASE);
motor2->run(RELEASE);
motor3->run(RELEASE);
motor4->run(RELEASE);
}
void turnaround(){
motor1->run(BACKWARD);
motor2->run(FORWARD);
motor3->run(FORWARD);
motor4->run(BACKWARD);
delay(1000);
motor1->run(RELEASE);
motor2->run(RELEASE);
motor3->run(RELEASE);
motor4->run(RELEASE);
}
void stopp(){
motor1->run(RELEASE);
motor2->run(RELEASE);
motor3->run(RELEASE);
motor4->run(RELEASE);
delay(1000);
}
char scan(){
int leftscanval, centerscanval, rightscanval;
char choice;
//Look left
scanservo.write(178);
delay(300);
leftscanval = ping();
//Look right
scanservo.write(4);
delay(1000);
rightscanval = ping();
//center scan servo
scanservo.write(83);
delay(500);
centerscanval = ping();
if ((leftscanval>rightscanval) && (leftscanval>centerscanval)){
choice = 'l';
}
else if ((rightscanval>leftscanval) && (rightscanval>centerscanval)){
choice = 'r';
}
else{
choice = 's';
}
return choice;
}
Merci à tous pour vos réponses