Bonjour,
Je tourne en rond à propos de l'utilisation d'un télémètre Ultrason (UMR37) avec Arduino et Processing. J'avais résolu le problème d'installation dans Pure Data (cf. http://codelab.fr/3821) et je cherche maintenant une solution avec Processing.
Le branchement du capteur numérique se fait en appliquant le mode passif PWM.
Pin 1 alim (capteur) -> 5V (Arduino)
Pin 2 terre (capteur) -> terre (Arduino)
Pin 4 PWM (capteur) -> Pin 3 (Arduino)
Pin 6 COMP/TRIG (capteur) -> Pin 5 (Arduino)
Le Firmata d'Arduino est le suivant :
--------------------------
// # d'après : iang from DFRobot
int URPWM = 3; // PWM Output 0-25000US,Every 50US represent 1cm
int URTRIG=5; // PWM trigger pin
unsigned int Distance=0;
uint8_t EnPwmCmd[4]={0x44,0x02,0xbb,0x01}; // distance measure command
void setup(){ // Serial initialization
Serial.begin(57600); // Sets the baud rate to 9600
PWM_Mode_Setup();
}
void loop()
{
PWM_Mode();
delay(20);
} //PWM mode setup function
void PWM_Mode_Setup(){
pinMode(URTRIG,OUTPUT); // A low pull on pin COMP/TRIG
digitalWrite(URTRIG,HIGH); // Set to HIGH
pinMode(URPWM, INPUT); // Sending Enable PWM mode command
for(int i=0;i<4;i++){
Serial.write(EnPwmCmd[i]);
}
}
void PWM_Mode(){ // a low pull on pin COMP/TRIG triggering a sensor reading
digitalWrite(URTRIG, LOW);
digitalWrite(URTRIG, HIGH); // reading Pin PWM will output pulses
unsigned long DistanceMeasured=pulseIn(URPWM,LOW);
if(DistanceMeasured==50000){ // the reading is invalid.
Serial.print("Invalid");
}
else{
Distance=DistanceMeasured/50; // every 50us low level stands for 1cm
}
//Serial.print("Distance(cm): ");
Serial.println(Distance);
}
--------------------------
Et le code Processing est le suivant :
--------------------------
import cc.arduino.*;
import processing.serial.*;
Arduino arduino;
void setup(){
size(400, 400);
arduino = new Arduino(this, Arduino.list()[0], 57600);
}
void draw(){
print("Valeur = " + arduino.digitalRead(3));
}
--------------------------
Avec ce code, je n'obtiens que des zéros. C'est vrai que le mode passif PWM m'échappe un peu... Le firmata est bon puisque j'obtiens bien la distance dans Pure Data. Qu'est-ce qu'il me manque dans le code Processing pour que cela fonctionne ?
Cordialement,
RP.
Hors ligne
Pages: 1