Go Down

Topic: Premier programme et remise en question ... (Read 1 time) previous topic - next topic

Zlika

#30
Oct 10, 2018, 11:16 pm Last Edit: Oct 10, 2018, 11:22 pm by Zlika
Et rien n'empêche de parler d'éventuels développements du projet en même temps. C'est bien de rêver un peu  :D. Ça donne de la motivation... Après ça va prendre un peu de temps, chaque personne a son propre rythme. En passant, je précise juste que l'esp8266 intègre le WiFi, est plus petit (donc plus facile à caser dans la bombe), pas très cher sur les sites chinois, plus rapide et surtout plus de flash et de ram. Il peut faire serveur Web (donc accès depuis un smartphone) et on pourrait même imaginer la sauvegarde des parties joués.mise à jour On The Air donc par le WiFi ce qui est bien pratique. Je vends bien le rêve non ?  ;D

Oups... Pas vu la demande pour les temporisations. Je te donnerai un exemple demain. Maintenant c'est dodo ;D

Limp47

ouai mais bon ... tu parles a un mec qui vient d'apprendre a faire clignoter une p*** de Led ! mdr

je prends mon mal en patience ... là c'est la partie bourrage de crane, l'amusement sera après l'apprentissage :)

bricofoy

là je vois que tu utilise "periodic(500)" , une fois écris c'est très simple pour un débutant comme moi mais idem , où trouver les infos de ce que l'ont peut faire exactement YASM ou autre ?
au hasard, dans la doc de la librairie ? :)
ou avec les exemples fournis ;)

Quote
une fois que j'aurais mes réponses , ce sera plus simple pour moi d'écrire mon code sans me couper toutes les 10 min pour aller chercher des infos sur le comment du pourquoi ...
Mais c'est justement là où je te dis qu'il faut poster ton code actuel ! Tu as commencé à écrire un truc qui fonctionne presque, il ne doit donc pas manquer grand chose pour le rendre OK.
Tu demandes des conseils, c'est très bien, mais la meilleure façon de comprendre le comment du pourquoi ça ne fonctionne pas ou mal, et améliorer les choses, c'est de partir de ton code (et donc pour ça il faut le voir...) et de le corriger, ou au moins de t'indiquer la façon de le faire.
Il n'y a pas de honte à poster un truc "pas beau" tout le monde a été débutant un jour ;)

Parce que là finalement,on en est réduit à faire des suppositions, et à t'indiquer des trucs qui n'ont finalement peut-être rien à voir avec la choucroute... la fonction d'affichage que je t'ai proposée par exemple... sans voir le reste, RIEN ne garanti que ça puisse fonctionner.
-tu savais que si tu passe le CD de windows à l'envers, tu entends une chanson satanique ?
-non, mais il y a pire : à l'endroit, ça l'installe !

J-M-L

Dans ton cas, tu détectes la présence du chiffre des dizaines en testant si le nombre est supérieur à 9.
En ajoutant 100, on sait qu'il existe et qu'il est composé de 3 chiffres. Seules les unités et dizaines nous intéresse.
Il suffit donc de transformer ce nombre en chaîne de caractères et de ne garder que les deux derniers caractères (2 derniers chiffres) .
String. Substring(1) ne prend que le restant de la chaîne à partir du deuxième caractère (0 étant le premier).
C'est plus simple car tu ne fait pas de test et que 4 lignes de code suffisent pour formater ton chronomètre.
Après, ton code fonctionne aussi, donc c'est juste un choix purement esthétique.
Mais c'est un vraiment très très mauvais choix technique...absolument pas performant

D'un point de vue esthétique une petite fonction affiche2digits(nombre) qui fait le if < 9 fera le boulot
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

Zlika

#34
Oct 11, 2018, 09:26 am Last Edit: Oct 11, 2018, 09:35 am by Zlika
Certes, je conçois qui si on utilise un Ardiuno UNO ou équivalent, c'est franchement pas la meilleur des solutions en terme d'utilisation mémoire et cycles d'horloge pour l'exécution. Après, je voulais juste proposer une approche différente de travailler sans forcement passer par des conditions.
Le code idéal est celui qui fait le travail en un minimum de temps et de resources, et le mien ne l'est pas.

J-M-L

#35
Oct 11, 2018, 10:03 pm Last Edit: Oct 11, 2018, 10:03 pm by J-M-L
Oui l'idée peut paraître un peu séduisante mais ne tient pas...

Un test sur des nombres - surtout s'ils tiennent sur un octet c'est rien du tout en coût - rien que l'usage de classe string va rajouter plus de 1,5k au code et l'allocation mémoire dynamique est hyper coûteuse...

Quelle que soit la plateforme c'est une approche à éviter.. quand on peut faire simple, on fait simple :)
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

Limp47

hello , pourquoi quand je fais cela dans mon prog ça ne fonctionne pas ? alors que dans l'exemple de la librairie keypad ça marche très bien ...


Code: [Select]


char key = keypad.getKey();

void loop() {
 
  ecran.run();

  if (key == '#') {
ecran.next(ecran_game);
   
  }
}



Zlika

Bonjour,

Tu utilises la fonction getKey() non bloquante de la librairie keypad. Cette fonction n'attend pas que tu presses une touche pour retourner sa valeur. Il faut donc l'insérer dans la boucle loop() pour que chaque passage scrute le clavier. Dans le cas d'une touche pressée sur le clavier, ta variable key contiendra la valeur de la touche pressée. Dans le cas contraire, key prendra la valeur NO_KEY qui est une constant propre à la librairie. La librairie possède une fonction bloquante waitForKey() qui, elle, attendra que tu presses une touche. Mais une fonction bloquante, tout comme delay() bloque l'exécution du programme, donc empêche par exemple le rafraîchissement d'un écran, le clignotement d'une led, la lecture d'une broche ou la réception de données tant que la fonction n'est pas terminée. Ces instructions sont à éviter si tu veux un programme fluide.

Limp47

j'ai saisie que je ne bloquais pas avec mon if mais je ne savais pas comment faire ... merci ! je vais le placer ds le setup du coup

Zlika

Pourquoi le placer dans le setup ? Cette procédure est généralement utilisé pour configurer et initialiser. Tu vas par exemple, initialiser ton clavier, ton port série.. . La saisi des touches du clavier fait partie intégrante de l'exploitation de ton objet. Tu auras sûrement besoin de lire d'autres touches. Donc cette partie va dans la procédure loop(). C'est le seul moyen de pouvoir continuer à utiliser ton clavier.

Limp47

je veux juste bloquer le prog en attendant une touche , histoire que le compte à rebours ne s'allume pas tout seul dès la mise sous tension ....

Zlika

Un compte à rebours ne se lance pas tout seul, il se lance parce que tu lui as dit de se lancer. Montre lui qui c'est qui commande  :smiley-mad: Donc lance le lorsque tu auras reçu ta séquence de touche. Pour ne pas qu'il se lance au démarrage, tu dois le paramétrer correctement dans ta fonction setup()

Tu scannes ton clavier dans ta loop(), et si la touche correspond, tu lances ton compte à rebours (ou tu modifies une variable globale qui va lancer ton compte à rebours dans une autre procédure de ta loop())

Go Up