Bonjour,
Voulant gerer l' altitude de mon aeroquad avec le module URM 37, je me suis aperçu que je ne pouvais pas utiliser le module avec une carte Arduino Duemilanove . En effet la carte ne possede qu'un seul port de com serie .
Aprés quelques recherches sur le web la solution trouvée est de créer un second port serie avec les voies TOR pour communiquer avec le module à ultra son.
Voici mon programme qui est une evolution du programme de www.yerobot.com:
/* Ultrasound Sensor
*------------------
- URM V3.2 ultrasonic sensor TTL connection with Arduino
- Reads values (0-300) from an ultrasound sensor (3m sensor)
- and writes the values to the serialport.
- Pin12 (Arduino)-> Pin 1 VCC (URM V3.2)
- GND (Arduino) -> Pin 2 GND (URM V3.2)
- Pin11 (Arduino) -> Pin 7 (URM V3.2)
- Pin 2 (Arduino) -> Pin 9 (URM V3.2)
- Pin 3 (Arduino) -> Pin 8 (URM V3.2)
- www.yerobot.com programme modifie pour carte arduino duemilanove
- lecture distance sur module URM 37
- le 9/9/10
*/
#include <NewSoftSerial.h>
NewSoftSerial mySerial(2, 3); // creation d'un nouveau port de communication serie voies 2 et 3
int UREnable = 11; // Ultrasound enable pin
int URPower = 12; // Ultrasound power pin
int val = 0;
int USValue = 0;
int timecount = 0; // Echo counter
int ledPin = 13; // LED connected to digital pin 13
boolean flag=true;
uint8_t DMcmd[4] = { 0x22, 0x00, 0x00, 0x22}; //distance measure command
void setup() {
Serial.begin(9600); // Sets the baud rate to 9600
mySerial.begin(9600); // initialisation du port de com vers le capteur ultrason
// application du 5v sur les bornes 1 et 7 du module URM 37
pinMode(ledPin, OUTPUT); // Sets the digital pin as output
pinMode(UREnable, OUTPUT);
digitalWrite(UREnable, HIGH); // Set to High
pinMode(URPower, OUTPUT);
digitalWrite(URPower, HIGH); // Set to High
delay(200); //Give sensor some time to start up --Added By crystal from Singapo, Thanks Crystal.
}
void loop()
{
flag=true;
//Sending distance measure command : 0x22, 0x00, 0x00, 0x22 ;
//trame à envoyer au module URM 4 mots: code fonction,val_1,val_2,somme(code fonction + val_1+ val_2 )
// codage des fonctions 0x11 :lecture T°
// 0x22 :lecture de la distance ,il est possible d'utiliser un servo sur lequel est positionner le modul URM
// alors val_1 sera egal a l'angle de rotation du servo
// 0x33 : lecture de l'EEPROM
// 0x44 : ecriture de l'EEPROM
// pour plus d'information consulter le site www.yerobot.com
for(int i=0;i<4;i++)
{
mySerial.print(DMcmd*,BYTE); //ecriture de 4 valeurs par communication serie vers la carte URM*
-
}*
-
delay(75); //delay for 75 ms*
while(flag)
{
-
if(Serial.available()>0)*
-
{*
-
int header=mySerial.read(); //0x22 lecture de 4 valeurs venant de la communication vers la carte URM*
-
int highbyte=mySerial.read();*
-
int lowbyte=mySerial.read();*
-
int sum=mySerial.read();//sum*
-
if(highbyte==255)*
-
{*
-
USValue=65525; //if highbyte =255 , the reading is invalid.*
-
}*
-
else*
-
{*
_ USValue = highbyte*255+lowbyte;_ -
}*
-
Serial.print("Distance=");*
-
Serial.println(USValue);*
-
flag=false;*
-
}*
} -
delay(50);*
}
Maintenant, si quelqu'un sait comment l'interfacer avec le programme de l'aeroquad je suis preneur .