CO2 Laser vatten flöde Monitor - Arduino Powered / Windows kontrollerade (6 / 7 steg)

Steg 6: Windows-programvaran...



Windows-programvaran är skriven med hjälp av Microsoft Visual Studio 2015 Update 1. Det är en native C++ MFC dialogrutan-baserad applikation skapad med hjälp av MFC dialogrutan guiden. UI - dialogrutan skapades med hjälp av resurs redaktör. Kroppen av koden genereras av guiden. Jag kommer att belysa bara de delar som visar kommunikation med Arduino. Resten av koden finns tillgänglig på github här:

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

Att hitta Arduino följetong "COM" port

Nu när vi har till stor del gått utöver dagarna av modem, är det inte vanligt att ha många COM portarna på Fönstren PC. Det är emellertid möjligt att du kan ha USB-enheter som din Arduino använder en COM port som ett seriellt gränssnitt. Vi kan räkna upp alla tillgängliga COM-portar på datorn enkelt med hjälp av en för-loop som åberopar QueryDosDevice. När vi har en lista över COM-portar kan vi presentera listan till användaren ger dem möjlighet att välja en som är deras vatten flöde monitor. Om det finns endast ett objekt i listan kan vi automatiskt öppna den. Starta sedan, lägger vi en container till klassen CCO2WaterFlowDlg. Detta är på linje 50 av CO2WaterFlowDlg.h, en std::map av två strängar. Den första strängen (nyckeln) är den COM port som vi kommer att visa och öppna. Den andra strängen är den DOS-enhetsnamn som vi håller mest för diagnostik.

Den metod som deklarerats på rad 54 används att fylla behållaren. Den genomförs i CO2WaterFlowDlg.cpp, linjer 70-78:

BuildCOMPortMap() kallas när programmet startas och en instans av CCO2WaterFlowDlg är konstruerade, som ni kan se på rad 94 ovanför. Vid denna punkt, kommer att någon COM enheter på datorn vara i våra behållare.

När dialogrutan initieras först kommer att det kontrollera i OnInitDialog() att se om det finns COM-portar. Om inte, en prompt visas för användaren ber dem till plug-in flödet klassar övervakar. Detta meddelande kommer att upprepa tills användaren klickar på Avbryt eller tills en COM enhet är närvarande. Se slingan på linjer 146-155 nedan:

Listan över tillgängliga enheter visas i den nedrullningsbara listan (ComboBox). Detta görs när RefreshCOMList() anropas på linje 161 ovan. Koden för detta är ganska standard MFC kod för att fylla en ComboBox. Det visas nedan:

296 linjer via 301 klart poster i listrutan, medan linjer 304 genom 309 lägger varje objekt från behållaren till kombinationsrutan. En annan behållare, m_COMSelectionMap bibehålls som associerar kombinationsruta post ID med COM-porten. När användaren klickar på öppna, kommer detta att användas att dra ut namnet på COM-porten att öppna.

På linje 310 markeras det sista objektet läggs till i kombinationsrutan.

Om endast ett objekt finns i listan (linje 312), öppnas automatiskt det objektet genom att simulera en user-Klicka på knappen Öppna (linje 316).

Öppna den COM-porten

När användaren klickar på knappen Öppna eller när OnBnClickedButtonOpen() anropas av RefreshCOMList() används det markerade kombinationsruta objektet att erhålla namnet på COM-porten (linje 221 och 222 nedan):

På rad görs 223 försök att öppna serieporten. Om den inte användaren uppmanas och får välja en ny post. Om vi öppnar emellertid framgångsrikt COM-porten, rader 230-232 inaktiverar knapparna Öppna och skanna portar och kommer att aktivera knappen Ange tröskelvärde. När COM-porten har öppnats, in på en timer är att varje 1/8 av en sekund. Timer hanteraren använder m_SerialPort för att läsa den senaste uppdateringen (om tillgängligt) från vatten flöda Monitor och det uppdateras statusen visas dialogrutan.

ScanPorts knappen gör ingenting mer än att åberopa BuildCOMPortMap() och RefreshCOMList().

Klassen ArduinoSerial

Klassen ArduinoSerial hanterar allt som har med öppning, stängning, läsa och skriva till Arduino genom den seriella porten. Det är speciellt utformad för vatten flöda bildskärmen, men kan lätt anpassas för alternativa behov. Det definieras i ArdSerial.h enligt följande:

Observera att klassen är själv initiera eftersom vi inte vill att försöka öppna COM-porten tills vi vet vad du ska välja. När Close() kallas stängs COM-porten m_hSerial skickas till CloseHandle(), och m_bConnected sätts tillbaka till false. Eftersom detta är en RAII klass, det kommer att automatiskt rensa upp (t.ex. Stäng handtaget) när det är destructor anropas - detta görs genom att anropa Close().

Vi har tidigare sett där metoden Open() åberopas i CCO2WaterFlowDlg.cpp's OnBnClickedButtonOpen() [line 223 av CO2WaterFlowDlg.cpp]. Du kommer att märka att m_SerialPort är en instans av ArduinoSerial som deklarerats på linje 52 i CO2WaterFlowDlg.h:

CreateFile och inställningen COM parametrar

Att öppna enheten, när vi vet att COM-porten är helt enkelt en fråga om ringa CreateFile följt av samtal till GetCOMState och SetCOMState som ange baudfrekvens och andra seriella parametrar. 26 genom 50 rader under Visa uppmaningen att CreateFile och användaren-prompten misslyckande:

Med den öppna porten vi får COM staten och justera den för att använda en 9600 baud rate (gärna ändra detta om du skulle vilja, men matchar förändringen i din Arduino skiss!) Alla återstående inställningarna för COM-porten visas nedan. Om det ser ut som en massa kod, finns det inte mycket att förklara:

Märka anropet till PurgeComm på linje 87 och sömnen på linje 89. Varje gång du ansluter till den seriella porten på Arduino enheten återställs.

Läsa och skriva till/från Arduino

Eftersom vi har målmedvetet höll meddelande till och från Arduino mycket enkel, ArduinoSerial läsa och skriva metoder är begränsade till läsa en fullständig, null avslutad linjen av text och skriva en enda byte. Du kanske har märkt försäkran om vår Läsbuffertens på rad 45 i ArdSerial.h samt den privata medlemsfunktion ReadAvailable() förklarade på linje 47. ReadAvailable används för att lägga till nya data från den seriella porten till vår buffert. Det ser ut så här:

(Observera kommentaren på linje 124 är en överföring från Arduino följetong exempel här:

http://playground.arduino.cc/Interfacing/CPPWindows). På linje 122 allokeras en tillfällig buffert storleken av vilka matcher läsbar byte rapporterade av anrop till ClearCommError på linje 114. På rad 126 läses de byte in i vår tillfälliga buffert (vArray). Och på linjer 131 genom 134 läggs de byte till m_vBuffer.

ReadAvailable() anropas varje gång ReadNullZString() kallas, och ReadNullZString överför bara den första null-terminerade strängen i bufferten till utgång strRead:

Skriva till Arduino är mycket enkel-- och detta är till stor del eftersom vi alltid bara behöver skicka en enda byte, används för att uppdatera tröskelvärdet:

Knyta den tillbaka till användargränssnittet

Timer som nämndes tidigare, som bränder varje 1/8 sekund kommer att kalla m_Serial.ReadNullZString(). När en sträng finns tillgänglig kommer det sedan parsa strängen och uppdatera användargränssnittet. Detta visas i del nedan. (Bläddra github koden för att se resten av koden)

En viktig sak att notera... "Flödet" visas är baserad på specifikationer för flödet klassar sensorn. Om du använder ett annat flöde pulssensorn, justera matten började en rad 275 enligt sensorns specifikationer.

Ställa in tröskelvärdet

Det sista att täcka är hur vi skickar nya tröskeln till Arduino. Du har säkert redan gissat baserat på ovanstående kod, som vi helt enkelt kallar m_SerialPort.WriteByte() med den nya tröskeln. Du skulle vara korrekt. Koden är mycket enkel som ni kan se nedan:

På rad 329, är tröskelvärdet läsa från UI, omvandlas till ett BYTE på linje 330 och skickas till Arduino på rad 331. Ni minns från Arduino skiss att detta kommer att avbryta huvudloop, justera larm tröskeln och starta sedan om huvudloop.

Se Steg
Relaterade Ämnen

CO2 Laser vatten Chiller

CO2 Laser vatten ChillerCO2 Laser rör kyls genom att köra eller pumpa vatten genom röret. Det är nödvändigt att förlänga livslängden på röret som annars skulle överhettas och snabbt förlorar makt och så småningom misslyckas att fungera. Dyra vatten k...

Hur man mäter CO2 laser power på en Laser gravyr maskin och Laser skärmaskin med hjälp av en förenklad (billiga) CO2 laser kraftmätare

mest CO2 lasereffektmätare är mycket dyra och är utrustade med kapacitet långt bortom vad gemensamma laser maskin operatör/ägaren behöver. Dessa instruktioner visar en sub-$100 laser power meter sond på jobbet, med snabb laser power mätningar på mind...

Hur man använder en 200 watts CO2 laser power sond som mäter CO2 laser power

denna video visar hur du använder Mahoney CO2 laser power sonden. CO2 laser power sonden är en vanligt förekommande och nödvändiga enhet till:1. åtgärd laser uteffekt för laser inställningar över tiden. Om du äger en RF (Radio Frequency) powered lase...

Hur man använder en 500 watt CO2 laser power meter sond

denna video visar hur du använder Mahoney CO2 laser power sonden. CO2 laser power sonden är en vanligt förekommande och nödvändiga enhet till:1. åtgärd laser uteffekt för laser inställningar över tiden. Om du äger en RF (Radio Frequency) powered lase...

Hur man använder en CO2 laser power sond som mäter laser uteffekt att hitta en dålig spegel

denna video visar hur du använder Mahoney CO2 laser power sonden. CO2 laser power sonden är en vanligt förekommande och nödvändiga enhet till:1. åtgärd laser uteffekt för laser inställningar över tiden. Om du äger en RF (Radio Frequency) powered lase...

Arduino-Powered binära termometer

jag nyligen förvärvat en Arduino Uno och letade efter en cool "komma igång" projekt. Jag beslöt att göra en termometer, som satsen har jag haft alla nödvändiga delar (termistor, sladdar, motstånd, lysdioder). Genom ett par iterationer, jag äntli...

Arduino-powered LED klocka

En rolig, enkel LED-klocka, som ger dig tiden till den närmaste halvtimmen med hjälp av enfärgade lysdioder. Delar som behövs är följande:Arduino Nano400 tie-punkt skärbrädaBandkabelDS1307 RTC IC32.768 kHz Crystal(12) 10mm lysdioder(12) 180 Ohm motst...

Arduino powered Halloween pumpa med rörelsedetektor

Hejdetta Instructable visar dig hur man gör några Halloween dekorationer inklusive arduino powered Halloween pumpa med rörelsedetektor.Steg 1: Göra Halloween pumpa Material:Rund ballongGamla tidningarSmidig mjölVattenTemperaModellering leraSuperlimVe...

Acrylic fisk Tank med Arduino-Powered mataren

Har du någonsin velat ett mer händer på känsla när får en fisk? Eller ville ha något annat än de genomsnittliga akvarier finns i butiker? Denna fisk tank är helt anpassad och kan ändras för att passa din storlek behov och har en Arduino powered feede...

Ersätter ett CO2 laser rör

säkerhet första - lasrar är farliga, jag antar att du vet detta och du vet vad du gör med laser och lödkolvar. Kör aldrig en laser rör utanför laser-chassit, aldrig besegra alla säkerhetssystem inbyggt i din laserskärare!CO2 laser rören i många laser...

Arduino Powered Gainclone (förstärkare)

för er som inte vet (och jag inte förrän nyligen), en Gainclone är en förstärkare som är en klon av den ursprungliga utformningen av en förstärkare av 47 Labs kallas en Gaincard och är baserade på enkel flisa förstärkare av National Semiconductor - n...

Hur man bygger en Arduino Powered Chess spela Robot

att döma av det stora antalet schack relaterade Instructables, jag tycker det är säkert att säga gemenskapen åtnjuter spelet. Det kan dock vara svårt, att hitta någon som spelar på samma nivå som du gör. Att lösa detta dilemma, och att öka min spela...

Hur att testa och ställa in en kinesiska (Kina) gjorde CO2 Laser Power Supply att få lång livslängd från din CO2 Laser röret för lasergravyr och Laser Cutting Machine System

vara säker när du utför detta projekt.SÄKERHETEN ÄR VIKTIGAST. OM DU GÖR DET FEL KAN DÅ DU VARA STÖT. KOMBINATIONEN HÖG SPÄNNING OCH STRÖM KAN VARA DÖDLIGT. FÖLJ INSTRUKTIONERNA NEDAN. INTE AVVIK FRÅN INSTRUKTIONERNA NÄR DET GÄLLER SÄKERHET.Högspänni...

Hur konvertera 220V till 110V på en kinesisk CO2 Laser Power Supply

Detta instructable ger steg för steg att ändra en kinesisk CO2 laser strömförsörjning från ett ingående spänning 220V AC till 110V AC. Jag utför den här åtgärden regelbundet som mina kunder ändra sina krav, eller de helt enkelt ligger i USA och kör s...

Hur man använder en CO2 laser power sond för att certifiera en CO2-laser utför garanti specifikationer

videon ger en prov demonstrationen av Mahoney laser power sonden och beskriver hur det räddade mig från en falsk säljare av CO2 laser rör.Min historia är följande:Falska säljaren hade sålt mig en 150 watt laser för mer än två tusen dollar, inklusive...

Ett trådlöst kontrollerade, Arduino-Powered anslagstavla

bygga själv en trådlöst styrd, Arduino-powered anslagstavla!Här är ett enkelt projekt som skapar en trådlöst programmerbart anslagstavla. XBee moduler använder för att ge en trådlös seriell länk mellan datorn och enheten. Du interagerar med den via e...

Arduino Powered infraröd sak

Hej, detta är min första instructible. Jag kommer att visa dig hur man gör en arduino powered analog sensor läsare (jag kommer att använda en infraröd fotodiod).Steg 1: delar Du behöver flera saker att göra detta:1. någon form av fallet eller låda2....

Arduino Powered uppvärmd handske Liners

Arduino Powered uppvärmda handskarDetta projekt är om hur att göra världens smartaste uppvärmd handske liners för extremt kalla förhållanden som de i Minnesota eller människor som har Raynauds syndrome(like me). Dessa handskar kommer förses du med ti...

Arduino Powered RGB LED Vodka hylla

detta instructable kommer du igång att göra ditt eget arduino powered röd grön och blå LED-projekt. Det behöver inte ens vara en hylla! Vodka flaskor råkar bara lysa upp fint så det är vad jag valde att göra.I detta projekt använder vi varje stift på...