Probleme de config Jeedouino / carte arduino : il y a t'il des sorties PIN a ne pas utiliser?

J’ai reussi a piloter a distance ma sortie PIN_51 pour mon 1er essai, et je souhaitais en piloter 2 autres (PIN_49 puis PIN_45), j’ai copier a l’identique mes config de la PIN_51 vers les 2 autres, mais quand j’appuie sur le bouton « Tester » dans la page « commandes générées », seul le bouton associé à ma pin_51 fonctionne, il ne se passe rien si j’appuie sur le bouton « Tester » de ma pin_49 ni celui de ma pin_45, j’en arrive à me poser la question :

Est-ce que toutes les PINs sont pilotable a distance depuis jeedom ?

Voici mes captures d’ecran pour illustrer mes essais non concluant (je precise que je fais bien « generer/generer » apres chacune de mes modifs de mes pins, et je reboot meme tout mon installation apres essai, mais rien n’y fait :
Photo 1 :

Photo 2 :

Photo 3 :

Photo 4:

Merci Merci pour vos reponses

Je ne connais pas jeeduino.
mais vous utilisez un oscilloscope pour voir un pulse de 0.7s ? au multimètre qui plus est numérique ca va être difficile.
Aprés vous avez des Pin spécifiques voir dédiées, il faut voir en fonction de votre carte arduino.

Bonjour @dom_vosges ,

Je ne comprends pas la démarche.

Vous définissez des pins avec une fonction dans le plugin, et c’est bon.
Puis dans la partie usersketch, vous leur affectez une valeur fixe.
Cela ne peut fonctionner.

Soit vous gérez vos pins directement dans le plugin.
Soit seulement dans la partie usersketch.

Bonne journée.

Bonjour Revlys,

OK, merci pour votre aide.
J’aurais besoin d’une autre information : je souhaiterais utiliser les pins utilisateurs pour effectuer une communication depuis Jeedom vers ma carte arduino Mega.

Mais je ne comprend pas trop la démarche à suivre dans jeedom :
j’ai declaré mes pins 510 en mode « Sortie numerique (Sous-type jeedom : defaut) » car les 2 autres modes de sorties ne m’inspiraient pas :

J’obtient cela ensuite :

Mais du coup, pour la suite, je suis paumé :

Comment faire pour, par exemple, envoyer une impulsion à 1 (mettre Value de la pin 510 =1) pendant un certain temps (duree d’une impulsion), puis faire retomber la valeur à 0 ?

Je ne comprend pas trop comment utiliser le communication dans le sens Jeedom vers Carte Mega.

S’il vous plait, aidez-moi, je suis un peu bloqué.

En fait je souhaite utiliser mes pins utilisateurs 510 à 518 comme un envoi d’info vers la carte Mega pour simuler la demande d’appui sur mes boutons poussoirs.

La doc n’etant pas tres detaillée à ce sujet, je dois avouer que je suis perdu, j’ai parcouru la FAQ mais je n’y ai pas trouvé de reponses.

Merci d’avance pour votre aide.

Bonjour @dom_vosges,

Les commandes utilisateurs vous permettent de transmettre une info de jeedom à l’arduino.
Ensuite, ce que vous faites de l’info, c’est à vous de le coder.

Vous pouvez jeter un œil ici pour un exemple.

Comment faire pour, par exemple, envoyer une impulsion à 1 (mettre Value de la pin 510 =1) pendant un certain temps (duree d’une impulsion), puis faire retomber la valeur à 0 ?

C’est donc à vous de le coder pour les pins utilisateurs.
Pour piste, voici un exemple:

// UserVars
// Initialisation de vos variables
unsigned long UserTimer[8];
byte UserPins[8];
//UserLoop() 
// A mettre avant l'appel userLoop() si vous avez :
// "if (NextRefresh < millis()) UserLoop(); // Appel de votre loop() toutes les 60s"
// comme appel de userLoop()
for (int i = 0; i < 8; i++)
{
    if (UserTimer[i] != 0 && UserTimer[i] < millis()) // dépassement de la temporisation
	{
	    UserTimer[i] = 0; // Suppression de la temporisation
		UserPins[i] = 0; // mise à 0 de la pin virtuelle
	}
}
// UserAction()
for (int i = 1; i < n; i++)
{
  if (isDigit(c[i])) c[i] = c[i] - '0'; // conversion simple char(ascii) vers int
}
pin_id = 100 * int(c[1]) + 10 * int(c[2]) + int(c[3]); // Numero de pin: 500 et +

if (pin_id >= 510 and pin_id < 518) // 8 pins sorties
{
    // JEEDOM  : Sortie Numérique (Sous-type Jeedom: défaut)
    // ARDUINO : c[] = U5000R -> U 500 0 R = binary 0 pin 500 -> c[4] = '0'
    // ARDUINO : c[] = U5001R -> U 500 1 R = binary 1 pin 500 -> c[4] = '1'
    i = pin_id - 510;
	if (c[4] == 1)
	{
		UserTimer[i] = millis() + 700; // Ajout de la temporisation de 0.7 secondes
		UserPins[i] = 1; // mise à 1 de la pin virtuelle
	}
}

Bonne journée.

Bonjour Revlys,

merci merci pour le coté arduino, maintenant c’est plus clair pour moi,
mais là où je galère encore, c’est comment générer mon impulsion à 1 puis retombée à 0
dans Jeedom ?

J’ai du mal à cerner ?
En gros, mais peut etre que j’ai mal compris, Jeedom envoit une valeur à 1 sur une sortie pin utilisateur, cette pin utilisateur dont je peux recuperer l’etat dans mon code arduino, je peux la tester, controler qu’elle est a 1, et c’est à mon sketch arduino de la faire retombée à 0 au bout d’un certain temps ? C’est bien cela ?

Bonjour @dom_vosges,

En gros, mais peut etre que j’ai mal compris, Jeedom envoit une valeur à 1 sur une sortie pin utilisateur, cette pin utilisateur dont je peux recuperer l’etat dans mon code arduino, je peux la tester, controler qu’elle est a 1, et c’est à mon sketch arduino de la faire retombée à 0 au bout d’un certain temps ? C’est bien cela ?

Exact, c’est d’ailleurs ce que fait le bout de code que j’ai mis dans mon post précédent.

Il est d’ailleurs même possible, si besoin, d’en renvoyer l’état à jeedom en ajoutant :

jeedom += '&';
jeedom += pin_id;	// Etat pin 51x
jeedom += '=';
jeedom += '1'; 	// '0' ou '1'

juste après le : UserPins[i] = 1; // mise à 1 de la pin virtuelle
(même si pour une impulsion de moins d’une seconde, cela n’a pas d’intérêt, c’est pour l’exemple)

Bonne journée.

(re)bonjour Revlys,

alors j’avance petit a petit, je voudrais tout d’abord montrer les modifications que je viens d’apporter dans mon sketch arduino, juste pour le moment, je me concentre uniquement sur ma pin utilisateur [510], et une fois cette pin OK, je deploerai mon code pour les suivantes :

Ce que j’ai mis dans mon « UserAction » : en gros, si j’ai bien compris, dès que Jeedom aura balançé la valeur « 1 » sur ma pin utilisateur 510 (configurer pour le coup en mode « Sortie Numérique (sous type jeedom : défaut) », mon sketch arduino va monter sa variable locale UserPins[0] à 1, va également dans le meme laps de temps armer une tempo « UserTimer[0] », cette tempo qui par la suite va permettre au sketch arduino de redescendre la valeur de la pin[510] :

  1. Voici ma partie UserAction() :
void UserAction()
	{
    int i;

    // c[1] = c[1]-'0';  ==5 (user pin start at 500)
    // c[2] = c[2]-'0';
    // c[3] = c[3]-'0';
    // pin_id = 100 * int(c[1]) + 10 * int(c[2]) + int(c[3]);   // pin action number
    //
    // c[4] to c[n-1]   // pin action value
    //
    for (int i = 1; i < n; i++)
    {
      if ( isDigit(c[i]) ) 
        c[i] = c[i] - '0'; // conversion simple char(ascii) vers int
    }
    pin_id = 100 * int(c[1]) + 10 * int(c[2]) + int(c[3]); // Numero de pin: 500 et +

    // exemple 1
    if ( pin_id >= 510 and pin_id < 518 ) // 8 pins sorties
    {
        // JEEDOM  : Sortie Numérique (Sous-type Jeedom: défaut)
        // ARDUINO : c[] = U5000R -> U 500 0 R = binary 0 pin 500 -> c[4] = '0'
        // ARDUINO : c[] = U5001R -> U 500 1 R = binary 1 pin 500 -> c[4] = '1'
        i = pin_id - 510;

        if ( c[4] == 1 ) 
        {
          UserTimer[i] = millis() + 700; // Ajout de la temporisation de 0.7 secondes
          UserPins[i] = 1; // mise à 1 de la pin virtuelle
        }
    }

`

  1. Juste avant mon UserLoop, j’ai donc inserer le code que vous m’avez fourni pour resetter ma pin utilisateur [510] lorsque la tempo sera écoulée :

    #if (UserSketch == 1)

// A mettre avant l’appel userLoop() si vous avez :
// « if (NextRefresh < millis()) UserLoop(); // Appel de votre loop() toutes les 60s »
// comme appel de userLoop()
for (int i = 0; i < 10; i++)
{
if ( UserTimer[i] != 0 && UserTimer[i] < millis() ) // dépassement de la temporisation
{
UserTimer[i] = 0; // Suppression de la temporisation
UserPins[i] = 0; // mise à 0 de la pin virtuelle
}
}

	UserLoop(); // Appel de votre loop() permanent
	// if (NextRefresh<millis()) UserLoop(); // Appel de votre loop() toutes les 60s
#endif

oups, juste un petit oubli, je mettrais donc en 0 comme ceci :

  1. déclaration des variables dans la partie UserVars :

// UserVars
// Initialisation de vos variables
unsigned long UserTimer[10];
byte UserPins[10];

Ma fois, ma question au final, qui va peut etre vous paraitre simple, mais de mon coté, je ne parviens pas à mes fins :

Comment monter la valeur de ma pin utilisateur [510] à 1 depuis Jeedom ?

Je viens d’essayer de me creer un objet virtuel (a l’aide du pluggin virtuel) comme ceci :

Mais en utilisant le bouton « tester », il ne se passe rien…

Je precise que mon relais sur ma pin 53 de ma carte arduino mega fonctionne, si j’inverse le test LOW / HIGH et que je téléverse mon sketch, je vois bien ma sortie de mon relais qui commute.

Merci pour votre aide.

Je pense que je suis presque au bout, il me manque plus qu’un coup de main pour le coté Jeedom.

Merci merci d’avance pour votre coup de main.

A bientot

Dom

Voici ce que j’obtiens dans mes logs lorsque j’appuie sur mon bouton « tester » depuis mon pluggin virtuel, disons que c’est pas ce à quoi j’aurais voulu m’attendre :

Ah, je viens de m’apercevoir que vous aviez repondu cela à Mytika il y a 17 jours :

En fait c’est juste le log qui n’est pas rempli correctement, suite à une erreur de ma part.
C’est corrigé en beta.
Mais l’arduino reçoit bien les commandes du plugin.
Vous pouvez le voir dans la console série si besoin avec #define DEBUGtoSERIAL 1

DOnc j’insiste pas avec mes logs, par contre de mon cote, j’ai activer « DEBUGtoSERIAL » dans mon sketch arduino, mais comme ma carte arduino est reliée à mon raspberry pi via le port usb, je ne peux pas utiliser l’IDE de arduino pour consulter les logs…

Enfin, les logs, c’est une chose, mais je pense juste qu’il me manque un dernier coup de main du coté de l’interface Jeedom pour gerer mon envoi de message avec Value = 1 dans la pin 510 et je serai au bout de ma demande…

A bientot

DOM

Je pense qu’il faut utiliser le pluggin « virtuel » mais peut etre que deja là je fais fausse route, donc svp, merci de m’eclairer juste pour ce dernier point… (il n’y a que là que j’ai vu qu’on pouvait envoyer des infos…)

A tout tout bientôt

DOM

Bonjour @dom_vosges,

Vous pouvez le faire directement depuis la commande de l’équipement Jeedouino:

Pour ces cas, vous n’avez pas besoin du plugin virtual.

Bonne journée.

Bonjour Revlys,

Quand je saisi « 1 » ou « 0 » dans le champs « Action Other » de ma pin 510, je fais « sauver / générer » puis j’appui sur le bouton « Test », il ne se passe rien, OK dans le bandeau vert du haut s’affiche bien « Action éxécutée avec succès » mais je ne vois pas d’effet sur mon relais sur l’arduino, c’est comme si la communication ne se faisait pas…
A +

DOM

La demarche donc si j’ai bien suivi pour tester l’envoi d’une valeur :

  1. il faut la saisir dans le champs « ACTION (OTHER) »
  2. faire « Sauver / Générer »
  3. Cliquer « Tester » pour envoyer la valeur.

Mais comme il ne se passe rien de mon coté, qu’est-ce que j’ai comme solution / page de debug pour continuer mes investigations ?

Merci par avance pour votre reponse.

Bonne journee

DOM

Bonjour @dom_vosges,

  1. il faut la saisir dans le champs « ACTION (OTHER) »
  2. faire « Sauver / Générer »
  3. Cliquer « Tester » pour envoyer la valeur.

Oui.

Quand je saisi « 1 » ou « 0 » dans le champs « Action Other » de ma pin 510, je fais « sauver / générer » puis j’appui sur le bouton « Test », il ne se passe rien, OK dans le bandeau vert du haut s’affiche bien « Action éxécutée avec succès » mais je ne vois pas d’effet sur mon relais sur l’arduino,

Ce dépends de ce que vous faites dans la partie code traitant votre pin 510…
Vous y activez un relais connecté sur autre pin ?

Bonne journée.

Voici mon code de traitement dans mon UserLoop

Je ne me trompe pas, ma pin [510] arrive bien sur UserPins[0] : c’est bien l’indice « 0 » du tableau UserPins[xxx] ?