CO2 Laser eau Flow Monitor - Arduino alimenté / Windows contrôlée (6 / 7 étapes)

Étape 6: Le logiciel de Windows...

Le logiciel de Windows a été écrit à l’aide de Microsoft Visual Studio 2015 mise à jour 1. C’est une application axée sur la boîte de dialogue MFC C++ native créée à l’aide de l’Assistant de boîte de dialogue MFC. L’interface - utilisateur de la boîte de dialogue a été créé à l’aide de l’éditeur de ressources. Le corps du code est généré par l’Assistant. Je soulignerai uniquement les éléments qui démontrent la communication avec l’Arduino. Le reste du code est disponible dans github ici :

https://github.com/alsliahona/CO2LaserWaterFlowMonitor/

Trouver l’Arduino port série « COM »

Maintenant que nous avons largement progressé au-delà des jours de MODEMs, il n’est pas fréquent d’avoir plusieurs ports COM en cours d’utilisation sur PC Windows. Il est toutefois possible que vous ayez des périphériques USB comme votre Arduino qui utilisent un COM port comme une interface série. Nous pouvons énumérer tous les ports COM disponibles sur le PC facilement à l’aide d’une boucle qui appelle QueryDosDevice. Une fois que nous avons une liste de ports COM nous pouvons présenter la liste de l’utilisateur ce qui leur permet de sélectionner celui qui est leur contrôleur de flux de l’eau. S’il y a qu’un seul élément dans la liste nous pouvons l’ouvrir automatiquement. Pour commencer puis, nous ajoutons un conteneur à la classe CCO2WaterFlowDlg. C’est sur la ligne 50 du CO2WaterFlowDlg.h, comme un std::map de deux chaînes. La première chaîne (la clé) est le port COM que nous afficher et ouvrir. L’autre chaîne est le nom du périphérique DOS, dont nous gardons surtout pour le diagnostic.

La méthode déclarée ligne 54 est utilisée pour remplir le conteneur. Il est implémenté dans CO2WaterFlowDlg.cpp, lignes 70-78 :

BuildCOMPortMap() est appelée lorsque l’application démarre et s’est construite une instance de CCO2WaterFlowDlg, comme vous pouvez le voir sur la ligne 94 ci-dessus. À ce stade, tout dispositif de COM présents sur le système sera dans notre conteneur.

Lorsque la boîte de dialogue initialise d’abord elle vérifie dans OnInitDialog() pour voir si il y a des ports COM disponibles. Si ce n’est pas le cas, une invite s’affiche à l’utilisateur, leur demandant de plug-in, le contrôleur de vitesse de flux. Ce message se répéter jusqu'à ce que l’utilisateur clique sur Annuler, ou un dispositif de COM est présent. Voir la boucle sur les lignes 146-155 ci-dessous :

La liste des périphériques disponibles s’affichera dans la liste déroulante (ComboBox). Pour cela, lorsque RefreshCOMList() est appelé sur la ligne 161 ci-dessus. Le code pour cela est assez standard MFC pour peupler un ComboBox. Il est indiqué ci-dessous :

Lignes 296 301 claires entrées dans la zone de liste déroulante, tout en lignes 304 par l’intermédiaire de 309 ajoutent chaque élément du conteneur à la zone de liste déroulante. Un autre récipient, m_COMSelectionMap est maintenu qui associe le port COM de l’identificateur d’entrée de zone de liste déroulante. Lorsque l’utilisateur clique sur Ouvrir, cela servira à extraire le nom du port COM pour ouvrir.

À la ligne 310, le dernier élément ajouté à la zone de liste modifiable est sélectionné.

Si seulement un point figure dans la liste (ligne 312), cet élément est automatiquement ouvert en simulant un utilisateur clic sur le bouton Ouvrir (ligne 316).

Ouverture du port COM

Lorsque l’utilisateur clique sur le bouton Ouvrir, ou lorsque OnBnClickedButtonOpen() est appelé par RefreshCOMList() l’élément actuellement sélectionné de la zone de liste déroulante est utilisée pour obtenir le nom du port COM (lignes 221 et 222 ci-dessous) :

Sur la ligne 223 à la tentative faite pour ouvrir le port série. En cas d’échec l’utilisateur vous demandera et seront autorisés à sélectionner un nouvel élément. Si toutefois nous réussir à ouvrir le port COM, lignes 230-232 permet de désactiver les boutons Open et Scan Ports et active le bouton définir le seuil. Une fois que le port COM a été ouvert, une minuterie est réglée au feu toutes les 1/8 de seconde. Le gestionnaire de minuterie utilise m_SerialPort pour lire la dernière mise à jour (si disponible) de l’eau Flow Monitor et il met à jour l’état affiché dans la boîte de dialogue.

Les ScanPorts bouton ne fait rien plus que rappellent systématiquement BuildCOMPortMap() et RefreshCOMList().

La classe ArduinoSerial

La classe de ArduinoSerial s’occupe de tout associé d’ouverture, de clôture, lecture et écriture à l’Arduino via le port série. Il est spécialement conçu pour l’eau Flow Monitor, mais peut être facilement adapté pour les besoins de remplacement. Il est défini dans ArdSerial.h comme suit :

Notez que la classe est automatique lors de l’initialisation car nous ne voulons pas essayer d’ouvrir le port COM jusqu'à ce que nous savons ce qu’il faut sélectionner. Lorsque Close() est appelée le port COM sera fermé que m_hSerial est passé à CloseHandle() et m_bConnected sera mis en revenir à false. Parce qu’il s’agit d’une classe RAII, il sera automatiquement nettoyer (par exemple fermer le handle) quand c' est le destructeur est appelé--pour cela appeler Close().

Nous avons vu précédemment où la méthode Open() est invoquée dans OnBnClickedButtonOpen() de CCO2WaterFlowDlg.cpp [ligne 223 du CO2WaterFlowDlg.cpp]. Vous remarquerez que m_SerialPort est une instance de ArduinoSerial comme l’a annoncé sur la ligne 52 de CO2WaterFlowDlg.h :

CreateFile et réglage des paramètres COM

Ouverture de l’appareil, lorsque nous connaîtrons le port COM, il suffit d’appeler CreateFile suivie d’appels à GetCOMState et SetCOMState qui définissent le débit en bauds et autres paramètres de série. Lignes 26 à 50 ci-dessous montrent l’appel CreateFile et l’invite de l’utilisateur en cas d’échec :

Avec le port ouvert nous obtenir l’état de COM et réglez-le pour utiliser une vitesse de 9600 bauds (n’hésitez pas à changer cela, si vous aimez, mais correspond à la modification dans votre sketch Arduino!) Tout le programme d’installation restant du port COM est illustré ci-dessous. Bien qu’il ressemble à beaucoup de code, il n’est pas grand chose à expliquer :

Notez l’appel à PurgeComm sur ligne 87 et le sommeil en ligne 89. Chaque fois que vous branchez sur le port série de l’Arduino l’appareil se réinitialise.

Lecture et l’écriture vers/depuis l’Arduino

Parce que nous avons délibérément gardé la communication avec l’Arduino très simple, le ArduinoSerial lu et méthodes d’écriture sont limitées à la lecture complète, null résilié la ligne de texte et d’écrire un octet unique. Vous avez peut-être remarqué la déclaration de notre tampon de lecture sur la ligne 45 de ArdSerial.h ainsi que la fonction de membre privé que readavailable() déclarée à la ligne 47. ReadAvailable est utilisée pour ajouter de nouvelles données du port série dans notre mémoire tampon. Il ressemble à ceci :

(Notez le commentaire sur la ligne 124 est un report de l’exemple de l’Arduino Serial ici :

http://playground.arduino.cc/Interfacing/CPPWindows). Ligne 122 un tampon temporaire est alloué à la taille de quels matches les octets accessibles en lecture indiquée par l’appel à ClearCommError à la ligne 114. À la ligne 126 ces octets sont lus dans notre tampon temporaire (vArray). Et sur les lignes 131 à 134, ces octets sont ajoutées au m_vBuffer.

ReadAvailable() est appelée chaque fois qu’on l’appelle ReadNullZString(), et ReadNullZString transfère simplement la première chaîne terminée par null dans la mémoire tampon à la sortie strRead :

L’écriture à l’Arduino est très simple--et c’est en grande partie parce que nous devons ne jamais envoyer un octet unique, utilisé pour mettre à jour la valeur de seuil :

L’attachant à l’Interface utilisateur

La minuterie qui a été mentionnée précédemment, qui déclenche toutes les 1/8 de seconde appellera m_Serial.ReadNullZString(). Lorsqu’une chaîne est disponible il sera ensuite analyser la chaîne et mettre à jour l’Interface utilisateur. Ceci est illustré dans la partie ci-dessous. (Parcourir le code github pour voir le reste du code)

Une chose importante à noter... Le « débit » affiché est basé sur les spécifications pour le capteur de vitesse de débit. Si vous utilisez un capteur de vitesse de flux différents, ajuster les maths en démarrant à la ligne 275 selon les spécifications de la sonde.

Fixer le seuil

La dernière chose à couvrir est comment nous envoyer le nouveau seuil à l’Arduino. Vous avez probablement déjà deviné basé sur le code ci-dessus, que nous appelons simplement m_SerialPort.WriteByte() avec le nouveau seuil. Vous serait correct. Le code est très simple, comme vous pouvez le voir ci-dessous :

En ligne 329, la valeur de seuil est lire à partir de l’interface utilisateur et convertie en un octet à la ligne 330 et envoyée à l’Arduino à la ligne 331. Vous vous souviendrez de l’esquisse de l’Arduino que ceci interrompt la boucle principale, régler le seuil d’alarme et puis redémarrez la boucle principale.

Articles Liés

Vélo - arduino alimenté système de purification de l’eau (à l’aide de lumière UVC)

Vélo - arduino alimenté système de purification de l’eau (à l’aide de lumière UVC)

Cette instructable montre comment alimenter un système de purification de l'eau UV-C avec un contrôle de la bicyclette et arduino. Une dynamo à l'arrière de la bicyclette charge une batterie (que nous avons initialement chargé déjà pour ce projet) qu
Comment convertir le 220V en 110V sur une chinoise CO2 Laser Power Supply

Comment convertir le 220V en 110V sur une chinoise CO2 Laser Power Supply

Cette instructable propose une approche étape par étape pour changer une alimentation de laser CO2 chinois d'une tension d'entrée AC 220V à 110V AC. J'ai effectuer cette opération régulièrement comme mon changement de clients, leurs besoins, ou bien
Comment tester et régler un chinois (Chine) a fait CO2 Laser Power Supply pour obtenir la longue durée de vie de votre Tube de Laser CO2 pour votre gravure Laser et système de Machine de découpe Laser

Comment tester et régler un chinois (Chine) a fait CO2 Laser Power Supply pour obtenir la longue durée de vie de votre Tube de Laser CO2 pour votre gravure Laser et système de Machine de découpe Laser

être sûr lors de l'exécution de ce projet.LA SÉCURITÉ EST PLUS IMPORTANTE.  SI VOUS AVEZ TORT ALORS VOUS POUVEZ ÊTRE ÉLECTROCUTÉ.  LA COMBINAISON DE HAUTE TENSION ET LA PUISSANCE PEUT ÊTRE MORTELLE.  SUIVEZ LES INSTRUCTIONS CI-DESSOUS. NE S'ÉCARTENT
Arduino alimenté citrouille d’Halloween avec détection de mouvement

Arduino alimenté citrouille d’Halloween avec détection de mouvement

SalutCet Instructable va vous montrer comment faire certains Halloween décorations dont arduino alimenté citrouille d'Halloween avec détection de mouvement.Étape 1: Faire la citrouille d'Halloween Matériaux :Ballon rondVieux journauxFarine lisseEauTe
Show Laser Arduino avec un contrôle complet XY

Show Laser Arduino avec un contrôle complet XY

mise à jour ! Voir étape 32 pour savoir comment utiliser ce projet avec un laser vert! Aussi - commander l' Instructable LaserTweet pour rendre ces données d'affichage projet de Twitter :Ce projet utilise un Arduino et certains haut-parleurs bon marc
Comment utiliser une sonde 500 watt CO2 laser puissance compteur

Comment utiliser une sonde 500 watt CO2 laser puissance compteur

cette vidéo montre comment utiliser la sonde de puissance de laser de Mahoney CO2.  La sonde de puissance de laser de CO2 est un dispositif couramment utilisé et nécessaire pour :1. mesure laser puissance de sortie pour les paramètres laser au fil du
Nocturnal Emissions : Mon Arduino alimenté par Internet activé rêve générateur

Nocturnal Emissions : Mon Arduino alimenté par Internet activé rêve générateur

nous avons tous besoin de rêver plus, j'ai donc créé ce Arduino alimenté « générateur de rêve » pour aider à planter des graines pour certains folie de penser grand.  Quand vous approchez le générateur d'un capteur à ultrasons Maxbotix déclenche lumi
Arduino alimenté Gainclone (amplificateur)

Arduino alimenté Gainclone (amplificateur)

pour ceux d'entre vous qui ne connaissent pas (et je n'ai pas jusqu'à une date récente), un Gainclone est un ampli qui est un « clone » de la conception originale d'un ampli fabriqué par 47 Labs appelés un Gaincard et reposent sur des amplificateurs
Comment construire un Robot jouant Arduino alimenté par Chess

Comment construire un Robot jouant Arduino alimenté par Chess

à en juger par le nombre d'échecs liés Instructables, je pense qu'il est sûr de dire que la communauté bénéficie du jeu.  Il peut être difficile, toutefois, de trouver quelqu'un qui joue au même niveau que vous faire.  Pour résoudre ce dilemme et d'a
Arduino alimenté Infared chose

Arduino alimenté Infared chose

Bonjour, ceci est mon premier instructible. Je vais vous montrer comment faire un arduino alimenté par un capteur analogique lecteur (je vais utiliser une photodiode infrarouge).Étape 1: pièces Vous aurez besoin de plusieurs choses à faire ceci :1. u
Faire un Arduino alimenté automatisation de Rideau

Faire un Arduino alimenté automatisation de Rideau

Dans cette vidéo j'ai commencer à travailler sur vous montrant comment faire un dispositif Arduino alimenté par qui va ouvrir et fermer les rideaux !À l'aide d'une corde et un servo de rotation continue, je suis capable de créer un système de poulies
Comment faire pour télécharger le logiciel Arduino pour Windows / Linux / MacOS

Comment faire pour télécharger le logiciel Arduino pour Windows / Linux / MacOS

Cette instructable vous permet de télécharger le logiciel Arduino (IDE Arduino) pour Windows, Linux, Mac OS.Suivant les étapes vous aide en téléchargeant le logiciel ArduinoEtape 1: Type Arduino dans GoogleEtape 2: Sélectionnez l'onglet Téléchargemen
Lumières de Noël Musical Arduino alimenté

Lumières de Noël Musical Arduino alimenté

après explorant le site Instructables, j'ai trouvé quelques projets qui ont atteint un sommet de mon intérêt et ceux qui m'amènent à la réflexion, j'ai pu faire quelques lumières de Noël musicales. Plupart de ce que j'ai passé mon temps sur provenait
Arduino alimenté les doublures de gants chauffants

Arduino alimenté les doublures de gants chauffants

Arduino alimenté gants chauffantsCe projet est sur la façon de rendre les monde plus intelligent chauffé gant des doublures de conditions extrêmement froides comme celles de Minnesota ou personnes qui ont syndrome(like me) de Raynaud. Ces gants vous