Je bute sur une variable que j'incrémente via un BP, cette variable va de 0 à 500.
Forcement extrêmement long à faire évoluer de plus ou de moins 1, et de 1 en 1.
Je cherche à faire incrémenter ma variable après une durée de pression sur le BP en sautent de 5 puis 10 etc... et de revenir a une incrémentation normal après relâchement.
D'une pression simple j'obtiens +1
Si je reste appuyer 1 demi seconde de j'obtiens + 5 en 4 sauts (donc 5x4) avec un temps de pose de 500ms entre les incrément automatique puis de +10 en 5 saut avec pose etc et ainsi de suite.
Il y a pas de code a retranscrire ici, hé oui puisque je bloque totalement !
Lorsque tu appuies sur ton BP, tu fais une différence du temps passé avec le temps actuel en utilisant la fonction millis().
Ensuite avec un switch-case, tu contrôles la valeur de cette différence et tu mets dans une variable "increment" la valeur de l'incrément qui s'y rapporte.
skywodd: je suis une quiche en anglais , mais j'ai compris quand même (en gros).
jean-francois: j'avais dans l'idée d'utiliser millis().
Il me manquer les conditions de teste, j'en été rester à de simples "If" (en paquet).
Je me suis écrit une version avec les switch case, ... il ma parut très long.
Alors après réflexion j'ai peut-être trouver plus compacte en changeant un brin l'usage.
Le résultat incrémente -1 en pression simple et jusqu'à 4 fois -5 en pression longue de 500ms au delà il incrémente avec un multiple de 5 (ex: -1, -5, -5, -5, -5, -25, -30, -35 ..). Après relâchement il teste, si la valeur est négative il remet à zéro.
Voyez vous même si quelque chose choque ...
Note : j'utilise le notepad++, donc normal si il y a des fautes
// lecture de freq1 minima
if (analogRead(pin_freq1) <= 400 && etat == false){
freq[0]--; temps = millis();
// incremente plus rapidement si...
while(analogRead(pin_freq1) <= 400){
tempo = millis() - temps
teste_temps = tempo - (int(tempo / 1000); // incremente a chaque 500 ms, max.4 fois
if (teste_temps == 500 && increment <= 4){
increment++; freq[0] = freq[0] - 5; }
else if (teste_temps == 500 && increment >= 5){
freq[0] = freq[0] - (5 * increment); increment++; }// increment avec acceleration 25,30,35,40,45...
else if (teste_temps == 510){
// rafraichi un affichage LCD eventuellement
}
}
increment = 0; etat = true;
}
if (freq[0] <= 0){freq[0] = 1; }
Bonjour, désolé de te dire ça mais ton code est bof quand même on peut faire mieux aller regarde:
if (analogRead(pin_freq1) <= 400 && etat == false) // appuie sur le bouton
{
temps = millis(); //prise du temps début
while(analogRead(pin_freq1) <= 400) //tant que bouton enfoncé
{
tempo = millis() - temps; //temps depuis appuie
cpt_sec= millis() - temps - nb_sec; //compteur seconde depuis appuis toujours <1
switch (x)
{
case 1 :
if (tempo >500){ x=2; ajout=1;} //minimums pour +1 500ms
break;
case 2 :
if (tempo>1000){ x=3; ajout=2;} // passage a +2 si appui + d'une seconde
break;
case 3 :
if (tempo>2000){ x=4; ajout=5;} // passage a +5 si appui + de 2 seconde
break;
case 4 :
if (tempo>4000) { ajout=10; } //passage a +5 +1 par tour si appui + de 4 seconde
break;
}
if (cpt_sec>1000) // toute les 1 seconde depuis l'appuie sur le bouton
{
nb_sec++; //nb seconde passée
compteur=compteur+ajout; // incrémentation de ton compteur progressif 1/s|0.5s 2/s|1s 5/s|2s 10/s|4s
}
}
}
else
{
ajout =0; // remise a 0 de k'ajout progressif
x=1; // retour a la case 1 du case progressif
}
voila en éspérant que ça t'aide, manque plus qu'a déclaré tes variable et normalement c'est bon
Je pense avoir trouver plus court ....
je reset les variables "incrément" et "teste_temps" avant le teste.
Maintenant je me demande pourquoi j'avais écrit un int() alors qu'il me suffisez de faire une addition de l'un et une soustraction de l'autre, sans même avoir besoin de mettre une variable de plus.
if (analogRead(pin_freq1) < 400 && etat == false){
freq[0]--; temps = millis(); // incremente plus rapidement si...
while(analogRead(pin_freq1) < 400)
{
tempo = millis() - temps; // increment avec acceleration par tranche de 500ms vers 5, 10, 15, 20
if (tempo - teste_temps > 500){increment++; teste_temps = teste_temps + 500; freq[0] = freq[0] - (5 * increment); }
}
etat = true;
}