Pages

Affichage des articles dont le libellé est chaine. Afficher tous les articles
Affichage des articles dont le libellé est chaine. Afficher tous les articles

vendredi 30 mars 2018

Créer un bouton et allumer une DEL avec un écran Nextion

Ce troisième article va monter comment on peut envoyer une commande vers une Arduino (ou autre) et lancer une action. Ici, on allumera (et éteindra) une DEL avec un bouton.


1) Placer le bouton :


Ci-dessous, les principales propriétés du bouton (les autres seront vues dans un autre article) :



On peut maintenant le déplacer et changer le texte :

Sur cet écran, on voit bien les identifiants de chaque composant (en jaune et noir)


A présent, on va choisir l'événement et on demande à voir l'identifiant de l'événement (et sa cause) :



Pourquoi faire cela ?

On va détecter le relâchement du  bouton et le Nextion va envoyer sur le port série une chaine de caractère. Cela se voit en faisant une simulation dans l'écran de debug :


Cliquer sur le bouton et observer les codes qui apparaissent dans la zone "Simulation return" :

Chaque ligne correspond à un relâchement du bouton.

Comment lire la ligne ? Une image vaut mieux qu'un long discourt :


Il faut donc maintenant prévoir un programme qui va être capable de lire cette chaîne, de la décoder et de l'interpréter....

Le voici :



Téléverser le programme sur la carte, et magie, la DEL s'allume et s'éteint avec un seul bouton !






lundi 12 mars 2018

Lire une vitesse à partir d'un GPS avec une carte Arduino

Cet article va expliquer brièvement comment on peut décoder une trame GPS pour en extraire une information. Dans notre cas, nous irons lire la trame VTG qui fournit la vitesse en Mph et Km/h.


Montage utilisé :



Il s'agit d'une UNO, un GPS de type NEO6M et d'un afficheur Adafruit ou Elecfreak alphanumérique.


La trame qui nous intéresse ressemble à ceci : $GPVTG,053.7,T,024.5M,005.5,N,012.4,K*48

La vitesse est l'avant dernier champ : 012.4 dans cet exemple. Il va donc falloir aller le lire.

La première difficulté, est de vérifier si on a bien la bonne trame. En effet, un GPS reçoit en permanence plusieurs trames à la suite, toujours dans le même ordre. Il faut faire le tri.....
Ensuite, si on a la bonne trame, on va compter les champs. 

🔔note aux plus pointilleux : dans cet article, je compte les index avec des variables différentes. Je sais, j'aurais pu aussi utiliser un tableau. Je ne l'ai pas fait pour ne pas embrouiller les lecteurs qui n'ont pas tous le même niveau.


Les captures ont été faites à partir de Visual Studio 2017 et du module Visual Micro

Partie initialisation du programme :



Partie initialisation du programme :


Partie réception du programme :


Partie décodage (traitement) du programme :


Note : tous les traits et autres signes pour la console série ne sont pas nécessaires, c'est juste pour débugger plus facilement...

Partie restitution du programme :


En fonction :

Photo prise en tant que passager🚗🚦


Et tout ça sans bibliothèque de traitement de GPS...... !


Des questions ? Un petit mail......

samedi 10 mars 2018

Utiliser un HC-12 émetteur et plusieurs récepteurs simplement (très)

Il est possible de réaliser simplement un petit "réseau" sans fil permettant de commander des objets à distance avec un émetteur, plusieurs récepteur, sur le même canal.

Mise en place de test :

l'émetteur est composé un convertisseur UART-HC-12 connecté à un PC :




Les récepteurs sont composés soit de NANO, soit de UNO, soit n'importe qu'elle carte Arduino, un HC-12, une DEL bicolore (ici, à anode commune) et deux résistors de 330 𝛀 :

✅Montage à reproduire au-moins deux fois....


⚡Attention : pendant les téléversements, bien déconnecter la broche Rx de l'Arduino (connectée au TX du HC-12)



Téléverser le programme suivant dans la carte 🔗:

A la ligne 23, il faut changer '1' pour '2' ou autre en fonction de la carte



Une fois les programmes sur les cartes, on peut les connecter à un power bank ou une autre source d'alimentation. On branche l'émetteur sur un port USB et on lance un terminal série.
Dans mon cas, pour ce test, j'ai utilisé CoolTerm.


Écran principal de CoolTerm :
Cliquer sur Options et sélectionner le bon port :
Dans Transmit, cocher "Terminate Send String Data" :

CoolTerm en fonctionnement :

Cliquer sur Connect
Puis dans "Connection" choisir "Send String"





Le premier chiffre indique le numéro de la carte
Le deuxième, l'état de la DEL verte
Le troisième, l'état de la DEL rouge

1,1,0 = Carte 1, DEL verte allumée, DEL rouge Éteinte


Des questions ? un petit mail et ça ira.....📧



lundi 4 décembre 2017

Exploiter une chaîne de caractères en Arduino-Partie 1

Utilisation d'un tableau de caractères

De très nombreux périphériques communiquent avec les microcontrôleurs via le port RS232-UART. C'est très facile de lire une seule valeur comme "A" pour "allume" ou "S" pour "stop".
Mais qu'en est-il des envois de données complexes ? C'est-à-dire, des chaînes de caractères.....


Il existe plusieurs méthodes, plus ou moins simples et plus ou moins efficaces ou pratiques.

La plus simple est de récupérer les données entrantes dans le port série dans un tableau déclaré comme cela :

 ici, le tableau est constitué de caractères inconnus et sa taille est indéfinie. Pas évident à gérer, le compilateur ne connaît pas la taille mémoire à allouer et donc on risque d’avoir des surprises lors de la compilation (et à l'usage) si le programme total est très lourd.....

On peut aussi déclarer ainsi :

Maintenant, on a limité l'occupation mémoire à 12 emplacements (+1 avec le caractère "null").
Cette méthode fonctionne très bien quand on connaît précisément la taille et l'emplacement des valeurs que l'on veut récupérer. Il faut que tout soit figé à l'avance.
Par exemple, on reçoit cette chaîne :
"AAAASSSAAAAS"
ou bien :
   "SSSAAASSSSSS"


Dans ces deux cas, il est facile de trouver l'emplacement d'un caractère et de le traiter :


Il suffit dans ce cas de donner l'emplacement du caractère et on teste, on traite, on transforme...... Ici, c'est le quatrième emplacement.

Exploiter une chaîne de caractères en Arduino-Partie 2

Utilisation de la bibliothèque String

On va ici utiliser les fonctions de String, c'est sans doute un peu plus compliqué, et encore.... mais nettement plus souple et efficace :


En détail :

reception est une chaîne fictive, ici, je ne présente pas la partie réception. Je considère que la chaîne est bien reçue.

***


***


***

Sur le port série :
La chaîne réception est bien divisée en sous-chaînes....

L'avantage de cette technique est simple à comprendre : on peut manipuler des chaînes ayant des champs de taille variable comme des noms de famille, des valeurs analogiques sur 10 bits (de 0 à 1023)..... cela ne pose aucun problème, à chaque fois que la chaîne de réception sera analysée, les nouveaux index de virgules seront mis à jour.

En changeant la chaîne dans le programme : 
String reception = "Start,123,bonjour,AZERTY";