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 :
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 :
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);
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
Les sources sont disponibles sur github : https://github.com/Sebarduino/ThermoXBee
Aucun commentaire:
Enregistrer un commentaire