recevoir un mot en bluetooths arduino

Bonjour,
Voila mon code arduino pour de la réception bluetooth mais pas moyen de réceptionner et de traduire un mot avec if (val == 'Mot' )

Merci de votre aide
int lampe1=13;

int val;

void setup() {

Serial.begin(9600);;
pinMode(lampe1, OUTPUT);
}
void loop()
{
if( Serial.available() ) {
val = Serial.read();
}
if (val == 'a' ) //mont
{
digitalWrite(lampe1, HIGH);
}
if (val == 'b' ) // desc
{
digitalWrite(lampe1, LOW);
}
}

'Mot' c'est ne pas un char.

...
char input[MAX_INPUT_DIMENSION];
...
if(!strcmp(input, "Mot"))
{
  digitalWrite(lampe1, HIGH); 
}
...

Val est de type int et tu le compare à un char.
Forcément ça ne va pas fonctionner.

Il te faut comprendre les différents types de variables avant de les manipuler: int, char, byte etc...

sa pourrait marcher avec char myString[] =....

Mais comment l'ajouter au programme?

bwat te l'a montré deux post avant

oui mais dan le programme ça ne marche pas.

La ligne de code n'est pas accepté.
Genre MAX_INPUT_DIMENSION n'est pas accepté.

donc au final comment le faire

vois la réponse de bwat : utiliser strcmp()

bon donc au final quelqu'un pourrait m'explique comment recevoir une chaine de caractère via bluetooth dans mon code...

pegazx:
oui mais dan le programme ça ne marche pas.

La ligne de code n'est pas accepté.
Genre MAX_INPUT_DIMENSION n'est pas accepté.

Il faut la définir ...

int  MAX_INPUT_DIMENSION = 20;

si j'ai bien compris, sa pourrait me donner ça si ça marchait....
mais il y à toujour des érreurs...

int lampe1=13;

int MAX_INPUT_DIMENSION = 20;
char input[MAX_INPUT_DIMENSION];

void setup() {

Serial.begin(9600);;
pinMode(lampe1, OUTPUT);
}
void loop()
{
if( Serial.available() ) {
val = Serial.read();
}

if(!strcmp(input, "Mot"))
{
digitalWrite(lampe1, HIGH);
}
if(!strcmp(input, "Mom"))
{
digitalWrite(lampe1, LOW);
}
}

sketch_jul12b.ino:5:31: error: array bound is not an integer constant before ‘]’ token
sketch_jul12b.ino: In function ‘void loop()’:
sketch_jul12b.ino:15:1: error: ‘val’ was not declared in this scope
sketch_jul12b.ino:18:12: error: ‘input’ was not declared in this scope
sketch_jul12b.ino:22:12: error: ‘input’ was not declared in this scope

remplace ton int MAX_INPUT_DIMENSION par un const int ou un #define

vous n'avez pas un code déja fait ou un tuto pour le faire, j'ai rien trouvé et sa doit être facile à faire quand même

Bonjour,

pegazx:
sa doit être facile à faire quand même

Qu'attends-tu pour le faire ? !!!

non mais le problème c'est que je ne sait pas le faire et qu'une seule lettre c'est facile mais pas plusieurs ou même plusieurs chiffres...

Re,

pegazx:
non mais le problème c'est que je ne sait pas le faire et qu'une seule lettre c'est facile mais pas plusieurs ou même plusieurs chiffres...

Met ton code pour une lettre et si possible entre balise #

#define LED 13

void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
}

void loop() {
int i;
char command[5];
for (i = 0; i < 4; i++) {
command = Serial.read();

  • }*

  • command[4] = '\0';*

  • Serial.println(command);*

  • if (strcmp(command, "high") == 0) {*

  • digitalWrite(LED, HIGH);*

  • } else if (strcmp(command, "1452") == 0) {*

  • digitalWrite(LED, LOW);*

  • }*
    }
    c'est bon j'ai un programme, merci pour votre aide (je n'avais pas compris le strcmp()...)
    le problème, c'est qu'il affiche sans arrêt YYYY dans le moniteur, comment changer ce problème ?
    Comment modifier le programme pour pouvoir mettre n'importe quel nombre de caractères?

  • Merci*

Bonjour,
Tu pourrais présenter ton programme de la manière suivante pour que cela soit plus lisible pour tous :

#define LED 13

void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int i;
  char command[5];
  for (i = 0; i < 4; i++) {
    command = Serial.read();  //????????
  }
  command[4] = '\0';

  Serial.println(command);

  if (strcmp(command, "high") == 0) {
    digitalWrite(LED, HIGH);
    
  } else if (strcmp(command, "1452") == 0) {
    digitalWrite(LED, LOW);
  }
}

Déjà avant de continuer, il faudrait que le programme se compile et ce n'est pas le cas.
Cherche l'erreur !
@+

le programme qui se compile au final

le problème c'est q'il dépent de ''Serial.println(command);'' ce qui je pense ralentit le transfert...

#define LED 13

void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
}

void loop() {
int i;
char command[5];
for (i = 0; i < 4; i++) {
command = Serial.read(); //????????

  • }*
  • command[4] = '\0';*
  • Serial.println(command);*
    if (strcmp(command, "hig)") == 0) {
  • digitalWrite(LED, HIGH);*

_ } else if (strcmp(command, "14*2") == 0) {_

  • digitalWrite(LED, LOW);*
  • }*
    }

Bonjour,
Je peux te garantir que ton code ne se compile pas.
Essaye de faire un effort de présentation et de mettre ton code entre balise #