Le but n'est pas de donner un code tout fait aux gens, mais je suis d'accords avec toi, et je l'aurai fait si j'avais MON pc sous la main, et un arduino sur moi... Ce qui n'est pas le cas.
Pour en revenir au pb,ce que je veux dire, c'est que cette fonction, qui teste seulement 1 valeur du tableau est inutile... comme j'ai tenté de lui montré avant, il est possible de faire tenir ce code dans le main() en ajoutant pas grand chose...
Dans son cas, j'aurai fait un truc du genre : (sans tableau)
int oldState = 0;
int newState = 0;
void loop()
{
if (newState = digitalRead(bt1) && oldState == 0)
radio_envoie("a");
oldState = newState;
}
Une version plus évoluée, avec des tableaux.
- dont les boutons ne sont pas forcément sur des broches qui se suivent.
- si on ajoute des boutons, il suffit de modifier les variables publiques et le define. selon le besoin, modifier la fonction qui doit envoyer les données
- si on fabrique une matrice d’interrupteurs, c'est facilement adaptable ( c'est la méthode que j'ai utilisée pour utiliser les 60 touches d'un clavier)
- avec un code de ce genre,
//ce n'est pas un sketch utilisable, ce sont des bouts de code qu'il faudrait adapter
--- variables publiques ---
#define NBRPIN 5
int pinTab[NBRPIN] = {2,4,5,6,9}
int oldTab[NBRPIN] = {0};
int newTab[NBRPIN] = {0};
---- init pin dans fonction setup()---
for (int i =0; i<NBRPIN; i++)
{
pinMode(pinTab[i], OUTPUT);
}
---------------------------------------
void lireEtat( int *etatTab, int *pinTab, int nbrMax)
{
for (i = 0; i<NbrMax; i++)
etatTab[i] = digitalRead(pinTab[i]);
}
void diffEtatExec( int *etatTab, int *oldTab, int nbrMax)
{
for (i = 0; i<NbrMax; i++)
if(etatTab[i] != oldTab[i]) // ou autre test selon besoin...
{
//ici on voit ce qu'on fait dans le cas ou l'état de pinTab[i] à changé
// on ne s'occupe plus de rien... on sait juste que i représente le numéro du bouton enfoncé ou dont l'état à changé (selon le test effectué au dessus)
// ne sachant pas ce que le PO veut faire :
// si action différente ou valeur envoyée différente selon le bouton appuyée
// pour ne pas mal conseiller ;), selon ce qu'on veut faire,
// - je traiterai soit l'action ICI,
// - soit je renverais une structure ou un tableau contenant ce que j'ai besoin
// pour que l'action soit traitée dans une autre fonction dédiée...
// (ce qui demanderais d'ajouter un pointeur en paramettre de la fonction...
// ou alors de changer son type
}
}
void cpEtat( int *etatN, int *etatO, int nbrMax)
{
for (int i = 0; i <nbrMax; i++)
etatO[i] = etatN[i];
}
loop()
{
lireEtat(newTab, pinTab); // on lit les pin, et on enregistre leur état dans newTab
diffEtatExec(newTab, oldTab); //on cherche les différences
cpEtat(newTab, oldTab); //on garde une copie de l'état actuel du tableau dans oldTab pour le prochain test..
}
Je rappelle que j'ai pas les outils pour coder ici, j'ai taper ce code comme j'ai pu, et il n'a absolument pas pu être testé... donc, possible erreur de pointeurs, de ";" ou autre...