bonjour,
je travaille actuellement sur un robot, le robot ce déplace via les touches de mon clavier. J'aimerais par contre que le robot s'arrête lorsqu'il est trop proche d'un obstacle ( capteurs hc-sr04 )
programme arduino :
#define dir_1 2
#define pwm_1 3
#define dir_2 4
#define pwm_2 5
#define dir_3 7
#define pwm_3 6
#define dir_4 8
#define pwm_4 9
int pwm_value;
int execute_timer = 0;
void setup() {
Serial.begin(9600);
while (!Serial); // pour certains Arduino on attend que le port Série soit connecté
pinMode(pwm_1,OUTPUT);
pinMode(dir_1,OUTPUT);
pinMode(pwm_2,OUTPUT);
pinMode(dir_2,OUTPUT);
pinMode(pwm_3,OUTPUT);
pinMode(dir_3,OUTPUT);
pinMode(pwm_4,OUTPUT);
pinMode(dir_4,OUTPUT);
}
void loop() {
if (Serial.available() > 0) {
execute_timer = 0;
char key[1];
int r = Serial.readBytes(key, 1);
switch (key[0]) {
// the keyboard
case 'Z': {
digitalWrite(dir_1,HIGH); //controls the direction the motor
digitalWrite(dir_2,HIGH);
analogWrite(pwm_2,50);
analogWrite(pwm_1,50);
digitalWrite(dir_3,HIGH); //controls the direction the motor
digitalWrite(dir_4,HIGH);
analogWrite(pwm_3,50);
analogWrite(pwm_4,50);
break;
}
case 'S': {
digitalWrite(dir_1,LOW); //controls the direction the motor
digitalWrite(dir_2,LOW);
analogWrite(pwm_2,50);
analogWrite(pwm_1,50);
digitalWrite(dir_3,LOW); //controls the direction the motor
digitalWrite(dir_4,LOW);
analogWrite(pwm_3,50);
analogWrite(pwm_4,50);
Serial.println("DOWN");
break;
}
case 'Q': {
digitalWrite(dir_1,HIGH); //controls the direction the motor
digitalWrite(dir_2,LOW);
analogWrite(pwm_2,90);
analogWrite(pwm_1,90);
digitalWrite(dir_3,LOW); //controls the direction the motor
digitalWrite(dir_4,HIGH);
analogWrite(pwm_3,90);
analogWrite(pwm_4,90);
break;
}
case 'D': {
digitalWrite(dir_1,LOW); //controls the direction the motor
digitalWrite(dir_2,HIGH);
analogWrite(pwm_2,90);
analogWrite(pwm_1,90);
digitalWrite(dir_3,HIGH); //controls the direction the motor
digitalWrite(dir_4,LOW);
analogWrite(pwm_3,90);
analogWrite(pwm_4,90);
break;
}
case 'E': {
digitalWrite(dir_1,HIGH); //controls the direction the motor
digitalWrite(dir_2,HIGH);
analogWrite(pwm_2,90);
analogWrite(pwm_1,0);
digitalWrite(dir_3,HIGH); //controls the direction the motor
digitalWrite(dir_4,HIGH);
analogWrite(pwm_3,90);
analogWrite(pwm_4,0);
break;
}
case 'A': {
digitalWrite(dir_1,HIGH); //controls the direction the motor
digitalWrite(dir_2,HIGH);
analogWrite(pwm_2,0);
analogWrite(pwm_1,90);
digitalWrite(dir_3,HIGH); //controls the direction the motor
digitalWrite(dir_4,HIGH);
analogWrite(pwm_3,0);
analogWrite(pwm_4,90);
break;
}
case 'C': {
digitalWrite(dir_1,LOW); //controls the direction the motor
digitalWrite(dir_2,LOW);
analogWrite(pwm_2,90);
analogWrite(pwm_1,0);
digitalWrite(dir_3,LOW); //controls the direction the motor
digitalWrite(dir_4,LOW);
analogWrite(pwm_3,90);
analogWrite(pwm_4,0);
break;
}
case 'W': {
digitalWrite(dir_1,LOW); //controls the direction the motor
digitalWrite(dir_2,LOW);
analogWrite(pwm_2,0);
analogWrite(pwm_1,90);
digitalWrite(dir_3,LOW); //controls the direction the motor
digitalWrite(dir_4,LOW);
analogWrite(pwm_3,0);
analogWrite(pwm_4,90);
break;
}
case 'T': {
digitalWrite(dir_1,HIGH); //controls the direction the motor
digitalWrite(dir_2,LOW);
analogWrite(pwm_2,90);
analogWrite(pwm_1,90);
digitalWrite(dir_3,HIGH); //controls the direction the motor
digitalWrite(dir_4,LOW);
analogWrite(pwm_3,67);
analogWrite(pwm_4,67);
break;
}
case 'R': {
digitalWrite(dir_1,LOW); //controls the direction the motor
digitalWrite(dir_2,HIGH);
analogWrite(pwm_2,90);
analogWrite(pwm_1,90);
digitalWrite(dir_3,LOW); //controls the direction the motor
digitalWrite(dir_4,HIGH);
analogWrite(pwm_3,67);
analogWrite(pwm_4,67);
break;
}
case 'G':{
digitalWrite(dir_1,HIGH); //controls the direction the motor
digitalWrite(dir_2,HIGH);
analogWrite(pwm_2,0);
analogWrite(pwm_1,90);
digitalWrite(dir_3,HIGH); //controls the direction the motor
digitalWrite(dir_4,HIGH);
analogWrite(pwm_3,0);
analogWrite(pwm_4,0);
break;
}
case 'F':{
digitalWrite(dir_1,HIGH); //controls the direction the motor
digitalWrite(dir_2,HIGH);
analogWrite(pwm_2,90);
analogWrite(pwm_1,0);
digitalWrite(dir_3,HIGH); //controls the direction the motor
digitalWrite(dir_4,HIGH);
analogWrite(pwm_3,0);
analogWrite(pwm_4,0);
break;
}
case 'V':{
digitalWrite(dir_1,HIGH); //controls the direction the motor
digitalWrite(dir_2,HIGH);
analogWrite(pwm_2,0);
analogWrite(pwm_1,0);
digitalWrite(dir_3,HIGH); //controls the direction the motor
digitalWrite(dir_4,HIGH);
analogWrite(pwm_3,90);
analogWrite(pwm_4,0);
break;
}
case 'B':{
digitalWrite(dir_1,HIGH); //controls the direction the motor
digitalWrite(dir_2,HIGH);
analogWrite(pwm_2,0);
analogWrite(pwm_1,0);
digitalWrite(dir_3,HIGH); //controls the direction the motor
digitalWrite(dir_4,HIGH);
analogWrite(pwm_3,0);
analogWrite(pwm_4,90);
break;
}
case 'H':{
digitalWrite(dir_1,LOW); //controls the direction the motor
digitalWrite(dir_2,LOW);
analogWrite(pwm_2,90);
analogWrite(pwm_1,0);
digitalWrite(dir_3,LOW); //controls the direction the motor
digitalWrite(dir_4,LOW);
analogWrite(pwm_3,0);
analogWrite(pwm_4,0);
break;
}
case 'J':{
digitalWrite(dir_1,LOW); //controls the direction the motor
digitalWrite(dir_2,LOW);
analogWrite(pwm_2,0);
analogWrite(pwm_1,90);
digitalWrite(dir_3,LOW); //controls the direction the motor
digitalWrite(dir_4,LOW);
analogWrite(pwm_3,0);
analogWrite(pwm_4,0);
break;
}
case 'N':{
digitalWrite(dir_1,LOW); //controls the direction the motor
digitalWrite(dir_2,LOW);
analogWrite(pwm_2,0);
analogWrite(pwm_1,0);
digitalWrite(dir_3,LOW); //controls the direction the motor
digitalWrite(dir_4,LOW);
analogWrite(pwm_3,90);
analogWrite(pwm_4,0);
break;
}
case ',':{
digitalWrite(dir_1,LOW); //controls the direction the motor
digitalWrite(dir_2,LOW);
analogWrite(pwm_2,0);
analogWrite(pwm_1,0);
digitalWrite(dir_3,LOW); //controls the direction the motor
digitalWrite(dir_4,LOW);
analogWrite(pwm_3,0);
analogWrite(pwm_4,90);
break;
}
case '\n': {
analogWrite(pwm_2,0);
analogWrite(pwm_1,0);
analogWrite(pwm_3,0);
analogWrite(pwm_4,0);
break;
}
}
}
}