Un petit truc que je ne comprends pas ... par l'interface série j'envoie à mon arduino une valeur numérique et lui demande de me renvoyer cette valeur, mais je reçois toujours ma valeur + 4813 ...
Pourquoi ce décalage ?
Voici mon code (partiel car seul cette partie me pose problème)
int req = 13; //mic REQ line goes to pin 5 through q1 (arduino high pulls request line low)
int dat = 12; //mic Data line goes to pin 2
int clk = 11; //mic Clock line goes to pin 3
volatile int i = 0; int j = 0; int k = 0;
float mm;
int cmdByte;
byte mydata[14];
void setup()
{
Serial.begin(19200);
pinMode(req, OUTPUT);
pinMode(clk, INPUT);
pinMode(dat, INPUT);
digitalWrite(clk, HIGH); // enable internal pull ups
digitalWrite(dat, HIGH); // enable internal pull ups
digitalWrite(req, LOW); // set request at high
// attachInterrupt(0, pulse, RISING);
}
void loop()
{
}
//void pulse()
...
...
void serialEvent()
{
cmdByte = Serial.read();
Serial.print(cmdByte);
}
Le moniteur série de l'environnement Arduino envoie des caractères. Si tu envoies 0, l'Arduino va en réalité recevoir le caractère '0' (=48) puis un retour chariot '\r' (=13).
Il y a deux moyens de pallier au problème :
se passer du moniteur série de l'environnement Arduino et envoyer la valeur (et non le caractère) ;
ou soustraire 48 à la valeur reçue sur ta carte Arduino.
je n'avais effectivement pas pensé que le moniteur série envoyait des caractères (ce qui pourtant est logique) et quand je passe par mon programme VB.NET pour envoyer et recevoir les données tout ce passe bien car j'envoie et reçois des int.
Autre problème ... j'ai modifié ma fonction SerialEvent, et la méthode detachInterrupt ne fonctionne pas ... ce que je ne comprends pas car la méthode attachInterrupt marche et est appelée dans les mêmes conditions ...
void serialEvent()
{
cmdByte = Serial.read(); // receive command from USB interface
if (cmdByte=1){
attachInterrupt(0, pulse, RISING); // enable requests to digital indicator triggered by the encoder
}else{
detachInterrupt(0); // disable requests to digital indicator
}
}
Euh correction, ... ce ne sont pas les méthodes qui sont en cause mais bien la condtion ... j'ai l'impression que attachInterrupt est appelée quelque soit le cmdByte reçu ...
Ervann:
Euh correction, ... ce ne sont pas les méthodes qui sont en cause mais bien la condtion ... j'ai l'impression que attachInterrupt est appelée quelque soit le cmdByte reçu ...