Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2013-06-27 18:18:03 Problème de code Processing avec Arduino+Télémètre

Pertuit
membre
Date d'inscription: 2011-11-21
Messages: 59

Problème de code Processing avec Arduino+Télémètre



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

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024