[TUTORIEL] - 1-Communication série (USB) entre Gladys et un Arduino


#21

C’est bon c’était pas la bonne libraries


#22

Je voudrais commander un relaie avec ce tuto mais comment faire ???


#23

C’est toujours le même principe : tu pilotes un port GPIO avec ton sketch, selon ce que tu reçois de Gladys.


#24

Dans le 1, comment trouver la valeur de la variable “valeur” car quand j’essaie de la lire ça ne fonctionne pas.


#25

Tu peux être plus précis sur le chapitre ? :wink:


#26

Le sketch entier de la partie 1


#27

T’as quoi comme sketch ?

La valeur reçu de gladys c’est

cde.valeur

Chapitre 1.3.c ( tu as les commentaires de @piznel )

void serialEvent() {
  if (deserialize(cde)) {		// Appel de la fonction qui va décoder le JSON et enregistrer ses données dans notre variable "cde". cette fonction retourne "true" si elle a réussi, "false" si échec.
// A partir d'ici, ajouter votre code pour agir en fonction des valeurs reçues. Par exemple, le code ci-dessous renvoi à Gladys le message reçu, si l'Arduino est connecté au Raspberry. Vous pourrez ainsi le lire dans les logs de Gladys :       
    String tmpCde="";
    tmpCde="{\"deviceType\":\"";
    tmpCde+=cde.id;	// On ajoute la valeur "id" de notre objet "cde".
    tmpCde+="\",\"value\":\"";
    tmpCde+=cde.valeur;	// On ajoute la valeur "valeur" de notre objet 
    tmpCde+="\"}";
    Serial.println(tmpCde);
      }
    }

#28

En faite j’essaye de contrôler un relai à partir de gladys (Ps je débuter sur gladys donc je galère un peu)


#29

Edit: J’ai dis des conneries :slight_smile:

Aucun soucis


#30

Salut @Serox,
L’exemple 1.3.c sert à lire la valeur du devicetype reçu de Gladys.
Après mon commentaire, c’est juste un exemple de traitement pour renvoyer à Gladys la valeur reçue.

Dans ton cas, on peut imaginer que cet un ordre pour enclencher ton relais.
La valeur envoyée par Gladys sera donc enregistrée dans « cde.valeur ».
À toi d’activer ton relais en écrivant un bout de code qui fait ce que tu veux selon la valeur de cette variable.


#31

J’ai essayer de le faire mais mon relais reste allumer même si je change les conditions du if


#32

Met nous ton code Arduino, ça sera plus simple :slight_smile:


#33

Avec se code mon relais ne s’allume pas :neutral_face:

#include <ArduinoJson.h>
const int RELAIS=2;
struct actionneurData {
  int id;
  int valeur;
};

actionneurData cde;

void setup() {
  Serial.begin(9600);
}

void loop() {
}

void serialEvent() {
  if (deserialize(cde)) {
    String tmpCde = "";
    tmpCde = "{\"deviceType\":\"";
    tmpCde += cde.id;
    tmpCde += "\",\"value\":\"";
    tmpCde += cde.valeur;
    tmpCde += "\"}";
    Serial.println(tmpCde);
  }
}

bool deserialize(actionneurData &data) {
  StaticJsonBuffer<55> jsonBuffer;
  JsonObject& root = jsonBuffer.parseObject(Serial);
  if (root == JsonObject::invalid()) {
    Serial.println("JSON invalid");
    return false;
  }
  else {
    Serial.println("JSON received");
    data.id = root["deviceType"];
    data.valeur = root["value"];
    return true;
  }
  if(cde.valeur==1)
  {
    digitalWrite(RELAIS, HIGH);
  }
  else
  {
    digitalWrite(RELAIS, LOW);
  }
}

#34

Salut @Serox !

Pense a baliser ton code dans les commentaires pour que ça soit plus lisible. :slight_smile:
Tu as les deux type de balise dans la barre que tu écris ton commmentaire =>
image


#35

@MathieuA
A oui merci


#36

Et du coup dans ton code tu n’as pas déclaré ton relais dans le code.

Tu as déclaré une variable const int RELAIS=2; mais tu ne l’a pas initialisé pour commencer donc dans le setup rajoute pinMode(RELAIS, OUTPUT);

Ensuite tu déclare que ton relais est sur le pin 2, est-ce bien le cas ? Tu peux nous montrer ton montage ?


#37

A oui mer*** je vite y ajouter :joy:


#38

et oui c’est bien le pin 2


#39

Maintenant c’est pareil qu’avant


#40

Salut @Serox,
Peux-tu m’expliquer ta logique, en particulier pourquoi tu as mis ton if de contrôle de cde.valeur dans la fonction deserialize ?
Tu fais une grosse erreur, et je pense qu’il faut que tu comprennes le code pour faire ce que tu veux.