TTP229 comme inter bistable avec relay solid state

Bonjour a tous , je cherche à faire des interrupteur bistable avec un petit clavier 16 touche capacitives le ttp 229 et une, heu pardon 2 cartes 8 relay solid state.

Après moultes recherches, galères et heures passer à essayer différents scripts (avec interruption ou pas ) j ’ ai enfin réussi a avoir un résultat et surtout appris énormément de choses!

J’ai réussi a avoir dans le moniteur série le numéro de la touche sur laquelle on appuie.

Donc si j’appuie sur 4 je reçois un 4 dans le moniteur série , si j appuies sur 12 un 12 apparait !! youupeee !

Voici le code

#include <TTP229.h>

const int SCL_PIN = 2;  // The pin number of the clock pin.
const int SDO_PIN = 3;  // The pin number of the data pin.

TTP229 ttp229(SCL_PIN, SDO_PIN); // TTP229(sclPin, sdoPin)

void setup()
{
	Serial.begin(9600);
	Serial.println("Start Touching One Key At a Time!");
}

void loop()
{
	uint8_t key = ttp229.ReadKey16(); // Blocking
	if (key) Serial.println(key);

}

Maintenan je cherche donc a faire un bistable sur le relay qui porte le numero du bouton…

j’ai cree des variables R1, R2, R3 ect pour déclarer les sorties de l’arduino sur lesquelles les relays sont branchés et des variables booleennes etatR1, etatR2, ect… pour leurs etats.

j’aimerai faire un truc du genre

etatR(key)==!etatR(key) pour changer l’etat et ensuite digitalWrite (R(key), etatR(key))

plutot que me taper si key==1 alors etatR1==!etatR1 ; digitalWrite (R1,etatR1)
si key==2 alors etatR2==!etatR2 … ect

Deja est ce la bonne approche ?

Si j appuis sur 6, je recoit un 6 en serial, ca inverse l’etat de etatR6 et ca met la sortie R6 a linverse de l’etat precedent, donc si eteint ca allume et vice et versa.

Merci de votre aide.

Bonjour,

Oui, c'est une bonne approche.
Tu peux même te passer de la variable et faire digitalWrite(R1,!digitalRead(R1)).
Tu peux aussi utiliser une table au lieu de variables simples.

Merci de ta réponse

Ah ok il metra la valeur du pin a l'inverse de ce qu'il lit sur le pin ?? Trop bien je savais pas que digitalRead marchais sur les sorties !

void loop()
{
  uint8_t key = ttp229.ReadKey16(); // Blocking
  if (key) Serial.println(key);
 
 
  if (key==9)   {
    
    
    digitalWrite(R1, !digitalRead(R1));
    
    
    
  }

ca fonctionne !! 

Par contre y a t il un moyen de dire digitalWrite(R(key), !digitalRead(R(key)));  ??
 
  

}

Oui, tu definis un tableau avec les pins des relais

const byte pinRelay={3,4,5,6,7,8,9,10,11,12};

et tu l'utilises pour commander le relais

digitalWrite(pinRelay[key], !digitalRead(pinRelay[key]));

ouhaaa c'est genial ! je m'merveille de jour en jour !!

J'avais defini en cont int

R1=5 R2=6 r3 ect.....

Pourquoi cela ne fonctionne pas comme je l'avais fait ?

digitalWrite(R(key), !digitalRead(R(key)));

Si key vaut 9 cela ne reviens pas a digitalWrite(R9, !digitalRead(R9)); ??

En tout cas merci bcp de ton aide et de me faire decouvrir les tableaux !

ozitoune:
Pourquoi cela ne fonctionne pas comme je l'avais fait ?

Parce que en C le nom de la variable disparaît complètement après la compilation. Que tu appelles ta variable R6 ou TARTEMPION c'est pareil, donc tu ne peux pas faire R(key).

j'avoue ne pas comprendre ?? :confused:

Il n'y a aucun moyen de faire R(ce qui apparait dans la console serie) ??

et apres compil le nom des variables qui disparait la moi rien comprendre du tout... :frowning:

ozitoune:
et apres compil le nom des variables qui disparait la moi rien comprendre du tout... :frowning:

Ca veut dire que le nom de la variable n'existe plus dans le programme compilé, donc tu ne peux pas faire une opération avec le nom de la variable.