j'ai mis le code a jours
bonjours je créer un jeux actuellement mais je coince un peut le but du jeux serais que sur ma bread bord je mette un 4*7 segment et que le compteur monte assez rapidement et que les but est d’arrêter le compteur quand il passe exactement a 1000 (grâce a un bouton poussoir, j'aurais besoin d'aide aussi a ce sujet plus tard) et si on l'arrette a 1000 pile on gagne
voila le code en question qui nes pas du tous fini.
#include <SevSeg.h>
int button = 13;
int etat=0; //etat du bouton
int prev_etat=0;
int compteur=0; // le compteur qui apparetra sur le 4*7segment
int etat2; //etat du bouton reset
int reset = A5; // bouton reset
SevSeg sevseg;
void setup() {
sevseg.Begin(0,0,1,2,3,4,5,6,7,8,9,10,11);
pinMode(button, INPUT); //on créé une entrée : on reçoit l'état du bouton
pinMode(reset, INPUT);
}
void loop(){
//sevseg.NewNum(compteur,1);
//sevseg.PrintOutput();
for(compteur==0; compteur<=1050; compteur++ ) //fais allez le compteur de 0 a 1050
{
sevseg.NewNum(compteur,0);
sevseg.PrintOutput();
int val=digitalRead(button);
etat = digitalRead(button); //On lit l'état du bouton
if((val==HIGH) && (prev_etat==LOW)){
etat=1 - etat;
delay(10);}
prev_etat=val;
if(etat==0)
{
sevseg.PrintOutput();
}
else
{
compteur<=1050; compteur++;
sevseg.PrintOutput();}
if(compteur==1050)
{
compteur=0;}
else
{
}
break;}
{ etat2 = analogRead(reset);}
if(etat2==HIGH)
{
compteur = 0;
sevseg.NewNum(compteur,0);
sevseg.PrintOutput();
}
else
{
}
//break;
}
et mon problème est que a la boucle for() je dois mettre un delay pour que le compteur atteigne 1050 en 5000ms car la il les atteins en 50ms mais je ne sais pas comment faire si quelqu’un a la solution ?
et pour le bouton j'aimerais enregistrer l’état du bouton ces a dire que des que on appui sur le bouton le compteur sarrette même si on relache le bouton ( du coup a coter il y aura un bouton reset ) la valeur reste fixe sur l'afficheur, donc faudrais trouver un moyen de mettre en pause le compteur des que on appui sur le bouton.
merci.
for(compteur==0; compteur<=1050; compteur++; )
== au lieu de =
divise 5000 par 1050 et tu as le delay a mettre
pour le bouton ===> fonction boolean
d'accord mais je le met ou mon delay ?
et la j'ais avancer sur mon bouton reset mais je n'arrive pas a l'integrer ces a dire que des que j'appui dessus il ne se passe rien voila le code
#include <SevSeg.h>
int button = 13; //broche où on liera la valeur renvoyée par le capteur
//broche où est reliée la cathode de la LED
int etat; //variable où on stockera l'état du bouton
//variable permettant de savoir si on éteint ou allume la LED
int compteur=0;
int etat2;
int reset = A5;
SevSeg sevseg;
void setup() {
sevseg.Begin(0,0,1,2,3,4,5,6,7,8,9,10,11);
pinMode(button, INPUT); //on créé une entrée : on reçoit l'état du bouton
pinMode(reset, INPUT);
}
void loop(){
// sevseg.NewNum(0003,1);
// sevseg.PrintOutput();
for(compteur==0; compteur<=1050; compteur++ )
{
sevseg.NewNum(compteur,0);
etat = digitalRead(button); //On lit l'état du bouton
if(etat==LOW){
sevseg.PrintOutput();}
else
{
compteur<=1050; compteur++;
sevseg.PrintOutput();
{etat2 = analogRead(reset);
if(etat2==LOW)
{
compteur==0;
sevseg.NewNum(compteur,0);
sevseg.PrintOutput();}
}
}
break;}
{
}
}
Pour gérer un bouton ce n'est pas si simple, voici un tuto qui explique comment faire.
Concernant la gestion du temps de ton compte à rebours, le mieux c'est d'utiliser la fonction millis() tel que décrit dans le tuto. Sinon, si tu veux que ta boucle de 1050 itérations dure 5 secondes, alors 5000/1050 = ~5ms par boucle, donc avec un delay(5); ta boucle durera légèrement plus de 5 secondes.
Mais si tu utilises delay() tu ne pourras pas gérer l'état de ton bouton en même temps... Lis le tuto ci-dessus, ca t'épargnera beaucoup de prises de tête...
merci zorro je vais checker ca.
et aurais tu la solution a l'erreur " Break statment not whithin a loop or switch "
voila le code
qui a subit 2,3 changement
#include <SevSeg.h>
int button = 13; //broche où on liera la valeur renvoyée par le capteur
//broche où est reliée la cathode de la LED
int etat; //variable où on stockera l'état du bouton
//variable permettant de savoir si on éteint ou allume la LED
int compteur=0;
int etat2;
int reset = A5;
SevSeg sevseg;
void setup() {
sevseg.Begin(0,0,1,2,3,4,5,6,7,8,9,10,11);
pinMode(button, INPUT); //on créé une entrée : on reçoit l'état du bouton
pinMode(reset, INPUT);
}
void loop(){
// sevseg.NewNum(0003,1);
// sevseg.PrintOutput();
{for(compteur==0; compteur<=1050; compteur++ )
{
sevseg.NewNum(compteur,0);
etat = digitalRead(button); //On lit l'état du bouton
if(etat==LOW){
sevseg.PrintOutput();}
else
{
compteur<=1050; compteur++;
sevseg.PrintOutput();}
}
break;}
{ etat2 = analogRead(reset);}
{ while(etat2==HIGH);
{ compteur==0;
{ {
sevseg.NewNum(compteur,0);
sevseg.PrintOutput();}
while(etat2==LOW);
{ sevseg.NewNum(compteur,0);
sevseg.PrintOutput();
}
}
}
break;
}
}
InfinityScal:
et aurais tu la solution a l'erreur " Break statment not whithin a loop or switch "
oui, t'as mis un "break;" à un endroit où il ne doit pas être...
Tu devrais te pencher peut-être un petit peu sur le C/C++ au préalable, pour comprendre ce que t'écris comme code, car ca ne fonctionne pas à base de simples "copier-coller" de bouts de code qui t'intéressent, il faut tout de même que tu saches ce que ca veut dire...
bon je vais me la refaire car c'est du n'importe quoi
pourquoi un { avant ton for?
pourquoi un == après compteur au lieu d'un =
{for(compteur==0; compteur<=1050; compteur++ )
if compteur == 0 ===> ok
for compteur = 0 ===> ok
for compteur == 0 ===> NON
d'accord mais je le met ou mon delay ?
tu en as déjà un delay
5000/1050=4.75 donc tu peux mettre delay(5)
si tu cmpte bien faire un test sur 5s
infobarquee:
bon je vais me la refaire car c'est du n'importe quoi
pourquoi un { avant ton for?
pourquoi un == après compteur au lieu d'un =
{for(compteur==0; compteur<=1050; compteur++ )
if compteur == 0 ===> ok
for compteur = 0 ===> ok
for compteur == 0 ===> NON
tu en as déjà un delay
5000/1050=4.75 donc tu peux mettre delay(5)
si tu cmpte bien faire un test sur 5s
un == au lieux de = car sinon sur mon afficheur 7 segment sas affiche 0 alors que == sa fais passer de 0 a 1050
et mon code a changer oui je m'etais tromper avec le { avant le for.
zorro mon code je le fait seul et j'apprend en me trompent et par la suite en demandant de l'aide si je ne trouve pas la solution le code j'ai vue les base et avant d'utiliser le break j'ai regarder des exemple, donc au lieux de me dire va apprendre le C/C++ explique moi ou es mon erreur car je n’apprend pas en lisant un texte bêtement..
on a des méthode différente pour apprendre moi j'apprend comme ça.
InfinityScal:
on a des méthode différente pour apprendre moi j'apprend comme ça.
ta méthode est dite "empirique", elle fonctionne mais ca te prendra 10x plus de temps que de lire une seule fois un simple tuto à ce propos : celui-ci par exemple, est très bien, ne serait-ce que le premier chapitre, ca ne prend qu'une petite heure à peu près et après tu te poseras beaucoup moins de questions sur ton code...
Sinon, infobarquee a déjà répondu à ta question en te disant une des multiples choses qui ne vont pas dans ton code. Ce n'est pas en codant un truc faux qui fait que ca "tombe en marche" (partiellement) que tu vas pouvoir avancer non plus...
un == au lieux de = car sinon sur mon afficheur 7 segment sas affiche 0 alors que == sa fais passer de 0 a 1050
c'est que tu as un soucis quelque part
avec ce code, j'ai bien une incrémentation de 1 sur la console
int compteur;
void setup() {
Serial.begin(9600);
}
void loop() {
for (compteur = 0; compteur <= 1050; compteur++ ) {
delay(500);
Serial.println(compteur);
}
}
résultat
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Ces vraie que ces bizarre je le repancherais sur ça demain.
Je vaisblire ton lien ce soir zorro mais pourrais tu me dire ou je dois mettre le break pour que je n'ai pas l'erreur.