samedi 7 décembre 2013

Changement d'heure depuis le PC

Pour l'étape suivante du dialogue PC/Arduino, j'ai utilisé le module d'horloge DS1302. L'idée était d'effectuer une lecture et écriture de la date du module à partir d'une application .NET.



Hardware 

Pour les branchements, j'ai simplement relié le DS1302 à l'Arduino comme ceci :
  • Arduino : RTC Board
  • 5V : 5V
  • GND : GND
  • 2 : RST
  • 3 : I/O
  • 4 : CLK

Voir mon article sur le module RTC.
La partie logicielle est plus intéressante. L'Arduino va jouer le rôle de serveur avec une API et le PC va y faire appel suivant les mots clés prédéfinis.


Arduino Software

Du côté Arduino, j'ai créé une classe PowerCommand pour simplifier l'appel à certaines fonctions suivant la ligne de commande en entrée.
A l'utilisation, il suffit d'enregistrer la commande avec la fonction associée, les arguments lui seront passés en paramètres.

PowerCommand pc;

void allumeLed(char *args) {
   digitalWrite(led, HIGH);
}

pc.add("ALLUMER",allumeLed);


Ensuite, la fonction listen écoutera sur le port série pour lancer la fonction appropriée si la commande correspond à celle enregistrée.
Pour construire cette librairie j'ai utilisé des notions de pointeurs de fonctions et aussi de template pour mutualiser la réallocation de tableaux d'objets.


PC Software

Côté PC, j'ai programmé l'interface en utilisant .NET et SharpDevelop. Elle est sous forme d'une TrayIcon dont les menus ouvrent des fenêtres pour le choix du port et la mise à l'heure.



La lecture de l'heure a lieu lors de l'ouverture de la fenêtre de changement d'heure et l'écriture lors de la validation sur cette même fenêtre.

Création de la commande setTime :
DateTime t = dateTimePicker.Value;
string sTime = String.Format("setTime {0} {1}/{2}/{3} {4}:{5}:{6}",(((int)t.DayOfWeek)+6)%7,t.Day,t.Month,t.Year,t.Hour,t.Minute,t.Second);


Réception de l'argument setTime :
sscanf(args,"%d %d/%d/%d %d:%d:%d",&jourSemaine,&jour,&mois,&annee,&heure,&minute,&seconde);


Les sources sont disponibles sur github : https://github.com/Sebarduino/ThermoXBee


Aucun commentaire:

Enregistrer un commentaire