Bonjour à tous!
Et oui, c'est encore moi!
Voilà, j'ai besoin d'utiliser un module radio et un servomoteur.
J'utilise la bibliothèque VirtualWire.h pour controller le module radio et la bibliothèque Servo.h pour le servo.
Le seul soucis c'est que je me suis rendu compte en faisant mon programme que ces 2 librairies n'étaient pas compatibles.
Donc je vous demande: avez-vous une solution pour faire cohabiter ces 2 composants?
Merci!
bonjour,
lien module radio, servo.
code?
Module radio: http://www.instructables.com/id/RF-315433-MHz-Transmitter-receiver-Module-and-Ardu/step3/Arduino-Virtual-Wire-Library/
Servo: A5030 Mini Digital Aircraft Servo | Spektrum
Code:
Recepteur
/*
Glove Controlled Car
http://www.speed09.com
-Code pour le recepteur-
*/
#include <VirtualWire.h>
//#include <Servo.h>
byte message[VW_MAX_MESSAGE_LEN+1];
byte messageLength = VW_MAX_MESSAGE_LEN;
//Servo monServo;
int pos = 90;
int ar_gauche = 1;
int ar_droite = 2;
int av_gauche = 5;
int av_droite = 9;
//Ultrasons
/*int trig = 6;
int echo = 7;
long lecture_echo;
long cm;*/
int buzzer = 10;
void setup(){
Serial.begin(9600);
vw_setup(2000);
vw_set_rx_pin(7);
vw_rx_start();
/*monServo.attach(2, 1000, 2000);
monServo.write(90);*/
//Ultrasons
/*pinMode(trig, OUTPUT);
digitalWrite(trig, LOW);
pinMode(echo, INPUT); */
//Phares
pinMode(ar_gauche, OUTPUT); //arrière gauche
pinMode(ar_droite, OUTPUT); //arrière droite
pinMode(av_gauche, OUTPUT); //avant gauche
pinMode(av_droite, OUTPUT); //avant droite
//Moteurs
//Channel A
pinMode(12, OUTPUT); //Moteur A
pinMode(9, OUTPUT); //Frein A
//Channel B
pinMode(13, OUTPUT); //Moteur B
pinMode(8, OUTPUT); //Frein buzzer
//Jingle
tone(buzzer, 500, 80);
Serial.print("G.");
delay(200);
tone(buzzer, 500, 80);
Serial.print("C.");
delay(200);
tone(buzzer, 500, 80);
Serial.println("C.");
delay(300);
tone(buzzer, 400, 80);
Serial.print("Glove ");
delay(200);
tone(buzzer, 300, 80);
Serial.print("Controlled ");
delay(200);
tone(buzzer, 200, 50);
Serial.println("Car");
delay(1000);
Serial.println("-------------");
Serial.println("Arduino pret!");
}
void loop(){
if (vw_get_message(message, &messageLength)){
message[messageLength]=0;
Serial.print("Recu: \n");
for (int i = 0; i < messageLength; i++){
//Serial.write(message[i]);
//Ultrason
/*digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
lecture_echo = pulseIn(echo, HIGH);
cm = lecture_echo / 58; */
/*if(cm < 10){
digitalWrite(12, HIGH);
digitalWrite(9, LOW);
analogWrite(3, 123);
digitalWrite(13, LOW);
digitalWrite(8, LOW);
analogWrite(11, 123);
digitalWrite(ar_gauche, HIGH);
digitalWrite(ar_droite, HIGH);
digitalWrite(av_gauche, LOW);
digitalWrite(av_droite, LOW);
}*/
if (strcmp((char *)message,"0")==0){
//Freins
digitalWrite(9, HIGH);
digitalWrite(8, HIGH);
Serial.println("frein");
digitalWrite(ar_gauche, LOW);
digitalWrite(ar_droite, LOW);
digitalWrite(av_gauche, LOW);
digitalWrite(av_gauche, LOW);
}
else if (strcmp((char *)message,"1")==0){
Serial.println("avancer");
// Moteurs full speed, tournent chacun dans le sens contraire pour avancer
digitalWrite(2, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(12, HIGH);
digitalWrite(9, LOW);
analogWrite(3, 255);
digitalWrite(ar_gauche, LOW);
digitalWrite(ar_droite, LOW);
digitalWrite(av_gauche, HIGH);
digitalWrite(av_droite, HIGH);
}
else if (strcmp((char *)message,"2")==0){
//Moteurs semi speed, tournent sens contraire pour reculer
Serial.println("reculer");
digitalWrite(12, HIGH);
digitalWrite(9, LOW);
analogWrite(3, 123);
digitalWrite(13, LOW);
digitalWrite(8, LOW);
analogWrite(11, 123);
digitalWrite(ar_gauche, HIGH);
digitalWrite(ar_droite, HIGH);
digitalWrite(av_gauche, LOW);
digitalWrite(av_droite, LOW);
}
if (strcmp((char *)message,"5")==0){
Serial.println("Tout droit \n"); //tout droit
//monServo.write(90);
}
else if (strcmp((char *)message,"3")==0){
Serial.println("droite \n"); //droite
//monServo.write(130);
}
else if (strcmp((char *)message,"4")==0){
Serial.println("gauche \n"); //gauche
//monServo.write(50);
}
}
}
}
Emetteur:
/*
Glove Controlled Car
http://www.speed09.com
-Code pour l'emetteur-
*/
#include <Wire.h>
#include <VirtualWire.h>
#include <Adafruit_ADXL345_U.h>
#include <Adafruit_Sensor.h>
Adafruit_ADXL345_Unified Sensor = Adafruit_ADXL345_Unified(1);
int flexSensorPinPouce = A0;
int flexSensorPinIndex = A1;
void setup(){
Serial.begin(9600);
Sensor.begin();
vw_setup(2000);
pinMode(9,OUTPUT);
vw_set_tx_pin(9);
Serial.println("A.R.C.C \n Arduino Radio Controlled Car");
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
Serial.println("Emetteur pret!");
delay(2000);
Serial.println("test");
}
void loop(){
sensors_event_t event;
Sensor.getEvent(&event);
int flexSensorPinPouce = analogRead(flexSensorPinPouce);
int flexSensorPinIndex = analogRead(flexSensorPinIndex);
int DegreePouce = map(flexSensorPinPouce, 150, 400, 100, 0);
int DegreeIndex = map(flexSensorPinIndex, 150, 400, 100, 0);
//if(DegreePouce < 20 && DegreeIndex < 20){
if(event.acceleration.x < 5 && event.acceleration.x > -5){
//La main est ouverte, on ne bouge pas
send("0");
delay(10);
}
//else if(DegreePouce > 20 && DegreeIndex > 20){
else if(event.acceleration.x > 5){
//La main est fermée, on avance
send("1");
delay(10);
}
//else if(DegreePouce < 20 && DegreeIndex > 20){
else if(event.acceleration.x < -5){
//La main est fermée avec le pouce tendu, on recule
send("2");
delay(10);
}
if(event.acceleration.y > 2){
//tourne à droite
send("3");
delay(10);
}
else if(event.acceleration.y < -2){
//tourne à gauche
send("4");
delay(10);
}
else if(event.acceleration.y > -2 && event.acceleration.y < 2){
//tout droit
send("5");
delay(10);
}
Serial.println(event.acceleration.y);
Serial.println(event.acceleration.x);
}
void send (char *message){
vw_send((uint8_t *)message, strlen(message));
vw_wait_tx();
}
un peu de lecture
J'ai déjà lu tous ces articles, mais merci quand même
Le problème ne vient pas du programme en lui-même, mais des librairies VW et Servo...