Partage
  • Partager sur Facebook
  • Partager sur Twitter

Arduino Projet Débutant

Sujet résolu
3 février 2015 à 8:01:33

C'est, c'est bien <= 9.

Et oui, il faut prendre en compte 0 (pourquoi cette touche de devrait-elle pas être prise en compte ? n'aurais tu pas le droit de paramétrer le RTC à 00h000:00 ?)

  • Partager sur Facebook
  • Partager sur Twitter
3 février 2015 à 10:29:39

Ok donc j'avais bien lu pour le 9 mais mal lu pour le 0 X(.

Cette après-midi je test tout sa car j'aurai un arduine et tout le reste de 14h à 18h

  • Partager sur Facebook
  • Partager sur Twitter
3 février 2015 à 18:36:50

Alors bilan de la journée,  - le code de l'horloge à partir du 1 janvier 2015 marche !

                                         - le code du clavier avec des modifications au niveau des ports marche !

                                         - reste à finir la partie réglage de l'heure car j'ai rencontré des problèmes :(

Voici le code du réglage (non fini)

CODE SUPPRIME POUR EVITER LES COPIES CAR PROJET BAC

Mon problème est que la commande char waitForKey() ne marche pas car normalement il bloque le programme tant qu'il n'y ai pas de touche appuyé or voici le résultat :


Ensuite vu que je n'ai pas compris ton code pour le réglage j'ai pas essayé de le développer plus ou de la comprendre via internet car le réseau internet ne marchai pas. Et le compilateur affiche un message d'erreur sur le '0 si je m'en souvient bien.

-
Edité par Frage 11 février 2015 à 23:25:25

  • Partager sur Facebook
  • Partager sur Twitter
3 février 2015 à 19:32:15

Je suis étonné que ton compilateur ne gueule pas.

char waitForKey();
heure1 = key;

Ce n'est claironnement pas comme ça que le tutoriel t'as appris à appeler une fonction et stocker son résultat dans une variable.

D'autant plus que la fonction waitForKey n'existe pas (elle existe sur l'objet keypad mais pas en global).

Ton code devrait plutôt être :

char keyHeure1 = keypad.waitForKey();

Tu as aussi oublié de convertir tes char en int avant de faire ton calcul.

En effet, le caractère '0' et le chiffre 0, ce n'est pas du tout la même chose.

Pour les caractères, il y a la table ASCII qui définie un chiffre à chaque caractère (par exemple, le 'a', c'est le chiffre 97).

Le caractère '0' correspond au chiffre 48.

Du coup, si tu tapes deux fois sur la touche 0, alors heure = heure1 * 10 + heure2 va te donner 48*10+48=528

Regardes bien mon code précédant :

// Convertion du code ascii en int
int code = ( key - '0 );

Cette soustraction est primordiale.

Ton code de conversion devait donc être :

int heure = -1;

if ( keyHeure1 >= '0' && keyHeure1 <= '9' && keyHeure2 >= '0' && keyHeure2 <= '9' ) {
    heure = ( ( (int)(keyHeure1 - '0' ) * 10 + (int)(keyHeure2 - '0' ) );
}

Je me permet de rajouter un petit if pour éviter de faire les calculs si l'utilisateur tape sur étoile ou dieze.




-
Edité par lorrio 3 février 2015 à 19:33:35

  • Partager sur Facebook
  • Partager sur Twitter
3 février 2015 à 19:35:11

CODE SUPPRIME POUR EVITER LES COPIES CAR PROJET BAC

Cette ligne est indiquée comme erreur lors de la compilation.

-
Edité par Frage 11 février 2015 à 23:25:04

  • Partager sur Facebook
  • Partager sur Twitter
3 février 2015 à 19:46:08

Sa voudrai dire que pour le réglage de l'heure sa donnerai ceci

 CODE SUPPRIME POUR EVITER LES COPIES CAR PROJET BAC

-
Edité par Frage 11 février 2015 à 23:24:54

  • Partager sur Facebook
  • Partager sur Twitter
3 février 2015 à 21:05:23

Je ne pense pas que la ligne 1 soit vraiment utile ...

Tu peux aussi revoir un peu tes print histoire de ne pas trop en faire ou en faire des plus explicite.

Serial.println("Veuillez appuyer sur 2 chiffres pour rentrer l'heure");

char keyHeure1 = keypad.waitForKey();
char keyHeure2 = keypad.waitForKey();

if ( keyHeure1 >= '0' && keyHeure1 <= '9' && keyHeure2 >= '0' && keyHeure2 <= '9' ) {
    heure = ( ( (int)(keyHeure1 - '0' ) * 10 + (int)(keyHeure2 - '0' ) );
} else {
    heure = -1;
}

if ( heure >= 0 && heure <= 23 ) {
    Serial.print("Vous avez rentré : ");
    Serial.print(heure);
    Serial.println(":00:00");
} else {
    Serial.println("Nan mais allo quoi, tu sais pas taper une heure valide ?");
}





-
Edité par lorrio 3 février 2015 à 21:06:17

  • Partager sur Facebook
  • Partager sur Twitter
3 février 2015 à 21:37:47

Ok il faudrait que je regarde comment faire défiler ensuite pour transformer tous les Serial.print en lcd.print car j'ai à ma disposition un écran LCD 2 lignes 16 caractères je crois.

Comme sa je comprends bien le code sauf une ligne qui est le else en 9; -1 correspond à rien faire ?

  • Partager sur Facebook
  • Partager sur Twitter
3 février 2015 à 22:41:37

Imagines que tu tapes sur étoile ou sur #, alors tu vas allé dans le else.

Ce else va mettre un -1 dans l'heure, la rendant invalide

Donc le if/else qui suit va afficher Nan mais allo quoi, tu sais pas taper une heure valide ?

Si tu ne mets pas ce -1, je te laisse imaginer ce qu'il pourrait se passer.

-
Edité par lorrio 3 février 2015 à 22:42:28

  • Partager sur Facebook
  • Partager sur Twitter
3 février 2015 à 23:59:40

Alors voici le code remit au propre; si le code est OK je présume que je dois faire la même chose pour les minutes, secondes, jours, année mais pour les mois il va falloir faire autre chose je pense. Une question qui porte sur la ligne 107 je voudrai savoir si la majuscule sur le H de Heure1 et 2 pose un problème car dans la déclaration des variables je n'ai pas mis de majuscule. Aussi je voudrai savoir si ce dossier pourrait être en privé car d'autre personne pouvant avoir le même travail peuvent tout simplement copier coller

CODE SUPPRIME POUR EVITER LES COPIES CAR PROJET BAC

-
Edité par Frage 11 février 2015 à 23:24:44

  • Partager sur Facebook
  • Partager sur Twitter
4 février 2015 à 8:23:15

Comme d'habitude, voici quelques réponses :)


Non, ce dossier ne peut pas être privé : openclassrooms est une communauté basée sur le partage donc tout est publique afin que tout le monde puisse y avoir accès avec un minimum de recherche.

Si tu ne veux pas que d'autres membres puissent voir ton travail, il va falloir te débrouiller seul.


Pour ce qui est de la ligne 107, je pense que tu pose cette question à cause d'une petite lacune sur ce qu'est une variable et leur portée.

Voici un petit commentaire pour cette ligne :

void reglage()
{
    [...]

    // Création d'une variable locale de type char (une valeur sur un octet, de -128 à +127 servant à contenir une lettre)
    // Et affectation de cette variable avec l'attente de la prochaine touche appuyée sur le clavier
    // Note: cette variable étant "locale", elle n'existe que dans la fonction réglage et sera détruite à la fin de cette fonction
    char keyHeure1 = keypad.waitForKey();

La variable keyHeure1 n'a donc rien à voir avec la variable heure1 (ce sont 2 variables différentes).

Du coup, tes variables globales heure1 et heure2 ne servent strictement à rien.

On pourrait même généraliser ce propose pour toutes te variables de la ligne 4 à 12 qui peuvent être supprimées.

En effet, il est préférable d'éviter au maximum les variables globales quand elles peuvent être remplacées par des variables locales.

Si cela t'aide, il est possible de déclarer les variables locales en début de fonction plutôt que de le faire en même temps qu'une affectation.

// Fonction de réglage permettant de régler l'heure
void reglage() {

    // Création des variables locales à la fonction
	//==============================================
	
	// Un char (key) pour retenir une touche du keypad
	char key;
	
	// Deux autres char (keyHeure1 et keyHeure2) pour la même chose
	char keyHeure1;
	char keyHeure2;
	
	// Un int (heure) pour stocker le résultat du calcul de l'heure
	int heure;
	
	// Code source de la fonction
	//==============================================

    key = keypad.getKey();                     // Attribution de la variable key à la touche appuyée
    Serial.println("Veuillez appuyer sur 2 chiffres pour rentrer l'heure"); // Ecrire "Veuillez appuyer sur 2 chiffres pour rentrer l'heure"
    keyHeure1 = keypad.waitForKey();           // Attendre la préssion d'un bouton et l'assigné à la varialbe Heure1
    keyHeure2 = keypad.waitForKey();           // Attendre la préssion d'un bouton et l'assigné à la varialbe Heure2
  
  if ( keyHeure1 >= '0' && keyHeure1 <= '9' && keyHeure2 >= '0' && keyHeure2 <= '9' ) // Vérifier si le bouton préssé n'est pas # ou *
    {
      heure = ( ( (int)(keyHeure1 - '0' ) * 10 + (int)(keyHeure2 - '0' ) ) );         // Traduction des touches en ASCII et les assemblées
    } else                                                                            // Sinon ...
          {
            heure = -1;                                                               // Rien changer à la variable heure
          }
		  
  if ( heure >= 0 && heure <= 23 )                 // Si la valeur rentrée est comprise entre 0 et 23
    {
      Serial.print(heure);                         // Si oui alors afficher la variable heure
      Serial.println(":00:00");                    // Ecrire ":00:00"
    } else                                         // Sinon ...
          {
            Serial.print(heure);                   // Afficher la variable heure
            Serial.println("n'est pas un nombre valide"); // Ecrire "n'est pas un nombre valide"
          }   
		  
   RTC.adjust(DateTime(2010,1,1,heure,0,0)); // Ajustement de l'heure en fonction des varialbes redéfinies   
   
  }  




  • Partager sur Facebook
  • Partager sur Twitter
10 février 2015 à 17:16:48

Désolé de n'avoir rien écrit de plus car j'avais d'autres problèmes à régler. Pour ce code j'ai un problème au niveau du réglage de l'heure etc car lors du réglage de la date par exemple l'heure qui va être afficher va être celle rentrer avant; Exemple si nous avons réglé 12:01:15 , il est 12:01:30 lorsque je règle la date et lorsque que j'ai fini la saisi il va m'afficher la bonne date avec 12:01:15 et non 12:01:30+seconde pour régler la date. Le problème est dans les deux sens, la solution serai au niveau du RTC set time mais je ne trouve pas la solution :s

CODE SUPPRIME POUR EVITER LES COPIES CAR PROJET BAC

-
Edité par Frage 11 février 2015 à 23:24:32

  • Partager sur Facebook
  • Partager sur Twitter
12 février 2015 à 10:23:24

Alors une fois que tu as pompé tout ce dont tu avais besoin tu demandes la suppression du topic pour pas qu'on te pique ton code pour le bac ? Ce n'est pas du tout l'esprit de partage d'une communauté, donc non ce topic ne sera pas supprimé.

-
Edité par SamarHxC 12 février 2015 à 10:24:41

  • Partager sur Facebook
  • Partager sur Twitter
12 février 2015 à 20:03:05

En plus c'est une attitude complètement immature de tout supprimer comme ça, parce que d'abord tu rends le sujet presque obsolète car sans ton code c'est impossible de comprendre ce que "lorrio" t'explique et ensuite tu pense vraiment que les profs qui vont te faire passer a tes PPE savent pas que tout le monde va tout pomper sur internet et qu'on a pas la science infuse donc on peut pas savoir comment fonctionne les choses si on fais pas de recherches et qu'on s'inspire pas d'autres travaux ? Tu crois sincèrement que si moi j'avais fait un simple "copier-coller" (ce qui n'a aucun intérêt) sans essayer de comprendre quoi que se soit, on serrais tombé comme par hasard sur le même prof et qu'il t'aurai pénalisé ?

Je suis désolé mais c'est complètement puéril et pas cool pour les personnes à qui aurai eu besoin de comprendre ce que vous avez dis dans la conversation... Franchement c'est vraiment être égoïste de faire ça.

  • Partager sur Facebook
  • Partager sur Twitter
14 février 2015 à 12:02:35

Là dessus, je suis plutôt dessus.

Et en plus, tu oses me demander une réponse à ta dernière question par MP.

Je pense SamarHxC et melanouille résume très bien la situation : aucun respect de la communauté basé sur le partage => je ferme.

  • Partager sur Facebook
  • Partager sur Twitter