<?xml version="1.0"?>
<rss version="2.0"><channel><title><![CDATA[Profiles for VoiceAttack & other projects]]></title><link>https://veterans-gaming.com/blogs/blog/8-profiles-for-voiceattack-other-projects/</link><description><![CDATA[
<p>
	Personal blog including <a href="<___base_url___>/avcs/" rel="" target="_blank">Advanced Voice Control Systems</a> profiles for <a href="https://www.voiceattack.com/" rel="external nofollow" target="_blank">VoiceAttack</a>, and other projects.
</p>
]]></description><language>en</language><item><title>DIY - External Temperature and Humidity Sensor - AVCS-DHT1 Build Guide</title><link>https://veterans-gaming.com/blogs/entry/45-diy-external-temperature-and-humidity-sensor-avcs-dht1-build-guide/</link><description><![CDATA[<div class="vg-wiki-editor-field-adjust section-guide" style="padding-top:-12px;margin-top:-12px;">
	<div class="vg-wiki-guide-block">
		<div class="vg-wiki-container-guide">
			<div class="vg-wiki-toc-box">
				<details class="vg-wiki-toc-box-hide" open=""><summary class="vg-wiki-toc-box-hide"></summary><div style="padding-bottom:6px;margin-bottom:6px;">
						<p class="vg-wiki-toc-addendum">
							  <a data-smooth-scroll="0" href="#Parts" rel="" target="_self">Parts List &amp; Links</a>  
						</p>
					</div>

					<ol class="vg-wiki-toc-list"><li>
							<a data-smooth-scroll="0" href="#Sensor" rel="" target="_self">Preparing the Sensor</a>
						</li>
						<li>
							<a data-smooth-scroll="0" href="#Case" rel="" target="_self">Preparing the Case</a>
						</li>
						<li>
							<a data-smooth-scroll="0" href="#Arduino" rel="" target="_self">Preparing the Arduino</a>
						</li>
						<li>
							<a data-smooth-scroll="0" href="#Assembly" rel="" target="_self">Final Assembly</a>
						</li>
						<li>
							<a data-smooth-scroll="0" href="#Code" rel="" target="_self">Uploading the Code</a>
						</li>
					</ol><p class="vg-wiki-toc-addendum">
						  <a data-smooth-scroll="0" href="#addendum" rel="" target="_self">Get Help &amp; Support</a>
					</p>
				</details></div>

			<div class="vg-wiki-container right medium">
				<div class="vg-callout-box-container right medium" title="original proof of concept tests on my Arduino Uno prototype board from March 2022">
					<div class="vg-callout-box right medium">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5446" data-ratio="56.25" data-unique="6k7d7p6h5" style="padding-top:8px;height: auto;" width="500" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.88f679f16e0e6581e4aef4f63874d33e.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"></div>
				</div>
			</div>

			<div style="font-size:18px;padding-left:24px;padding-right:24px;">
				<p>
					<span style="font-size:16px;">I have written a new voice control profile called <a href="https://veterans-gaming.com/files/category/77-voiceattack/" rel="" target="_blank" title="Download AVCS SENS profile for VoiceAttack">'AVCS SENS'</a> for <a href="https://voiceattack.com/" ipsnoembed="true" rel="external nofollow" target="_blank" title="click here to check out the VoiceAttack website">VoiceAttack</a> specifically dealing with sensors and weather commands.  I wanted to use the Shared Memory feature of the <a href="https://www.aida64.com/products/aida64-extreme" ipsnoembed="true" rel="external nofollow" target="_blank" title="AIDA64 Extreme product page">AIDA64 Extreme</a> sensor monitoring program to enable my VoiceAttack profile to speak the requested computer sensor value when asked over text-to-speech.</span>
				</p>

				<p>
					<span style="font-size:16px;">Once I had sensor values from AIDA64 Extreme in VoiceAttack, I then added a DHT11 Temperature &amp; Humidity sensor to the Arduino Uno on my prototype breadboard, connected to my PC through USB.  </span><span style="font-size: 16px;">Now reading this as well from my VoiceAttack profile, I could do a little math to get a more absolute and objective value from the computer sensors, a CPU temperature in "degrees over ambient", for example, or "delta-T over ambient" as you may hear it called in analysis videos such as </span><a href="https://youtu.be/ePZCHQ--UJM" ipsnoembed="true" rel="external nofollow" style="font-size: 16px; background-color: rgb(18, 18, 18);" target="_blank" title="click here to open youtube link in new tab">this one here</a><span style="font-size: 16px;"> talking about case testing methodology used by </span><a href="https://www.gamersnexus.net/" ipsnoembed="true" rel="external nofollow" style="font-size: 16px; background-color: rgb(18, 18, 18);" target="_blank" title="click here to check out the Gamers Nexus website">Gamers Nexus</a><span style="font-size: 16px;">.  </span><span style="font-size: 16px;">This is the true means to understand what computer sensors for temperature are reporting at any given time, by first accounting for the temperature of the room.</span>
				</p>

				<p>
					<span style="font-size: 16px;">Finally, with this relative sensor data now available, I've been able to write a simple diagnostic algorithm which can identify &amp; flag atypical sensor values, as compared to stored baseline values on file, for voice commands in VoiceAttack.  </span><span style="font-size: 16px;">Without an AVCS-DHT1, outdoor weather and </span><strong style="font-size: 16px;">sensor <em>report</em></strong><span style="font-size: 16px;"> commands are still available, yet indoor weather &amp; </span><strong style="font-size: 16px;">sensor</strong><span style="font-size: 16px;"> </span><em style="font-size: 16px;"><strong>diagnostic</strong></em><span style="font-size: 16px;"> commands will be unavailable.  I wanted to make it possible for anyone using my new AVCS SENS profile for VoiceAttack to either be able build their own AVCS-DHT1 USB external temperature &amp; humidity sensor,<br>
					or <a href="https://veterans-gaming.com/store/product/13-avcs-dht1-usb-temperature-humidity-sensor/" rel="" target="_blank" title="open VG Store in new tab">buy one</a> designed &amp; built by me, according to this simple Arduino project build guide, and therefore unlock these additional voice command features for AVCS SENS.</span><br>
					 
				</p>

				<hr style="display: block;clear:both;margin-bottom: 1em;margin-top: 1em;"></div>

			<div id="Parts" style="font-size:18px;">
				<p style="margin-bottom:-4px;padding-left:24px;">
					<span style="font-size:24px;color:#dba901;"><strong>My DIY USB Temperature &amp; Humidity Sensor 'AVCS-DHT1' - for use in my AVCS Voice Sensors &amp; Weather Profile</strong> </span><br><span style="font-size:12px;"><em>parts list below contains links to specific items which I directly purchased myself for this project on Amazon only, but any store will do, and also any equivalent part which performs the same will work (brand names/quantities do not matter!)<br>
					if you are using a different case than the exact one linked below, or other components, please see the note in the AVCS SENS Wiki page regarding <a href="https://veterans-gaming.com/wiki/vg-labs-projects/avcs-wiki/avcs-voice-sensors-weather/#Sensor%20Calibration" rel="" target="_blank">Sensor Calibration</a></em></span><br>
					 
				</p>
			</div>

			<div class="vg-wiki-container right medium">
				<div class="vg-callout-box-container right medium" title="ignore the Arduino Micro pictured, Nano is required">
					<div class="vg-callout-box right medium">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5423" data-ratio="75.00" data-unique="brvond0nr" style="width: 500px; height: auto;padding-top:8px;" width="500" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.88d4848dcb871fc9171319764136f191.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"></div>
				</div>
			</div>

			<div class="vg-wiki-container left large squared">
				<div class="vg-callout-box-container left large squared">
					<div class="vg-callout-box left large squared">
						<p style="margin-top:8px;padding-top:8px;">
							<span style="font-size:20px;"><span style="color:#27ae60;"><u><strong>Project Required Parts List                                                    </strong></u></span></span><br><span style="color:#dddddd;"><span style="font-size:12px;"><em>(all prices listed in <abbr title="United States Dollars"><abbr title="United States Dollars">USD</abbr></abbr> - price and availability may be different past last publish date of this guide)</em></span></span><br>
							 
						</p>

						<p>
							<span style="font-size:16px;"><span style="color:#999999;"><strong>Arduino Nano (or equivalent clone) - with NO header pins soldered on!</strong></span><br><span style="color:#999999;"><strong>(HiLetgo Nano v3.0 5V) (3 pack)  -  $24.49</strong></span><br><a href="https://www.amazon.com/dp/B01DLIJQA2" ipsnoembed="true" rel="external nofollow" target="_blank" title="opens link in new tab">https://www.amazon.com/dp/B01DLIJQA2</a><br><span style="color:#27ae60;">$8.16 per board</span></span>
						</p>

						<p>
							<span style="font-size:16px;"><span style="color:#999999;"><strong>USB Cable - USB 2.0 Type A to Mini-B (3ft. or 1 meter, at least)  (or equivalent part)</strong></span><br><span style="color:#999999;"><strong>(iSeekerKit Nylon Braided 3ft.) (3 pack)  -  $8.99</strong></span><br><a href="https://www.amazon.com/dp/B08LL272SK" ipsnoembed="true" rel="external nofollow" target="_blank" title="opens link in new tab">https://www.amazon.com/dp/B08LL272SK</a><br><span style="color:#27ae60;">$3.00 per cable</span></span>
						</p>

						<p>
							<span style="font-size:16px;"><span style="color:#999999;"><strong>DHT11 Temperature Humidity Sensor Module 3.3V-5V (or DHT22, or equivalent part)</strong></span><br><span style="color:#999999;"><strong>(HiLetgo w/Dupont Wires) (5 pack)  -  $10.29</strong></span><br><a href="https://www.amazon.com/dp/B01DKC2GQ0" ipsnoembed="true" rel="external nofollow" target="_blank" title="opens link in new tab">https://www.amazon.com/dp/B01DKC2GQ0</a><br><span style="color:#27ae60;">$2.06 per sensor</span></span>
						</p>

						<p>
							<span style="font-size:16px;"><span style="color:#999999;"><strong>Plastic Electronics Project Case @ 1.97" x 1.10" x 0.59" (50mm x 28mm x 15mm)</strong></span><br><span style="color:#999999;"><strong>(Zulkit ABS Project Boxes) (5 pack)  -  $7.99</strong></span><br><a href="https://www.amazon.com/dp/B07PZ24LFD" ipsnoembed="true" rel="external nofollow" target="_blank" title="opens link in new tab">https://www.amazon.com/dp/B07PZ24LFD</a><br><span style="color:#27ae60;">$1.60 per item</span></span>
						</p>

						<p>
							<span style="font-size:16px;"><span style="color:#999999;"><strong>Metal Film Fixed Resistor 10K ohm (0.5Watt) - just one will be needed</strong></span><br><span style="color:#999999;"><strong>(EDGELEC Pack of Resistors) (100 pack)  -  $5.99</strong></span><br><a href="https://www.amazon.com/dp/B07QJB31M7" ipsnoembed="true" rel="external nofollow" target="_blank" title="opens link in new tab">https://www.amazon.com/dp/B07QJB31M7</a><br><span style="color:#27ae60;">$0.06 per resistor</span></span>
						</p>

						<p>
							<span style="font-size:16px;"><span style="color:#999999;"><strong>Strong Double-Sided Foam Adhesive Tape (or equivalent product) - only need a few inches</strong></span><br><span style="color:#999999;"><strong>(Gorilla Brand Heavy Duty Mounting Tape) (1" x 120" roll)  -  $11.34</strong></span><br><a href="https://www.amazon.com/dp/B082TQ3KB5" ipsnoembed="true" rel="external nofollow" target="_blank" title="opens link in new tab">https://www.amazon.com/dp/B082TQ3KB5</a><br><span style="color:#27ae60;">$0.20 approx. amount used</span></span>
						</p>

						<p>
							<span style="font-size:16px;"><span style="color:#999999;"><strong>Neodymium Magnet 8mm x 2mm (round, size is important!) - just one will be needed</strong></span><br><span style="color:#999999;"><strong>(FINDMAG Box of Magnets) (100 pack)  -  $9.99</strong></span><br><a href="https://www.amazon.com/dp/B09BB1VT4J" ipsnoembed="true" rel="external nofollow" target="_blank" title="opens link in new tab">https://www.amazon.com/dp/B09BB1VT4J</a><br><span style="color:#27ae60;">$0.10 per magnet</span></span>
						</p>

						<p>
							<span style="color:#f1c40f;"><u><span style="font-size:22px;"><strong>Total:</strong></span></u></span><br><strong><span style="font-size:22px;"><span style="color:#27ae60;">$15.18 (<abbr title="United States Dollars"><abbr title="United States Dollars">USD</abbr></abbr>)  </span></span></strong><span style="font-size:16px;"><span style="color:#27ae60;"><strong>(for 1 sensor*)</strong></span><span style="color:#999999;"><strong> - (total if all parts purchased with amounts above:  $79.08)</strong></span></span><br><span style="color:#dddddd;"><span style="font-size:12px;"><em>*(also required - drill/rotary tool, solder and soldering iron, electrical tape, tweezers, scissors, 'nippers', 'spudger' type tool, and SuperGlue)</em></span></span>
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container right medium rounded light blackgold-border" style="padding-top:24px;margin-top:24px;">
				<div class="vg-callout-box-container right medium rounded light blackgold-border">
					<div class="vg-callout-box right medium rounded light blackgold-border">
						<div class="vg-wiki-text-unselectable">
							<p style="margin-top:8px;padding-top:8px;">
								<strong><span style="font-size:16px;">This project requires the following skills &amp; knowledge:</span></strong>
							</p>

							<ul><li style="margin-top: 8px; padding-top: 8px;">
									Basic understanding of Arduino (what it is/what it does)
								</li>
								<li style="margin-top: 8px; padding-top: 8px;">
									Basic experience with electrical soldering
								</li>
								<li style="margin-top: 8px; padding-top: 8px;">
									Basic skills with drill or Dremel/rotary tool and bits
								</li>
								<li style="margin-top: 8px; padding-top: 8px;">
									Use of and precautions relating to SuperGlue type adhesive
								</li>
								<li style="margin-top: 8px; padding-top: 8px;">
									Ability to make precise cuts with scissors within 1-2mm
								</li>
								<li style="margin-top: 8px; padding-top: 8px;">
									Ability to carefully follow instructions (some are crucial)
								</li>
								<li style="margin-top: 8px; padding-top: 8px;">
									Entry level experience with VoiceAttack (import profile, etc.)
								</li>
								<li style="margin-top: 8px; padding-top: 8px;">
									Ability to work w/ tiny parts in a small space in timely manner
								</li>
								<li style="margin-top: 8px; padding-top: 8px;">
									A positive attitude and willingness to adapt and overcome (not exactly required, but always recommended <img alt=";)" data-emoticon="true" height="20" loading="lazy" src="https://veterans-gaming.com/uploads/emoticons/default_wink.png" srcset="https://veterans-gaming.com/uploads/emoticons/wink@2x.png 2x" title=";)" width="20"> )<br>
									 
								</li>
							</ul></div>
					</div>
				</div>
			</div>
		</div>

		<div class="vg-wiki-container-guide" id="Sensor">
			<div>
				<p>
					<span style="font-size:24px;"><span style="color:#e67e22;"><u><strong>Part 1 - Preparing the Sensor                                              </strong></u></span></span>
				</p>
			</div>

			<div class="vg-wiki-container medium left img">
				<div class="vg-callout-box-container medium left img">
					<div class="vg-callout-box medium left img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed ipsAttachLink_image" data-fileid="5424" data-ratio="100.40" data-unique="ulo9ggc50" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.bd3f04b9b449567cca4761d64c3f037d.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:-8px;padding-top:-8px;margin-bottom:-8px;padding-bottom:-8px;">
							preparing the DHT sensor and stripping the braided wires - image a1
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>1.</strong> Separate the DHT11 (or DHT22) from the breakout board it is mounted on (if not supplied without one).  Either snip the wires from the DHT as close to the board as possible with "nippers" (image a1), or de-solder them from the breakout board.  If supplied with the Dupont ribbon wires, remove the plastic ends and prepare the wire ends by cutting them even and strip the wires leaving at least 1.5cm bare.  We want around 75-100mm (2.95-3.93") of flexible braided wire so we can zig-zag the excess, allowing us to remove the plastic lid with sensor and not risk yanking the soldered wires out.</span>
				</p>
			</div>

			<div class="vg-wiki-container small right img">
				<div class="vg-callout-box-container small right img">
					<div class="vg-callout-box small right img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5425" data-ratio="100.40" data-unique="lg28prlob" style="padding-top:2px;width: 500px; height: auto;" width="500" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.39493fbc67e28c8e657750df70cde7ca.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							solder wire ends - image a2
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>2.</strong> Twist the wire ends and tint them with solder to make them stiff, yet not so much as to increase their width with too much solder &amp; slag - three of them must fit through the holes on the Arduino.</span>
				</p>

				<p>
					 
				</p>

				<p>
					 
				</p>

				<p>
					<span style="font-size:16px;"><strong>3.</strong> Once the DHT has been separated from the breakout board, with the side with holes facing you and pins down, cut the third pin from the left, or second from the right, as in image a1.</span>
				</p>
			</div>
		</div>

		<div class="vg-wiki-container-guide">
			<div class="vg-wiki-container medium left img">
				<div class="vg-callout-box-container medium left img">
					<div class="vg-callout-box medium left img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5426" data-ratio="51.60" data-unique="r8ag1544b" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.0db30163221257555a95516a19ea05a2.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							gently bending the pins, resistor legs, and wires - image a4
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>4.</strong> Prepare the DHT pins by gently curving them into hooks facing away from the side of the sensor with holes.  Gently bend the legs of the 10K ohm resistor (as shown in image a4) so that it will sit in the hooks of the two DHT pins closest together, as seen with the sensor face down (holes down, as in image a5).</span>
				</p>

				<p>
					 
				</p>
			</div>

			<div class="vg-wiki-container small right img">
				<div class="vg-callout-box-container small right img">
					<div class="vg-callout-box small right img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5427" data-ratio="75.14" data-unique="3q9lb9y4o" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.495a160bea11102ee76c374b4f4f9ab1.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							resistor placement - image a5
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>5.</strong> Bend two of the three wire ends away laterally away from the third wire, into a gentle hook shape, and the third wire opposite those in the same manner. Lay the 10K ohm resistor into the right two wire-hooks of the DHT sensor (face down - image a5).</span>
				</p>
			</div>
		</div>

		<div class="vg-wiki-container-guide">
			<div class="vg-wiki-container medium left squared dark blackgold-border">
				<div class="vg-callout-box-container medium left squared dark blackgold-border">
					<div class="vg-callout-box medium left squared dark blackgold-border">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5431" data-ratio="25.20" data-unique="qv07hjrb6" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.aff24bd638d81c1a58a8d762fe3cc126.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							 final goal for the resistor, legs, and wires: flat &amp; straight - image a3
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<br><strong><span style="font-size:16px;">NOTE: The Resistor should be offset in a manner where its bulk and width can mostly lay flat along side the wires and not on top of them once completed (image a3).</span></strong>
				</p>

				<p>
					 
				</p>

				<p>
					 
				</p>
			</div>

			<div class="vg-wiki-container medium left img">
				<div class="vg-callout-box-container medium left img">
					<div class="vg-callout-box medium left img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5428" data-ratio="48.80" data-unique="ad7omd4k8" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.652fe203ca56435ccc22a25846e1f106.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							gently crimping the DHT pins around resistor legs &amp; wires - image a6
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>6.</strong> Lay the wire "hooks" into their corresponding DHT wire "hooks" over the resistor, and if able, use a tweezers to gently compress these DHT wire hooks to contain the wires and resistor for soldering, as well as the wire "hooks" themselves.  If this is <em><strong>not</strong></em> possible, you may want to secure the DHT to the table with scotch tape, lay the three wires in place in their "hooks", and scotch tape down the wires to the table with a gentle pull, to ensure they remain in place while soldering them firmly in place as one connection. </span>
				</p>

				<p>
					 
				</p>
			</div>

			<div class="vg-wiki-container small right img">
				<div class="vg-callout-box-container small right img">
					<div class="vg-callout-box small right img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5429" data-ratio="97.20" data-unique="h7cgji629" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.287cbaf939cdd6834f0e792b73638f53.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							soldering to the DHT - image a7
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>7.</strong> Solder each connection so that the wire, the wire "hook" from the DHT, and the resistor are fully encased, and not touching each other.</span>
				</p>
			</div>

			<div class="vg-wiki-container medium left img">
				<div class="vg-callout-box-container medium left img">
					<div class="vg-callout-box medium left img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5430" data-ratio="73.80" data-unique="zvaawb36m" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.b5e439e94bffe4bd5a746b678e1307d6.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							trimming legs from resistor, and any protruding slag - image a8
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>8.</strong> When cooled, use "nippers" to nip any protruding slag or wire ends, and the trailing legs of the resistor as it exits the solder as in image a8.  The wires should travel flat following the rear plane of the sensor, so that later, the front face of the sensor (with holes) can protrude out of a hole we will cut in the case lid.  Refer to images a3 and a8 to see the resistor in-line with wires, as an example.</span>
				</p>
			</div>

			<div class="vg-wiki-container small right img">
				<div class="vg-callout-box-container small right img">
					<div class="vg-callout-box small right img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5432" data-ratio="63.00" data-unique="wzyf0egh1" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.8d4104016afaf77edeb8871289e822a9.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							wrap wires separately - image a9
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>9.</strong> Finally, wrap each exposed solder point with a separate small piece of electrical tape to ensure each cannot bridge contact with another in the event that something gets bent.  Just sandwiching a small rectangle of tape over each one will do, even if each has a tail of tape hanging off.  These bits of tape will be covered and held in place permanently once the sensor is mounted into the lid later.</span>
				</p>

				<p>
					 
				</p>

				<p>
					 
				</p>
			</div>
		</div>

		<div class="vg-wiki-container-guide" id="Case">
			<div style="font-size:18px;">
				<p style="margin-bottom:-4px;padding-left:24px;">
					<span style="color:#c0392b;"><span style="font-size: 24px;"><strong>SAFETY SAVES LIVES - SAFETY GOGGLES SAVE EYES!  BE SMART AND USE APPROPRIATE SAFETY GEAR WHILE WORKING!</strong></span></span><br><br>
					 
				</p>
			</div>

			<div>
				<p>
					<span style="font-size:24px;"><span style="color:#e67e22;"><u><strong>Part 2 - Preparing the Case                                                  </strong></u></span></span>
				</p>
			</div>

			<div class="vg-wiki-container small left img">
				<div class="vg-callout-box-container small left img">
					<div class="vg-callout-box small left img">
						<img alt="Step-8a-1.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5436" data-ratio="115.00" data-unique="mcp591hn3" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/Step-8a-1.png.a952c3507474c7c86766be01f78dbe06.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							drill 12 tiny air holes - image b1
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>1.</strong> Carefully remove the lid from the case - while holding the base in one hand, lid up, with the notch in the lid away from you, use a fingernail in the notch along with pressure from your finger to pry that side of the lid upwards.  If using a tool, be careful not to use too much pressure or the soft ABS plastic may deform or scratch if the tool jumps too fast once the lid becomes free.</span>
				</p>
			</div>

			<div class="vg-wiki-container small right img">
				<div class="vg-callout-box-container small right img">
					<div class="vg-callout-box small right img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5433" data-ratio="154.50" data-unique="qrb8yv8e7" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.6c5ccb3f525d863ad6f54c839e7aa049.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							keep notch at bottom - image b2
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>2.</strong> For the lid, we want to create a rectangular hole that will allow the front face of the DHT sensor to protrude.  The tapered sides of the blue sensor case widen towards its back which will keep it from protruding farther.  The lid is 25.9mm wide &amp; 47.75mm tall.  The approximate width of the hole will be at or under 16mm tall and 12.60mm wide.  For this to work well, it is best to cut a slightly smaller hole than desired and slowly widen it with hand tools or low speed rotary tool - stopping and testing the fit until just right (as shown in image b6 below).  It is not easy to get exact, I've tried.  Just accept any slight tilt, it is a DIY after all.</span>
				</p>
			</div>

			<div class="vg-wiki-container small left img">
				<div class="vg-callout-box-container small left img">
					<div class="vg-callout-box small left img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed ipsAttachLink_image ipsAttachLink_left" data-fileid="5435" data-ratio="36.50" data-unique="kazr0mmhs" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.b03c38c647587a17d73f4110c47305b2.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png">port is<span style="font-size: var(--post--font-size);"> upside down - image b3</span>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;">The goal for the USB hole is to make it flush with the bottom of the case as it exits, and as wide as the USB port itself (8mm).  The port is 4mm tall, but as you can see in image b3, even I could not quite keep that height with that limit as I drilled and widened the hole.  </span><span style="font-size:16px;">Again, stop and check the fit - first dusting out any bits of plastic from the process, and sliding the Arduino Nano <em><strong>upside down</strong></em> as shown for a test fit.  It must slide flat with the case bottom and through the case wall as shown.</span>
				</p>

				<p>
					 
				</p>

				<p>
					<span style="font-size:16px;"><strong>3.</strong> With the lid removed from the base, use a drill bit between 1mm-2mm at <strong><em>low speed</em></strong> to create 4 holes in the 'top', and 4 holes on each side near the top (as shown in image b1), for 12 total air holes.  The passthrough hole for the USB mini-B port will require drilling and widening with hand tools or a rotary tool <strong><em>at a low speed</em></strong>.  The port is about 4mm tall &amp; 8mm wide.  <strong>High speeds may heat and melt the ABS plastic</strong>, so if you are working at an area for too long, back off and let it cool down.</span><br>
					 
				</p>
			</div>

			<div class="vg-wiki-container medium left img">
				<div class="vg-callout-box-container medium left img">
					<div class="vg-callout-box medium left img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5438" data-ratio="73.80" data-unique="y9bvlfar3" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.c37dd5201a64fdeac8f7316a3d81fbe8.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							place one small drop of SuperGlue at the arrow for magnet - image b4
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>4.</strong> Once all the holes are drilled and the rough edges cleaned up as much as possible, wipe the interior clean of plastic dust.  Using a strong SuperGlue, place a very small drop inside the case at the top near the four holes you drilled, as shown by the arrow in image b4.  Carefully place the tiny magnet over the drop of glue; non-magnetic tip tweezers or even chopsticks can really help - just be sure not to touch the SuperGlue as you position the magnet.</span>
				</p>
			</div>

			<div class="vg-wiki-container medium right squared dark blackgold-border" style="margin-right:-24px;">
				<div class="vg-callout-box-container medium right squared dark blackgold-border">
					<div class="vg-callout-box medium right squared dark blackgold-border">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5437" data-ratio="58.06" data-unique="itlctbux2" style="padding-top: 2px; width: 248px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.76a88463c972323595c4b1f1a316ca78.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;color:#7b7b7b;">
							 test fit the sensor into lid - image b6
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					 
				</p>

				<p>
					<span style="font-size:16px;"><strong>5.</strong> Finally, cut a strip of the double-sided adhesive foam tape about 25mm wide and 8mm tall - do not remove the backing yet!  Once the SuperGlue has dried (give it a few minutes) place the strip of tape over the magnet (image b5, below).</span>
				</p>

				<p>
					 
				</p>
			</div>

			<div class="vg-wiki-container medium right img" style="margin-right:200px;padding-right:200px;">
				<div class="vg-callout-box-container medium right img">
					<div class="vg-callout-box medium right img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5439" data-ratio="48.50" data-unique="vbky8lctr" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.4d58996ac3c52e41b98d297d4eec92ac.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							fully cover magnet with tape, do not remove backing (yet) - image b5
						</p>
					</div>
				</div>
			</div>
		</div>

		<div class="vg-wiki-container-guide" id="Arduino">
			<div>
				<p>
					<span style="font-size:24px;"><span style="color:#e67e22;"><u><strong>Part 3 - Preparing the Arduino                                           </strong></u></span></span>
				</p>
			</div>

			<div class="vg-wiki-container medium left img">
				<div class="vg-callout-box-container medium left img">
					<div class="vg-callout-box medium left img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5440" data-ratio="31.20" data-unique="jhcmv4esc" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.dec4325ffb9b6e31550d0979acf2b411.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							setting the board to "Arduino Nano" and its COM Port - image c1
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>1.</strong> Open the Arduino IDE v1.8 (latest) (<a href="https://www.arduino.cc/en/software" rel="external nofollow" target="_blank">download</a> and install first, if not already done) and make sure it is updated to current release version.  Place the Arduino Nano on a hard, non-conductive surface, and connect the USB cable to the device and then to the PC.  Refer to device instructions (per brand/model/type) as required, if the device driver is not installed automatically.  Under the 'Tools' Menu along the top, select the COM Port of this device, and set the board to Arduino Nano (as shown in image c1), and unless directed by device instructions, leave the Processor as "ATmega328P".</span>
				</p>
			</div>

			<div class="vg-wiki-container medium right img">
				<div class="vg-callout-box-container medium right img">
					<div class="vg-callout-box medium right img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5442" data-ratio="45.00" data-unique="kks5yacgl" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.65c2175e869452fe086eef76364f8475.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							opening and uploading the Arduino Basics "Blink" sketch - image c2
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>2.</strong> Under the 'File' Menu along the top, select Examples &gt; Basics &gt; Blink to open this sketch (see image c2).  Next, click the Upload button ( <img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5441" data-ratio="100.00" data-unique="7j6pn671k" style="height: auto;" width="28" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.cef1e06193b7f118a2b9e457acd1b6b6.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"> ) to send this sketch to the Arduino Nano.  Verify that the onboard LED slowly blinks on and off repeatedly to ensure this board is functioning, and that sketches are uploading properly.  If you have any problems at this stage, you will want to stop and perform other troubleshooting steps to verify that the Arduino IDE is set up properly to communicate with this board, and that the board itself is not faulty.  See <a data-smooth-scroll="0" href="#addendum" rel="" target="_self">Addendum</a> at the bottom of this guide for help.</span>
				</p>

				<p>
					 
				</p>

				<p>
					 
				</p>
			</div>

			<div class="vg-wiki-container medium left img">
				<div class="vg-callout-box-container medium left img">
					<div class="vg-callout-box medium left img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5443" data-ratio="67.60" data-unique="j2xs9a856" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.4ce11a8c4fafb68ff3b18411f305e203.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							installing or updating the "Adafruit Unified Sensor" library - image c3
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>3.</strong> To get data from the DHT sensor, we will be using an open source <a href="https://github.com/adafruit/DHT-sensor-library" rel="external nofollow" target="_blank">DHT Sensor Library</a> by Adafruit, which requires the <a href="https://github.com/adafruit/Adafruit_Sensor" rel="external nofollow" target="_blank">Adafruit Unified Sensor Library</a>, as well.  In the Arduino IDE, under the 'Tools' Menu, select 'Manage Libraries...' (or press CTRL+i) to open this window - it takes a few seconds to open.  First, select the Type of "All" (if not already selected), and the Topic of "Sensors".  In the search field, type "Adafruit Unified Sensor".  The list will be long, scroll down until you find the Adafruit Unified Sensor library (as pictured in image c3) - install it or update with the latest version, if not already.</span>
				</p>
			</div>

			<div class="vg-wiki-container large right img">
				<div class="vg-callout-box-container large right img">
					<div class="vg-callout-box large right img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5444" data-ratio="67.60" data-unique="fcjfw1jo8" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.83bd72c749220d54f9ac32da46978233.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							installing or updating the Adafruit "DHT sensor library" - image c4
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>4.</strong> Next, in that same search field, type "DHT sensor library".  Again, the list will be long, scroll down until you find the item with the title "DHT sensor library" by Adafruit (as pictured in image c4) - again, install or update it if it is not installed with the latest version.<br><br><strong>When you are finished, close the Library Manager and disconnect the Arduino from the computer.</strong></span>
				</p>

				<p>
					<span style="color:#e67e22;"><span style="font-size:16px;">If desired, use a light grit sandpaper on the edges of the Arduino Nano PCB board to make them smooth.</span></span>
				</p>
			</div>

			<div class="vg-wiki-container medium left squared dark blackgold-border">
				<div class="vg-callout-box-container medium left squared dark blackgold-border">
					<div class="vg-callout-box medium left squared dark blackgold-border">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5455" data-ratio="105.20" data-unique="d7qeii756" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.e69bdfbd7d027bc8f507a2722e53b4ce.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							<span style="font-size:12px;"> AVCS-DHT1 Wiring Diagram (your resistor color may be different!)  -  image c5</span>
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>5.</strong> Once you have verified that the Blink sketch is working from earlier steps, and that the Arduino IDE can properly upload to the Arduino Nano board, it's time to solder the wires from the DHT sensor to the Arduino.  Follow the wiring diagram (shown in image c5), separating the ribbon cable to individual wires for flexibility, as needed.</span>
				</p>

				<p>
					 
				</p>
			</div>

			<div class="vg-wiki-container medium right img">
				<div class="vg-callout-box-container medium right img">
					<div class="vg-callout-box medium right img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5459" data-ratio="72.00" data-unique="6phlhloh8" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.0ef36e4a28176a9d7d0f2cac4fabf32c.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							later, mounting will be upside down, as shown here - image c6
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>NOTE:</strong>  As stated before, the Arduino Nano MUST be upside down (shown in image c6) in the end.  You may wish to do as I have done, and push the wires through from the other (top) side of the board, soldering them into place on the <em>underside </em>(now facing up, like image c6).</span>
				</p>

				<p>
					<span style="font-size:16px;"><em><strong>Unlike the diagram</strong></em>, the <span style="color:#663300;"><strong>brown</strong></span> wire from these pictures is the black/ground wire, the <span style="color:#e74c3c;"><strong>red</strong></span> wire is the yellow/signal wire, and the <span style="color:#e67e22;"><strong>orange</strong></span> wire is the red VCC/5V from image c5!  Your wires may differ in color as well, if using those supplied with your DHT module as I have done.  Do not get them mixed up - follow any wire back to the DHT to identify it properly.</span>
				</p>

				<p>
					<span style="font-size:16px;">When complete, trim any protruding slag, or excess length from the wires as they exit the board, once cooled.</span>
				</p>
			</div>
		</div>

		<div class="vg-wiki-container-guide" id="Assembly">
			<div>
				<p>
					<span style="font-size:24px;"><span style="color:#e67e22;"><u><strong>Part 4 - Final Assembly                                                         </strong></u></span></span>
				</p>
			</div>

			<div class="vg-wiki-container medium left img">
				<div class="vg-callout-box-container medium left img">
					<div class="vg-callout-box medium left img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5450" data-ratio="84.30" data-unique="z0grilw4m" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.785c5fe01d7a85070efc63d8aa17693f.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							gently press down on areas such as those noted with arrows - image d1
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>1.</strong> Cut a piece of the double-sided adhesive foam tape 23mm wide and 45mm tall, with a small notch cut out to allow wires to pass as shown in image d1.  Do not remove the backing to expose the second adhesive side, this backing will remain on permanently as an additional barrier between the sensor, the Arduino, and the wires in the case.</span>
				</p>

				<p>
					 
				</p>

				<p>
					<span style="font-size:16px;"><strong>2.</strong> Place the completed sensor and wires assembly into its slot you cut out in the lid, from the inside.  Cover the entire unit with the tape you cut out, allowing the wires to fit through the notch.  Use a dull plastic "spudger" type tool (image d1) to gently but thoroughly press down at all contact points, bends, and flat areas where the tape should make full contact with the lid and sensor.  Avoid the area of the wires and resistor, and the soldering points - use only a finger or thumb and gentle pressure in the area over wires to ensure a light contact.  We don't want to break any of the solder or unintentionally bridge the contacts.</span>
				</p>

				<p>
					<br><span style="font-size:16px;">Do the same for the tape covering the magnet in the case - press into the bends and flat areas to ensure permanent contact.  Do not compress the part on the top of the magnet too much - we need this pile to be between 3-5mm to make contact with the Arduino Nano when it is finally in place.</span>
				</p>
			</div>

			<div class="vg-wiki-container medium right img">
				<div class="vg-callout-box-container medium right img">
					<div class="vg-callout-box medium right img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5451" data-ratio="96.00" data-unique="ibpj0wly8" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.fb58276b18ccb8339a611ad1f291761c.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							first remove backing from tape, then apply the SuperGlue - image d2
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>3.</strong> Before proceeding, <em><strong>with the protective backing still on the tape</strong></em> covering the magnet (still "un-sticky"), test fit the Arduino Nano into the case one last time - make sure the USB port sits flush with the base of the case as it exits, and the PCB board is flush with the edge of the case with the USB port hole (such as in image d3).  Ensure that the back of the Arduino overlapping the magnet touches the tape and the peel covering it - this is the last chance to make it taller with another bit of tape, if you used a different or thinner type of tape not recommended by this guide.  It should be a foam type tape with some give, and adding to the height of the magnet enough to make contact with the Arduino (about as tall as the USB port on the other side, 4mm).</span>
				</p>

				<p>
					<span style="font-size:16px;">When ready, first remove the backing peel entirely from the double-sided adhesive covering the magnet - a sharp pair of tweezers can help here, it is NOT EASY and your luck may vary (condolences, I use this stuff all the time because it is so great, but for this one flaw - actually getting the backing off once it's in place can be painful!).</span>
				</p>

				<p>
					<span style="font-size:16px;">Once you're done fighting the Gorilla tape and got the backing peel off, place a small dot of SuperGlue inside the case near the USB port passthrough hole.  In the example image d2 there is almost <strong><em>too</em></strong> much, half this much would do - you can use a cotton swab to soak up some of the glue before it dries, but this entire procedure must be done swiftly.</span>
				</p>

				<p>
					<span style="font-size:16px;">Before the SuperGlue dries, very carefully slot the Arduino Nano into the case at an angle, with the USB port first, keeping the back from touching the tape yet - slide the Arduino USB port through the hole and then lower the back end down into position above the tape, keeping the PCB flush with the case wall, and the USB port through the hole as it makes contact with and compresses the SuperGlue.  Quickly dab up any SuperGlue that may leak out of the hole and outside the case.</span>
				</p>

				<p>
					 
				</p>
			</div>

			<div class="vg-wiki-container medium left img">
				<div class="vg-callout-box-container medium left img">
					<div class="vg-callout-box medium left img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5452" data-ratio="96.40" data-unique="2eexicn7o" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.01e31c38a817c9079364a74d51376f2c.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							apply light pressure on right and strong pressure on left - image d3
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>4.</strong> Referring to image d3, with light &amp; gentle finger pressure, press down on the area noted by the arrow on the <strong>right</strong>, while also using a more firm finger pressure to press down on the area noted by the arrow on the <strong>left</strong> (over the tape/magnet).  Be sure not to put a lot of pressure on the right where those components are, it is not necessary - the SuperGlue will do its job, we just need to give it light pressure to help spread the SuperGlue and ensure flush contact as we put greater pressure on the left where there are no components and we want full contact with that tape.</span>
				</p>
			</div>

			<div class="vg-wiki-container small right squared dark blackgold-border">
				<div class="vg-callout-box-container small right squared dark blackgold-border">
					<div class="vg-callout-box small right squared dark blackgold-border">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5453" data-ratio="114.53" data-unique="91jusq8mk" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.60f203ceadc2f54c42fb98d00d919d49.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							 fully assembled - image d4
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>5.</strong> Before closing the lid, allow up to several minutes for the SuperGlue to dry.  Take this time to plan the bends or separations in the ribbon wire (if using one) so that each wire can sit in a sort-of zig-zag fashion once we do close the lid.  In image d3, the wires are actually a bit long and will require an extra 'zag' to fit, so I have separated the wires nearly to the first bend.  The first bend by the lid and notch in the tape must be acute &amp; firm without crimping!</span>
				</p>

				<p>
					<span style="font-size:16px;">Once the SuperGlue is dry, carefully guide the wires into places they won't impede as you close the lid - start from the far end away from the wires, and lower it into place over the USB port side lastly.  Be careful not to force it closed, adjust as needed to ensure a tight fit without jamming the wires into hard crimps or bends which could sever tiny wires in the braid inside the wire jacket.</span>
				</p>

				<p>
					 
				</p>
			</div>

			<div class="vg-wiki-container medium left img">
				<div class="vg-callout-box-container medium left img">
					<div class="vg-callout-box medium left img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5454" data-ratio="71.67" data-unique="ogtwhsxoi" style="padding-top: 2px; width: 300px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.d38c552ae87252fe48df21274ed6bdb4.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							The Official AVCS-DHT1 sticker label - image d5
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p>
					<span style="font-size:16px;"><strong>6.</strong> The AVCS-DHT1 Sensor (being magnetic) is designed to stick to a PC case <em><strong>in a vertical orientation</strong></em> somewhere not far from the intake, but far enough from intake fans to not be 'cooled by the wind'.  The back of the ABS plastic case on the sensor can potentially mar or scuff softer paint on a PC case, so it is advised to place a piece of black electrical tape or even Scotch Tape along this surface simply to ensure a softer contact with the PC.</span>
				</p>

				<p>
					<span style="font-size:16px;">All AVCS-DHT1 sensors built by me and sold in the VG Store will have this sticker label (shown in image d5), which also serves this purpose as a softer backing to help avoid minor scuffing over time.  If using one of these labels, carefully cut around the grey box on the label leaving about a 1-2mm margin as shown.  You may consider peeling back and folding a crease in the wax paper backing, then folding back into place over the adhesive surface, before cutting the label to size - this will help more easily remove the backing once you've trimmed off the edges of the label.</span>
				</p>

				<p>
					<span style="font-size:16px;">Unlike the high cost of shipping pre-built sensors around the world, I can offer these cool little AVCS-DHT1 sticker labels to anyone following this DIY Build Guide for a fairly low price in the VG Store including free domestic and international shipping to around 180 countries.  It's much cheaper to mail a small envelope than a box, of course. <img src="https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/72x72/1f609.png" class="ipsEmoji" alt="😉">  <strong><a href="https://veterans-gaming.com/store/product/14-official-diy-avcs-dht1-backing-label-sticker/" rel="" target="_blank" title="open VG Store in new tab"><span style="color:#e67e22;">Click Here</span></a></strong><span style="color:#e67e22;"> to open the VG Store in a new browser tab to check out these sticker labels.</span></span>
				</p>
			</div>
		</div>

		<div class="vg-wiki-container-guide" id="Code">
			<div>
				<p>
					<span style="font-size:24px;"><span style="color:#e67e22;"><u><strong>Part 5 - Uploading the Code                                                </strong></u></span></span>
				</p>
			</div>

			<div class="vg-wiki-toc-box">
				<details class="vg-wiki-toc-box-hide guide"><p>
						AVCS_DHT1_DIY_Sensor_v3
					</p>
					<summary class="vg-wiki-toc-box-hide"></summary><iframe data-ss1655279321="1" data-ss1655866956="1" data-ss1658178519="1" data-ss1675376213="1" data-ss1675376271="1" src="https://pastebin.com/embed_iframe/UjFZsg5c?theme=dark" style="border:none;height:1844px;width:800px"></iframe>
				</details></div>

			<div>
				<p>
					<span style="font-size:16px;"><strong>7.</strong> At long last, we can upload the Arduino sketch to the device and get some sensor data onto the computer!  Start by connecting the AVCS-DHT1 sensor to the computer with the USB cable, and mount it as noted, on the front or side of the computer near the intake but not within range of wind created by intake fans.  The area of the panel where the sensor sits should not be near any internal components which get hot under heavy PC use.</span>
				</p>

				<p>
					 
				</p>

				<p style="margin-left:20px;padding-left:20px;">
					<span style="font-size:16px;"><strong>8.</strong> Open the Arduino IDE program again.  Under the 'File' Menu, select 'New' (or press CTRL+N) to create a new sketch called "AVCS_DHT1_DIY_Sensor_v3".  Select the entire contents of this new sketch and delete them so you have a blank text area to paste into.</span>
				</p>

				<p style="margin-left:20px;padding-left:20px;">
					<span style="font-size:16px;">Next, Expand Contents of the code block above - copy the entire contents of the code block here from line number 1 through line number 86.  You can copy the code block to your clipboard more easily by clicking the "Download Raw" button provided by Pastebin, and select all the text on that page &amp; copy it.  Finally, paste the entire code into your sketch in the Arduino IDE (overwriting any contents) and save the sketch (CTRL+S).  Now we can upload the sketch from the Arduino IDE program to the Arduino Nano by pressing the ( </span><img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5441" data-ratio="100.00" data-unique="lfde8md7e" style="height: auto;" width="28" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.cef1e06193b7f118a2b9e457acd1b6b6.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><span style="font-size:16px;"> ) upload button just as we did with the Blink sketch above.  When uploading is done, close the Arduino IDE program and proceed with testing at step 9 below.</span>
				</p>

				<p style="margin-left:20px;padding-left:20px;">
					<span style="font-size:16px;"><span style="color:#e67e22;">If you see any problems in the errors and information window below the sketch when trying to upload and if the title bar over this information window at the bottom of the sketch <strong><em>does not</em></strong> show the words  (</span> </span><img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5458" data-ratio="25.47" data-unique="xynkqq1qt" style="height: auto;" width="106" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.e4582fe6212ccfd99321c2608eb98e0e.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><span style="font-size:16px;"> <span style="color:#e67e22;">) when done, stop and get Help or Support from the links in the </span><strong><a data-smooth-scroll="0" href="#addendum" rel="" target="_self"><span style="color:#e67e22;">Addendum</span></a></strong><span style="color:#e67e22;"> at the bottom of this guide.</span></span>
				</p>

				<p>
					 
				</p>
			</div>

			<div class="vg-wiki-container large right img">
				<div class="vg-callout-box-container large right img">
					<div class="vg-callout-box large right img">
						<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5457" data-ratio="53.85" data-unique="u0akbqz58" style="padding-top:2px;width: 500px; height: auto;" width="682" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.1aedfb216fff09a697c1baeb3faa2007.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><p style="margin-top:4px;padding-top:4px;margin-bottom:-8px;padding-bottom:-8px;">
							 AVCS SENS profile version shown above may differ from latest - image e1
						</p>
					</div>
				</div>
			</div>

			<div class="vg-wiki-container-guide">
				<p style="margin-right:45px;padding-right:45px;">
					<span style="font-size:16px;"><strong>9.</strong> Launch the VoiceAttack program and switch to the AVCS Sensors &amp; Weather Profile (if not already running and loaded).  When voice commands are available, say, "Open the Sensor Menu".  The AVCS SENS Main Menu will pop up.  Press the "OPTIONS" button, and then press the "Sensor Options" button.<br><br>
					In the Sensor Options screen, press the "Test Arduino DHT11 Sensor" button - there will be a voice reply of either "Test Succeeded" or, of course, "Failed".  Upon a successful test, the VoiceAttack Event Log (shown in image e1) will display several text messages, including a sample of the data received such as:<br><br><strong>AVCS-DHT1 Data: [AVCS,22.75,65.00,72.95,73.00,DHT1]</strong></span>
				</p>
			</div>
		</div>

		<div class="vg-wiki-container-guide" style="width:100%;">
			<img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5468" data-ratio="136.92" data-unique="sumh0hp4v" style="margin-left: 8px; padding-left: 8px; height: auto;" width="325" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.05be2618803fa6e91f1ecd24507e3494.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5469" data-ratio="103.80" data-unique="kfq2na5r6" style="margin-left: 16px; padding-left: 16px; height: auto;" width="342" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.724ff3cb8e92669e7c1a31bb3de88fe4.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><img alt="image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="5470" data-ratio="157.54" data-unique="pbg69tp2j" style="margin-left: 16px; padding-left: 16px; height: auto;" width="325" data-src="https://veterans-gaming.com/uploads/monthly_2022_06/image.png.d80744eca022f0bad083e03e3fe76dda.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><div class="vg-wiki-container right medium rounded italic light" style="padding-top:24px;margin-top:24px;">
				<div class="vg-callout-box-container right medium rounded italic light">
					<div class="vg-callout-box right medium rounded italic light bigquotes">
						<p class="vg-wiki-text-unselectable" style="font-size:18px;padding-left:0.5em;">
							<strong><em>DHT Monitoring in AVCS SENS is a<br>
							secondary monitor tied to the Sensor<br>
							and/or Weather Monitor.  If either of<br>
							these are started, DHT Monitoring<br>
							will try to start.  If no DHT sensor is<br>
							detected, indoor weather &amp; sensor<br>
							diagnostic commands will not work.<br>
							If both Sensor &amp; Weather Monitoring<br>
							are turned off while DHT Monitor is on,<br>
							the DHT Monitor will also turn off. </em> </strong>
						</p>
					</div>
				</div>
			</div>
		</div>

		<div>
			 
		</div>

		<div style="font-size:18px;">
			<p style="margin-bottom:-4px;padding-left:8px;">
				<span style="font-size:24px;color:#dba901;"><strong>Congratulations on successfully building an AVCS-DHT1 Sensor!  Enjoy the indoor weather &amp; PC sensor diagnostic voice commands!</strong></span><br><span style="font-size:12px;"><em>*alternatively, if you were not so successful, please see links below in the addendum for help &amp; support on a variety of topics.  I am also happy to provide assistance here if you would like to reply below, or through private message here or on Discord - whatever is preferrable</em></span>
			</p>
		</div>
	</div>
</div>

<div class="vg-wiki-section-jump" id="addendum">
	 
</div>

<div class="vg-wiki-container bottom large round straight dark light-border">
	<div class="vg-callout-box-container bottom large round straight dark light-border">
		<div class="vg-callout-box bottom large round straight dark light-border">
			<p style="font-size:18px;padding-left:0.5em;">
				<u><strong>Addendum - Help &amp; Support for this DIY Arduino Project</strong></u><br><br>
				 If you need help, post up a reply below and I'll answer as soon as I see it.  Otherwise, here are some helpful links pertaining to this project:                                                                    
			</p>

			<div class="focus-mega-footer__columns">
				<div class="focus-mega-footer__column" style="margin-left:24px;padding-left:24px;margin-right:-24px;padding-right:-24px;">
					<h4>
						AVCS Help and Support Links
					</h4>

					<ul class="footerLinks"><li>
							<a href="https://veterans-gaming.com/files/category/77-voiceattack/" rel="" target="_blank">AVCS SENS Profile Download</a>
						</li>
						<li>
							<a href="https://veterans-gaming.com/avcs-wiki/avcs-sensors-weather/" rel="" target="_blank">AVCS SENS Wiki Page</a>
						</li>
						<li>
							<a href="https://discord.gg/xDJUjYQked" rel="external nofollow" target="_blank">AVCS Help Channel on Discord</a>
						</li>
						<li>
							<a href="https://veterans-gaming.com/semlerpdx-avcs/bug-reporting/" rel="" target="_blank">AVCS Bug Reports</a>
						</li>
						<li>
							<a href="https://veterans-gaming.com/index.php?/messenger/compose/&amp;to=639" rel="" target="_blank">Contact SemlerPDX</a><br>
							 
						</li>
					</ul></div>

				<div class="focus-mega-footer__column" style="margin-left:-24px;padding-left:-24px;margin-right:-24px;padding-right:-24px;">
					 
				</div>

				<div class="focus-mega-footer__column">
					<h4>
						Arduino Links
					</h4>

					<ul class="footerLinks"><li>
							<a href="https://www.arduino.cc/en/software" rel="external nofollow" target="_blank">Arduino IDE Download</a>
						</li>
						<li>
							<a href="https://www.arduino.cc/en/Guide" rel="external nofollow" target="_blank">Arduino Guide</a>
						</li>
						<li>
							<a href="https://support.arduino.cc/hc/" rel="external nofollow" target="_blank">Arduino Help Center</a>
						</li>
						<li>
							<a href="https://forum.arduino.cc/" rel="external nofollow" target="_blank">Arduino Forums</a>
						</li>
						<li>
							<a href="https://discord.gg/jQJFwW7" rel="external nofollow" target="_blank">Arduino Discord</a><br>
							 
						</li>
					</ul></div>

				<div class="focus-mega-footer__column" style="margin-left:-24px;padding-left:-24px;margin-right:-24px;padding-right:-24px;">
					 
				</div>

				<div class="focus-mega-footer__column" style="margin-right:12px;padding-right:12px;">
					<h4>
						VoiceAttack Links
					</h4>

					<ul class="footerLinks"><li>
							<a href="https://voiceattack.com/howto.aspx" rel="external nofollow" target="_blank">VoiceAttack Tips &amp; How To</a>
						</li>
						<li>
							<a href="https://voiceattack.com/VoiceAttackHelp.pdf" rel="external nofollow" target="_blank">VoiceAttack Manual</a>
						</li>
						<li>
							<a href="https://voiceattack.com/" rel="external nofollow" target="_blank">VoiceAttack Product Page</a>
						</li>
						<li>
							<a href="https://forum.voiceattack.com/smf/index.php" rel="external nofollow" target="_blank">VoiceAttack Forums</a>
						</li>
						<li>
							<a href="https://voiceattack.com/discord" rel="external nofollow" target="_blank">VoiceAttack Discord</a><br>
							 
						</li>
					</ul></div>
			</div>
		</div>
	</div>
</div>

<div style="font-size:18px;">
	<p style="margin-bottom:-4px;padding-left:24px;">
		<span style="font-size:12px;"><em>"AVCS SENS", including the Profile Package for VoiceAttack, the AVCS SENS Wiki page, the AVCS-DHT1 Sensor and Sticker Label, and this DIY build guide, comprise <a href="https://veterans-gaming.com/semlerpdx/copyright/" rel="" target="_blank">creative works by SemlerPDX</a> shared under <a href="https://creativecommons.org/licenses/by-nc-nd/4.0/" rel="external nofollow" target="_blank">CC BY-NC-ND 4.0</a> March/June 2022<br>
		AIDA64 is not affiliated with AVCS or this DIY project.  Images and text depicting the AID64 program(s), title, logo, or other elements belonging to AIDA64 or FinalWire Ltd. are used only for educational and/or instructional purposes, relating to demonstration &amp; use, in this DIY project guide.<br>
		AIDA64 is a Registered Trademark of <a href="https://www.aida64.com/" rel="external nofollow" target="_blank">FinalWire Ltd.</a> ©2010-2023 All rights reserved.</em></span>
	</p>
</div>
]]></description><guid isPermaLink="false">45</guid><pubDate>Thu, 02 Feb 2023 22:23:17 +0000</pubDate></item><item><title>AVCS CORE Profile Framework for VoiceAttack</title><link>https://veterans-gaming.com/blogs/entry/41-avcs-core-profile-framework-for-voiceattack/</link><description><![CDATA[
<p>
	 
</p>

<p style="text-align: center;">
	<img alt="AVCS_CORE_Title_QUARTER.png" class="ipsImage ipsImage_thumbnailed" data-fileid="2776" data-unique="dxcpthquz" style="border:0; width: 400px; height: auto;" data-src="https://veterans-gaming.com/uploads/monthly_2020_08/AVCS_CORE_Title_QUARTER.png.43b3caa65a8c1970843345c6c2db5d11.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"></p>

<p style="text-align: center;">
	<span style="color:#dba901;"><span style="font-size:16px;">Profile for  VoiceAttack<br>
	by =VG= SemlerPDX</span></span>
</p>

<p>
	 
</p>

<p>
	<strong><span style="color:#dba901;"><span style="font-size:24px;">Description:</span></span></strong>
</p>

<p>
	<span style="font-size:18px;">AVCS CORE is the new framework for any VoiceAttack profile I release in future, and provides awesome tools to any VoiceAttack user.  It can be used alone and by itself, or as a base to build a VoiceAttack profile around, including its functions in your own creations.  The Quick Command Creator cannot possibly replace the very easy and very powerful voice commands we can create through VoiceAttack in the standard fashion, but allow users to quickly create simple keypress commands for a phrase, or even advanced multi-step macros that can use a limited selection of common VoiceAttack actions.  The very fun Voice Authorization System lets us create passphrases that we can gate a QCC Command behind, for example, <span style="color:#d35400;">"Execute self destruct mode"</span>, <span style="color:#2980b9;">'command code required!'</span>, <span style="color:#d35400;">"Picard 4 7 Alpha Tango"</span>, <span style="color:#2980b9;">'confirmed'</span>.<br><br>
	I've even created a special home page and forum section here at the VG website, and a channel in the <a href="https://veterans-gaming.com/discord/" rel="">VG Discord</a>, to provide Help &amp; Support for the many users of my profiles - with voice controlled bug reporting to make it easy to let me know when I need to fix something.<br><br><br><br>
	As I plan to release more and more VoiceAttack profiles for various games, I needed a framework to standardize my methods, and to help keep profiles used by other people up to date and in proper working order.  I never quite expected such a large user base, and with that I've decided to offer much more direct support through in-profile options menus and help &amp; support options that tailor themselves to whatever AVCS4 profile is active.  By checking for just 8 bytes of an update number on the VG website when loading, AVCS CORE can provide a pop-up choice for users to view the latest changelog, apply the latest patch (or open the website to download a new major update version), or just postpone until later.  I've even included an option to turn off minor patch update prompts, and to roll back to the last version if desired!</span><br><br><br><br><span style="font-size:18px;">The purpose of this profile is to function as the backbone of any AVCS4 game profiles I release, such as the current AVCS4 Falcon BMS Radios profile, and provide users with a host of profile and update controls.  When AVCS CORE is first loaded by VoiceAttack, it will initialize itself and any other AVCS4 Profile that is switched to, bringing its full list of commands into the end game profile.  This includes the Quick Command Creator and Voice Authorization System, with new commands or codes saved to the Active Profile's save file.  Any other AVCS4 Profile that gets switched to will clear and re-load its own QCC Commands or VAS Passphrases (if any), working out of it's own save file as well.<br><br>
	Included is the AVCS CORE profile package that includes the AVCS CORE Profile designed for VoiceAttack, as well as the optional AVCS CORE Framework blank Template Profile for VoiceAttack profile builders.  To keep AVCS CORE startup fast for any AVCS4 Profiles, commands cannot be added directly to the CORE Profile, so the Template is available, and can include all of the functionality of AVCS CORE by including the CORE profile commands through its profile options.  This profile will have its own save file and config files folder in the VoiceAttack Apps folder along side other AVCS Profiles data.  Since AVCS CORE needs to load before any other AVCS4 Profile (including the AVCS4 Template Profile), it will be updated the least, and has been tested the most over a year and a half of development.  I will continue to support all AVCS4 Profiles through AVCS CORE and its powerful profile control options.<br><br><br><br>
	Say goodbye to the keyboard, and enjoy the immersion! Cheers!<br>
	  </span>
</p>

<p>
	<strong><span style="color:#dba901;"><span style="font-size:24px;">Features:</span></span></strong>
</p>

<p style="text-align: center;">
	<img alt="AVCS_CORE_Info1.png" class="ipsImage ipsImage_thumbnailed" data-fileid="2777" data-unique="gxlvion11" style="border:0; width: 600px; height: auto;" data-src="https://veterans-gaming.com/uploads/monthly_2020_08/AVCS_CORE_Info1.png.7054d537d88a9a2bb62b855fa3e8daf2.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><img alt="AVCS_CORE_Info2.png" class="ipsImage ipsImage_thumbnailed" data-fileid="2778" data-unique="ydmo4poy2" style="border:0; width: 600px; height: auto;" data-src="https://veterans-gaming.com/uploads/monthly_2020_08/AVCS_CORE_Info2.png.215b3a3fef0552e037772c3f0f27c070.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><img alt="AVCS_CORE_Info3.png" class="ipsImage ipsImage_thumbnailed" data-fileid="2779" data-unique="t5uv24czr" style="border:0; width: 600px; height: auto;" data-src="https://veterans-gaming.com/uploads/monthly_2020_08/AVCS_CORE_Info3.png.c69b258aed0148607f779ff87c028e2f.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><br><span style="font-size:12px;">*The optional Push-To-Talk mode is disabled by default.  Say, "Turn On Push To Talk Mode" to enable</span>
</p>

<p style="text-align: center;">
	<br>
	 
</p>

<p>
	<strong><span style="color:#dba901;"><span style="font-size:24px;">Download: </span></span></strong><span style="color:#dba901;"><span style="font-size:24px;">(</span></span><span style="font-size:24px;"><a href="https://veterans-gaming.com/index.php?/files/file/37-avcs-core-profile-framework-for-voiceattack/" rel=""><span style="color:#d35400;">Click Here</span></a></span><span style="color:#dba901;"><span style="font-size:24px;">)</span></span>
</p>

<p>
	 
</p>

<p>
	<span style="color:#d35400;">Tips for this profile:</span><br><br><span style="color:#d35400;">Please use the voice command </span><span style="color:#dba901;">"Open Help and Support Menu"</span><span style="color:#d35400;"> to communicate any bug reports.  These help menus can be expanded without new profile versions, so suggestions are welcome.<br>
	Thank you for checking out AVCS CORE for VoiceAttack!</span>
</p>

<details><summary>(click here to view tips)</summary><ul>
<li>
			<font color="#d35400">*On first import, you should say, "Initialize Profile" - after first time, this is automatic.  Any attempt to use commands before this will trigger auto-initialization.</font>
		</li>
		<li>
			<strong><font color="#d35400">If you get errors from my profile, Launch VoiceAttack and open Options (wrench icon in lower right):</font></strong>
		</li>
		<li>
			<font color="#d35400">  -Under last tab on top, System/Advance, check box next to "Use Nested Tokens" as in image 1 below</font>
		</li>
		<li>
			<font color="#d35400">  -Unless absolutely required, during testing it's recommended to uncheck "Allow command segment info for composite commands"</font><br>
			 
		</li>
		<li>
			<font color="#d35400">Open the profile - if not already done, group commands by category and consolidate multi-part commands as in image 2 &amp; 3 below</font>
		</li>
		<li>
			<font color="#d35400">Click on the Description tab at the top to help sort commands further (see image 4)</font>
		</li>
		<li>
			<font color="#d35400">Read a semicolon ";" as the word "or" and look at long commands as having many options like saying "2;Two;Too;To;Wingman"  (read as "2 -or- Two -or- Too -or- To -or- Wingman")</font>
		</li>
	</ul>
<p>
		<img alt="image 1" class="ipsImage ipsImage_thumbnailed" data-fileid="1920" data-unique="w3naef92m" style="border:0; width: 227px; height: auto;" data-src="https://veterans-gaming.com/uploads/monthly_2019_05/5cec7d684f085_image1.PNG.0f37cbfce399315b9e78fb446b9a4039.PNG" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><img alt="image 2" class="ipsImage ipsImage_thumbnailed" data-fileid="1921" data-unique="zoaj7juu7" style="border:0; width: 457px; height: auto;" data-src="https://veterans-gaming.com/uploads/monthly_2019_05/5cec7d68b4d2a_image2.PNG.f969e875663d8c11a464f4f82b31f3c5.PNG" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><img alt="image 3" class="ipsImage ipsImage_thumbnailed" data-fileid="1922" data-unique="cgh0byph8" style="border:0; width: 384px; height: auto;" data-src="https://veterans-gaming.com/uploads/monthly_2019_05/5cec7d68e7d0e_image3.PNG.58e69a18bf61f0a582c7332a0b6ddd3c.PNG" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><img alt="image 4" class="ipsImage ipsImage_thumbnailed" data-fileid="1923" data-unique="bhdimtei3" style="border:0; width: 317px; height: auto;" data-src="https://veterans-gaming.com/uploads/monthly_2019_05/5cec7d6954d5b_image4.PNG.4850fef4ca2f7397fa013fe1045f0651.PNG" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"></p>

	<p>
		 
	</p>
</details><p>
	 
</p>

<p>
	<strong><span style="color:#dba901;"><span style="font-size:24px;">Commands Reference:</span></span></strong>
</p>

<p style="text-align: center;">
	 
</p>

<p>
	 
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="2186" href="//i.imgur.com/Trf3qSq.png" rel="external nofollow"><img alt="CommRef-AVCS4-CORE-25.png" class="ipsImage" data-fileid="2780" data-unique="o03164psf" style="border:0; width: 750px; height: auto;" data-src="https://i.imgur.com/Trf3qSq.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"></a><br><br><span style="color:#e67e22;"><strong><span style="font-size:20px;">Say, 'Open the Command Reference', anytime to view available voice commands:</span></strong></span>
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="PNG" data-fileid="4172" href="https://veterans-gaming.com/uploads/monthly_2021_05/avcs_core_commref.PNG.d35ab20a0e2becbdb0f4d230296dada6.PNG" rel=""><img alt="avcs_core_commref.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="4172" data-ratio="61.20" data-unique="pq0cusrxf" style="height: auto;" width="700" data-src="https://veterans-gaming.com/uploads/monthly_2021_05/avcs_core_commref.PNG.d35ab20a0e2becbdb0f4d230296dada6.PNG" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"></a>
</p>

<p>
	 
</p>

<p>
	 
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			 
		</p>

		<p style="color:#bfbfbf; font-size:14px; text-align:start">
			<strong style="color:#e67e22; font-size:20px; text-align:start">v1.11 Major Profile Update (public release)</strong>
		</p>

		<p style="color:#bfbfbf; font-size:14px; text-align:start">
			<strong><span style="color:#dba901"><span style="font-size:16px">Please download and import this updated final version!  Link below and updated in the main post above!  AVCS CORE v1.11 will also import a new 'AVCS4 USER PROFILE TEMPLATE (v1.0)' - this template has not been changed from before.  If you had AVCS CORE v1.0 and that template profile already, you can delete this duplicate 'AVCS4 USER PROFILE TEMPLATE (v1.0)</span></span></strong>
		</p>

		<p style="color:#bfbfbf; font-size:14px; text-align:start">
			<span style="color:#f1c40f; font-size:14px; text-align:start">*Follow instructions during update to import previous version Save Files and to uninstall and delete the previous AVCS CORE v1.0 profile and config files</span>
		</p>

		<p style="color:#bfbfbf; font-size:14px; text-align:start">
			I had hoped that AVCS CORE v1.0 would be the final version, but I had not anticipated issues with Joystick POV directional buttons in the Push-To-Talk system, and I had not included a handy way to delete saved PTT buttons or keys.  With this update, I'm happy to announce that AVCS CORE is now feature stable and (as far as I know) 100% bug free!  I keep throwing every curveball and edge case I can think up at it, even including the update or new version profile import process, and everything just works.  I don't have anything more to add, and there is nothing left to take away.
		</p>

		<p style="color:#bfbfbf; font-size:14px; text-align:start">
			As the 'hub' profile for my AVCS4 BMS Radios profile, and others I plan to release in time, it has always been my goal to have AVCS CORE as an unchanging stable framework that I can use as a platform to support end-game profiles indefinitely.  Eventually, I plan to return to AVCS CORE to create a separate version packed with well designed and themed user interfaces for all options and menus which presently use simple VoiceAttack 'Get user input' actions, and while still supporting the original v1 simple 'get user input' interface version(s) which will remain free for all users.  The artwork and GUI coding will take some time, and I have many other projects on my plate, so I don't expect to be working on AVCS CORE again until late 2022 or even later.
		</p>

		<p style="color:#bfbfbf; font-size:14px; text-align:start">
			I use AVCS CORE every day myself, with the included AVCS Template profile as my 'main' Windows voice control system, and am very glad to have this project version wrapped up for now.
		</p>

		<p style="color:#bfbfbf; font-size:14px; text-align:start">
			Thank you all again for all the support and for the <a href="https://www.buymeacoffee.com/semlerpdx" rel="external nofollow">coffees</a>!  Cheers! <span><span><img alt=":coffee:" data-emoticon="true" loading="lazy" src="https://veterans-gaming.com/uploads/emoticons/smileys-coffee-826223.gif" title=":coffee:"></span></span>
		</p>

		<pre class="ipsCode" id="ips_uid_2320_14">Public Release AVCS CORE v1.11 Changelog Oct-1-2021

Fixes/Improvements:

	-Updated minimum required version of VoiceAttack to 1.8.9
	-Created new system in Push-To-Talk Mode for Joystick POV (4-way directionals only)
	-Created Delete system in PTT Mode to allow removal of any PTT entry already set
	-Fixed PTT Buttons Display List not retrieving correct keyboard key from keycode # (showing 'square' symbol instead)
	-Fixed CORE Config #2 (TTS file) error near 'AlreadyOn' phrase, CRLF (NewLine) missing, merging the variables into one
    </pre>

		<p>
			 
		</p>
	</div>
</blockquote>

<p>
	 
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="" data-ipsquote-contentapp="blog" data-ipsquote-contentclass="blog_Entry" data-ipsquote-contentcommentid="475" data-ipsquote-contentid="41" data-ipsquote-contenttype="blogs" data-ipsquote-timestamp="1621144972" data-ipsquote-userid="639" data-ipsquote-username="=VG= SemlerPDX">
	<div class="ipsQuote_citation">
		On 5/15/2021 at 11:02 PM, =VG= SemlerPDX said:
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p style="text-align: center;">
			<strong><span style="color:#dba901;"><span style="font-size:20px;">FINAL RELEASE TO v1.0</span></span></strong>
		</p>

		<p>
			<strong><span style="color:#dba901;"><span style="font-size:16px;">Please download updated final version!  Link below and updated in the main post above!  You don't have to remove the old 0.92 beta profile, but it is recommended to not use both at the same time or variables may get messed up.  Thanks to everyone for helping to finish up final testing and for your patience this year as I've been so busy with this website!</span></span></strong>
		</p>

		<p>
			I cannot believe I'm finally here!  I've been working on this vision of a project for over a year and a half, and came up with the idea after the first "day one patch" due to a typo in one of my public voice command profiles.  I dreamed of a profile hub that could help manage any game profile I release, as well as work like a template for VoiceAttack profile builders to use for their own projects, including AVCS CORE functions and methods in an included Template Profile.
		</p>

		<p>
			Several interesting voice control systems are used by me in various games, so it only made sense to flesh those out and place them in a central profile, then release game profiles which include AVCS CORE profile commands into themselves.  If I update a command system inside AVCS CORE, users only have to download that one profile, and likewise, I don't have to place those systems into each game profile and update each profile when a common command system is changed.  Additionally, since I place so many of my operational variables in flat text files, it is very easy to edit or update exactly how the hard set systems in the profile operate, and allowing 'patch' updates through these configuration files without forcing a new profile to be downloaded and imported.  And of course, through AVCS CORE, I can notify users of major profile updates requiring a new download, with the added bonus of special initialization logic to detect a new profile version and offer to import the previous save file containing user profile settings, or even delete the previous version configuration and/or save files.
		</p>

		<p>
			With this final public release of AVCS CORE, I can even add new voice commands through patch updates between major profile updates if needed, to further minimize the need to force new profile download and imports for minor changes.  So long as AVCS CORE command systems do not change, it should be very easy to support additions to games through game updates, or even modify and add to existing commands with new alternate phrasings to help maintain my goal of conceptual command use, "any way you say it".
		</p>

		<p>
			<br><span style="color:#e67e22;"><strong>Huge thanks to everyone who helped out with comments, feedback, bug reports, and testing</strong></span> - there is no way I could have come this far without all the support and I just can't thank everyone enough!  Special thanks for the <a href="https://www.buymeacoffee.com/semlerpdx" rel="external nofollow" target="_blank">coffees</a>!  I'm looking forward to using this framework in the coming months and years to release AVCS4 game profiles for plenty of titles, the end of this one project makes possible so many more!<span><img alt=":coffee:" data-emoticon="true" src="https://veterans-gaming.com/uploads/emoticons/smileys-coffee-826223.gif" title=":coffee:"> </span><br>
			 
		</p>

		<p>
			Here's a copy of the latest changelog entry:
		</p>

		<pre class="ipsCode" id="ips_uid_8093_8">Public Release AVCS CORE v1.0 Changelog May-11-2021

New Commands:
 -"Open the Command Reference" (or variations - open up-to-date command reference page online, or last updated reference file locally if offline)
 -"Set a Computer Name" (or variations - set a 'Computer' Assistant name for AVCS PTT mode, say before any command to wake listening temporarily)
 -"Set a Push to Talk Button" (or variations - set up to 6 total keyboard, mouse, or joystick buttons through automated script - just press when asked)

Fixes/Improvements:
 -Improved PTT (Push to Talk) Mode with voice controlled automated key/button detection during "Set" command
 -Added PTT Modes (chosen during "Set" command) for game/QCC commands only (default), or toggle VoiceAttack Global Listening Mode
 -Added PTT Mode 'Wake' by 'Computer' Assistant Name - set a name to say before any existing command to temporarily wake Global Listening Mode
 -Added Profile Misc. Commands to QCC, allows new commands or macros to be added via Live Update Patch Fix to CORE or AVCS4 profiles between major updates if needed
 -Added requirement to Include AVCS CORE Profile Commands through any used AVCS4 Profile Options, instructions provided during first-time init
 -Added optional File Explorer GUI to select item for QCC Advanced Commands 'Play a Sound File' and 'Open File Shortcut or Program' actions
 -Added option to Save File Options Menu to import save file (config settings, QCC commands, or all) from existing Profiles (for any game) or from file path entered
 -Fixed When setting Preferred, found duplicates of a non-AVCS profile (created unique list for AVCS and non-AVCS profile list choices)
 -Fixed QCC commands set in CORE persisted into next profile, should have been 'wiped' and unavailable in different AVCS profile
 -Fixed International Decimals - All Decimal Variables finally compatible for international users via cultural identification fix during init
 -Fixed infinite loop on Minor Version Rollback toggle and version display errors following toggle
 -Fixed many more minor issues throughout, from options menus to get-input pop-up boxes including direct profile name choice instead of shortname ID and version number ID</pre>

		<p>
			Any problems or new bugs, or brilliant ideas, feel free to drop some feedback!  Cheers! <img alt=":drinks:" data-emoticon="1" src="https://veterans-gaming.com/uploads/emoticons/drinks.gif" title=":drinks:"> 
		</p>
	</div>
</blockquote>

<p>
	 
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			<span style="color:#e67e22;"><span style="font-size:20px;"><strong>v0.92b Major Profile Update (beta)</strong></span></span><br><br>
			I have fixed the issue with international decimal separators, and everything should work well now for all users.  Initialization optimization has been a large focus of this update, especially when using CORE alongside AVCS4 Falcon BMS Radios.  Users will need to download this new version of the profile to take advantage of the updates and fixes listed below.<br><br>
			Thanks for your patience during the beta test rounds here, again, the end goal for AVCS CORE is to be a stable un-changing profile that can handle profile management for any new AVCS4 game profile I create in the future without needing updates itself, and I think we're well on our way to that.  Cheers!<br><br><span style="color:#f1c40f;">Please be sure to download the </span><a href="https://veterans-gaming.com/index.php?/files/file/35-avcs4-voice-control-radios-for-falcon-bms/" rel=""><span style="color:#3498db;">AVCS4 Falcon BMS v1.3.92b Profile</span></a><span style="color:#f1c40f;"> (if used), this updated changed the AVCS CORE function commands inside AVCS4 BMS, too...</span>
		</p>

		<p>
			 
		</p>

		<pre class="ipsCode" id="ips_uid_4146_9">





BETA Release AVCS CORE v0.92 Changelog Dec-6-2020

	! USER NOTICE!
	-This is a major profile update, users of v0.91b must download the new v0.92 beta test profile
		-(AVCS CORE profile version 0.91b will be retired in 60 days)

Fixes/Improvements:
 -Improved AVCS_CORE profile initialization optimized again for decreased load time - most noticeable on first use
 -Fixed All Decimal Variables now compatible for international users via cultural invariant token "DECINV"
 -Fixed infinite loop on Minor Version Rollback toggle and version display errors following toggle
</pre>
	</div>
</blockquote>

<p>
	 
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			<span style="color:#e67e22;"><span style="font-size:20px;"><strong>v0.91b Major Profile Update (beta)</strong></span></span><br><br>
			Due to some initial issues right off the bat, it seems the concept of having some AVCS CORE functions outside the profile itself as part of an App for VoiceAttack would have included a bit more work, but more importantly increased the profile package size from around 1MB to over 25MB, and it's just not worth it.  The idea was specifically for things like my Save File Sort function that orders the lines of the save file into a readable alphanumeric sorting, where AVCS4 module specific entries were properly grouped together (like saved Quick Commands or VAS Passphrases), and any new AVCS4 profile such as Elite Dangerous could introduce new sorting rules by simply including a new version of the AVCS_CORE App for VoiceAttack in it's profile package.  This would have removed the need to update the base AVCS CORE profile that all AVCS4 game profiles rely upon anytime I wanted to modify those game-specific functions.<br><br>
			I've done away with the app completely now, and recreated the simple functions like sort and initialize as inline functions for VoiceAttack.  This requires everyone to download a new version of AVCS CORE and the AVCS4 Falcon BMS Radios (beta) profile if currently used.<br><br>
			Thanks for your patience during the beta test rounds here, the end goal for AVCS CORE is to be a stable un-changing profile that can handle profile management for any new AVCS4 game profile I create in the future without needing updates itself, and I think we're well on our way to that.  Cheers!<br><br><span style="color:#f1c40f;">Please be sure to download the </span><a href="https://veterans-gaming.com/index.php?/files/file/35-avcs4-voice-control-radios-for-falcon-bms/" rel=""><span style="color:#3498db;">AVCS4 Falcon BMS v1.3.91b Profile</span></a><span style="color:#f1c40f;"> (if used), this updated changed the AVCS CORE function commands inside AVCS4 BMS, too...</span>
		</p>

		<p>
			 
		</p>

		<pre class="ipsCode" id="ips_uid_1722_14">





BETA Release AVCS CORE v0.91 Changelog Aug-22-2020

	! USER NOTICE!
	-This is a major profile update, users of v0.90b must download the new v0.91 beta test profile
		-(AVCS CORE profile version 0.90b will be retired in 30 days)

Fixes/Improvements:
 -AVCS_CORE App removed in place of internal systems - was too slow, and had compatibility issues
</pre>

		<p>
			<br><span style="color:#2980b9;">___ (previous version changelogs) ___</span>
		</p>

		<details><summary>(click here to view previous changelogs)</summary><p>
				 
			</p>

			<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
				<div class="ipsQuote_citation">
					Quote
				</div>

				<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
					<pre class="ipsCode" id="ips_uid_1722_17">















BETA Release v0.90 Changelog Aug2020

New Commands:
 -AVCS CORE Commands Included into AVCS4 User Template Profiles so users can add commands, adding to CORE increases its load time
 -"Create a new Voice Authorization Phrase" and other included commands in Voice Authorization System
 -VAS can allow QCC commands to be locked behind a required authorization phrase as set by users, in up to 10 weighted levels
 -Integerated Bug Reporting and debugging options for easy troubleshooting
 -Versioning allows for Mutiple prior versions (reinitialization required) for easy profile version rollback if desired
 -Included UPDATE command to allow users to import previous saved user settings and saved Quick Commands from previous version of profile
 -Full profile control through command, "Open CORE Options Menu"
 -Better user support through command, "Open Help and Support Menu"  (will expand in time)
 -User settings save file control through command, "Open Save File Menu"  (includes save file backup and restore system)
 -...and much more (see posts at avcs homepage)

Fixes/Improvements:
 -Set First Use to present user with Get Choice box for Profile Update Notifications and Preferred Profile (auto-switch) choice
 -Setting 'CurrentBackupIndex' and 'SaveFileBackupCount' to 'Not Set' inside F_SFS_LOAD_ALL  (was getting corrupted in save file)
 -Separated 'new_profiles.txt' file from AVCS4 profiles and AVCS CORE profiles to handle two imports before first time run/initialization of either
 -Added Duplicate Profile check, informs user of non-functional AVCS profiles (if ending in 'dash number' such as '-1')
 -Edited Preferred Profile command to allow for any user profile to be set to be auto-switched to after AVCS CORE finishes initializing
 -Included VoiceAttack Profile Builders Template profiles for use of AVCS CORE as a standalone profile framework for any game

___

BETA Release v0.80 Changelog July2020

New Commands:
 -"Add a new Voice Command" and others in new Quick Command Creator system
 - QCC can be used to create Simple Keypress Commands or Advanced Multi-Step Macros with a limted selection of common VoiceAttack actions
 -"Edit Keypress Timings" to open options menu to set custom timings

Fixes/Improvements:
 -AVCS CORE Profile and Updates Management systems allow version control and user notification of updates (minor or major)
 -Full Profile Update Control added with user choice, only downloads if allowed by user (only checks 8 bytes of a version number before that)
 -Profile Updates set to allow choice for majority of fixes/changes to occur without new VoiceAttack Profile download/import  *called "LIVE UPDATES"
 -Physical Profile Updates set to allow previous versions to remain installed without conflict, and also import/uninstall previous version files  *called "MAJOR UPDATES"
 -Fixed integer/decimal recognition in Save File system "LOAD_ALL" command
 -Set most profile variables to config files in VA Apps Folder (edit with "Open Advanced Core Options" command)
 -Set most commands to Text Variables, read from config files</pre>

					<p>
						 
					</p>
				</div>
			</blockquote>
		</details><p>
			 
		</p>
	</div>
</blockquote>

<p>
	 
</p>
]]></description><guid isPermaLink="false">41</guid><pubDate>Wed, 20 Oct 2021 20:39:02 +0000</pubDate></item><item><title>AVCS4 - How to Control Falcon BMS 4.34 In-Game Radios with Voice Commands</title><link>https://veterans-gaming.com/blogs/entry/31-avcs4-how-to-control-falcon-bms-434-in-game-radios-with-voice-commands/</link><description><![CDATA[
<p>
	*Originally, this was designed for Falcon BMS version 4.34 - since then, it has always been and will continue to be updated to work with the latest version of Falcon BMS. Pro tip: never include a game version in URL's or graphics <img alt=";)" data-emoticon="true" height="20" src="https://veterans-gaming.com/uploads/emoticons/default_wink.png" srcset="https://veterans-gaming.com/uploads/emoticons/wink@2x.png 2x" title=";)" width="20"></p>

<p>
	<br>
	 
</p>

<p style="text-align: center;">
	<img alt="AVCS4_BMS_Title_QUARTER.png" class="ipsImage ipsImage_thumbnailed" data-fileid="1909" data-unique="eiq28zkje" style="border:0; width: 400px; height: auto;" data-src="https://veterans-gaming.com/uploads/monthly_2019_05/AVCS4_BMS_Title_QUARTER.png.18e129ca227d7d752147b25631b570fe.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"></p>

<p style="text-align: center;">
	<span style="color:#dba901;"><span style="font-size:16px;">Profile for  VoiceAttack<br>
	by =VG= SemlerPDX</span></span>
</p>

<p>
	 
</p>

<p>
	<strong><span style="color:#dba901;"><span style="font-size:24px;">Description:</span></span></strong>
</p>

<p>
	<span style="font-size:18px;">These commands use VoiceAttack to translate the in-game on-screen radio menus from AWACS through Tanker into natural and intelligent voice command phrases that will fire keypress macros to help keep hands on the throttle and stick, and maintain immersion.  As an additional option, these commands can be locked behind a push-to-talk mode bound to your UHF/VHF transmit buttons in-game, allowing any other VoiceAttack command unrestricted access if needed, while still restricting these BMS radio command macros.  Finally, this single advanced control profile is extremely easy to edit or integrate into other profiles.</span>
</p>

<p>
	<span style="font-size:18px;">At VETERANS-GAMING, we fly with friends or AI Pilots, or a mix of both on our 24/7 Public Korean Campaign in Falcon BMS. We may go out with an AI wingman only to have a friend take their place mid-flight.  For this reason and others, I created this VoiceAttack profile based around restricting when the computer can execute keypress macros that match voice phrases, having to first check if that pilot was set to a human pilot and therefore disregard commands for that pilot.<br><br>
	Thanks to user requests during the beta, there is now an optional mode to reverse the Human Pilots system, to assume all pilots are humans unless told otherwise, and also a system to choose a different keyboard layout than QWERTY.  I have also added an optional Audio Feedback Mode to play a short radio cue sound when a command is successfully recognized.</span>
</p>

<p>
	<br><span style="font-size:18px;">Included is a single profile that handles every callsign and radio command variation in Falcon BMS, with instructions on how to add any custom callsigns to the single profile. The focus of this profile is only on the in-game Radio Menus, and creating an immersive interaction layer through VoiceAttack that is easy to manage and update, or integrate into other Voice Control systems for Falcon BMS.  My goal was an intuitive system, so there is no user manual - only a few infographics and quick reference pic of all the radio commands.  I personally keep that final pic on my tablet for reference when flying, to find radio commands I seldom used in the past when they were more difficult to access while busy with HOTAS in the pit. </span>
</p>

<p>
	<br><span style="font-size:18px;">Say goodbye to the keyboard, and enjoy the immersion! Cheers!<br>
	  </span>
</p>

<p>
	<strong><span style="color:#dba901;"><span style="font-size:24px;">Features:</span></span></strong>
</p>

<p style="text-align: center;">
	<img alt="GTB-BMS-Info1c_QUARTER.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="1911" data-unique="tbw6f7y2m" style="border:0; width: 600px; height: auto;" data-src="https://veterans-gaming.com/uploads/monthly_2019_05/GTB-BMS-Info1c_QUARTER.gif.4127c0d995486e8c20eab974f5664050.gif" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><img alt="GTB-BMS-Info2c_QUARTER.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="1912" data-unique="yf4jvl8ms" style="border:0; width: 600px; height: auto;" data-src="https://veterans-gaming.com/uploads/monthly_2019_05/GTB-BMS-Info2c_QUARTER.gif.1ca54671ea43d7627909e074e7544cac.gif" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><img alt="GTB-BMS-Info3c_QUARTER.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="1913" data-unique="lb2hscinj" style="border:0; width: 600px; height: auto;" data-src="https://veterans-gaming.com/uploads/monthly_2019_05/GTB-BMS-Info3c_QUARTER.gif.19559f11b2726614341d7af1c1557fff.gif" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><br><span style="font-size:12px;">*Push-To-Talk mode disabled by default.   Say, "Turn On Push To Talk Mode" to enable</span>
</p>

<p>
	 
</p>

<p>
	<strong><span style="color:#dba901;"><span style="font-size:24px;">Download: </span></span></strong><span style="color:#dba901;"><span style="font-size:24px;">(</span></span><span style="font-size:24px;"><a href="https://veterans-gaming.com/index.php?/files/file/35-avcs4-voice-control-radios-for-falcon-bms/" rel=""><span style="color:#d35400;">Click Here</span></a></span><span style="color:#dba901;"><span style="font-size:24px;">)</span></span>
</p>

<p>
	 
</p>

<p>
	<span style="color:#d35400;">Tips for this profile:</span>
</p>

<details><summary>(click here to view tips)</summary><ul>
<li>
			<font color="#d35400">*On first import, you should say, "Initialize Profile" - after first time, this is automatic.  Any attempt to use commands before this will trigger auto-initialization.</font>
		</li>
		<li>
			<strong><font color="#d35400">If you get errors from my profile, Launch VoiceAttack and open Options (wrench icon in lower right):</font></strong>
		</li>
		<li>
			<font color="#d35400">  -Under last tab on top, System/Advance, check box next to "Use Nested Tokens" as in image 1 below</font>
		</li>
		<li>
			<font color="#d35400">  -Unless absolutely required, during testing it's recommended to uncheck "Allow command segment info for composite commands"</font><br>
			 
		</li>
		<li>
			<font color="#d35400">Open the profile - if not already done, group commands by category and consolidate multi-part commands as in image 2 &amp; 3 below</font>
		</li>
		<li>
			<font color="#d35400">Click on the Description tab at the top to help sort commands further (see image 4)</font>
		</li>
		<li>
			<font color="#d35400">Read a semicolon ";" as the word "or" and look at long commands as having many options like saying "2;Two;Too;To;Wingman"  (read as "2 -or- Two -or- Too -or- To -or- Wingman")</font>
		</li>
	</ul>
<p>
		<img alt="image 1" class="ipsImage ipsImage_thumbnailed" data-fileid="1920" data-unique="w3naef92m" style="border:0; width: 227px; height: auto;" data-src="https://veterans-gaming.com/uploads/monthly_2019_05/5cec7d684f085_image1.PNG.0f37cbfce399315b9e78fb446b9a4039.PNG" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><img alt="image 2" class="ipsImage ipsImage_thumbnailed" data-fileid="1921" data-unique="zoaj7juu7" style="border:0; width: 457px; height: auto;" data-src="https://veterans-gaming.com/uploads/monthly_2019_05/5cec7d68b4d2a_image2.PNG.f969e875663d8c11a464f4f82b31f3c5.PNG" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><img alt="image 3" class="ipsImage ipsImage_thumbnailed" data-fileid="1922" data-unique="cgh0byph8" style="border:0; width: 384px; height: auto;" data-src="https://veterans-gaming.com/uploads/monthly_2019_05/5cec7d68e7d0e_image3.PNG.58e69a18bf61f0a582c7332a0b6ddd3c.PNG" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><img alt="image 4" class="ipsImage ipsImage_thumbnailed" data-fileid="1923" data-unique="bhdimtei3" style="border:0; width: 317px; height: auto;" data-src="https://veterans-gaming.com/uploads/monthly_2019_05/5cec7d6954d5b_image4.PNG.4850fef4ca2f7397fa013fe1045f0651.PNG" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"></p>

	<p>
		 
	</p>
</details><p>
	 
</p>

<p>
	<strong><span style="color:#dba901;"><span style="font-size:24px;">Commands Reference:</span></span></strong>
</p>

<p style="text-align: center;">
	 
</p>

<p style="text-align: center;">
	<img alt="OptionsCommands_QUARTER.png" class="ipsImage ipsImage_thumbnailed" data-fileid="2102" data-unique="izajmkx9w" style="border:0; width: 700px; height: auto;" data-src="https://veterans-gaming.com/uploads/monthly_2019_10/OptionsCommands_QUARTER.png.43ac072cd2300e41d08c7bc2175ca917.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"></p>

<p style="text-align: center;">
	<img alt="HumansListCommands_QUARTER.png" class="ipsImage ipsImage_thumbnailed" data-fileid="1914" data-unique="jtc0qb7bs" style="border:0; width: 700px; height: auto;" data-src="https://veterans-gaming.com/uploads/monthly_2019_05/HumansListCommands_QUARTER.png.608fd7966f4d8acc3ce3556e9f021f18.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"><br><span style="color:#e67e22;"><strong><span style="font-size:16px;">*Replace the word "Human" with "Computer" when All-Humans Mode is ON</span></strong></span><br><span style="color:#e67e22;"><strong><span style="font-size:16px;">Normally, this profile assumes all pilots are Computers, use All-Humans Mode to invert this</span></strong></span><br>
	 
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="2186" href="https://veterans-gaming.com/uploads/monthly_2019_12/RadioMenusReference_FULL_v1.2.png.1e4e402041893bd80ef90bc59dc2860d.png" rel=""><img alt="RadioMenusReference_FULL_v1.2.png" class="ipsImage ipsImage_thumbnailed" data-fileid="2186" data-unique="a4lj0qbwm" style="height: auto;" data-src="https://veterans-gaming.com/uploads/monthly_2019_12/RadioMenusReference_FULL_v1.2.thumb.png.137cb92441f6939f06276356787da6d6.png" src="https://veterans-gaming.com/applications/core/interface/js/spacer.png"></a><br><br><span style="color:#e67e22;"><strong><span style="font-size:20px;">Say, 'Open the Command Reference', anytime to view available voice commands</span></strong></span><br>
	 
</p>

<p>
	 
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="" data-ipsquote-contentapp="blog" data-ipsquote-contentclass="blog_Entry" data-ipsquote-contentcommentid="474" data-ipsquote-contentid="31" data-ipsquote-contenttype="blogs" data-ipsquote-timestamp="1621144534" data-ipsquote-userid="639" data-ipsquote-username="=VG= SemlerPDX">
	<div class="ipsQuote_citation">
		18 minutes ago, =VG= SemlerPDX said:
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p style="text-align: center;">
			<strong><span style="color:#dba901;"><span style="font-size:20px;">FINAL RELEASE TO v1.40</span></span></strong>
		</p>

		<p>
			<strong><span style="color:#dba901;"><span style="font-size:16px;">Please download updated final version of AVCS4 BMS (v1.40) and AVCS CORE (v1.0)!  Link below and updated in the main post above!  You don't have to remove the old 1.3.92 beta profile, but it is recommended to not use both at the same time or variables may get messed up.  Thanks to everyone for helping to finish up final testing and for your patience this year as I've been so busy with this website!</span></span></strong>
		</p>

		<p>
			As I wrote in my post about the final public AVCS CORE v1.0 release, I cannot believe I'm finally here!  I've been working on this vision of a project for over a year and a half, and came up with the idea after the first "day one patch" due to a typo in one of my public voice command profiles.  I dreamed of a profile hub that could help manage any game profile I release, as well as work like a template for VoiceAttack profile builders to use for their own projects, including AVCS CORE functions and methods in an included Template Profile.
		</p>

		<p>
			Two of the largest setbacks for the AVCS4 BMS Voice Controlled Radios project had been my misunderstanding of how to deal with international decimal separators, and the extremely unintuitive Push to Talk Button setup procedure.  With this final public release of AVCS4 BMS v1.40, I have at last overcome these issues, and the new Push to Talk Mode features are completely automated, voice controlled, and completely customizable including the classic default mode which only gates game commands behind the PTT key(s), and now an option to toggle Global Listening Mode with the use of the PTT button(s) (up to six keyboard, mouse, or controller buttons).  As an added feature, users can set a 'Computer' Assistant name that works like holding the PTT button(s) for a brief period, waking Global Listening long enough to issue commands.
		</p>

		<p>
			<span style="color:#f1c40f;">I'm also happy to announce that users can just say, "Open the Command Reference", to view the latest updated command reference on the VG website, or the most recent command reference on file (if offline).</span>
		</p>

		<p>
			With this final public release including the AVCS CORE (v1.0) profile, I can even add new voice commands through patch updates between major profile updates if needed, to further minimize the need to force new profile download and imports for minor changes.  So long as AVCS CORE command systems do not change, it should be very easy to support additions to games through game updates, or even modify and add to existing commands with new alternate phrasings to help maintain my goal of conceptual command use, "any way you say it".
		</p>

		<p>
			<br><span style="color:#e67e22;"><strong>Huge thanks to everyone who helped out with comments, feedback, bug reports, and testing</strong></span> - there is no way I could have come this far without all the support and I just can't thank everyone enough!  Special thanks for the <a href="https://www.buymeacoffee.com/semlerpdx" rel="external nofollow" target="_blank">coffees</a>!  <span><img alt=":coffee:" data-emoticon="true" src="https://veterans-gaming.com/uploads/emoticons/smileys-coffee-826223.gif" title=":coffee:"> </span> I still have plans to build upon this framework, and find a way to create game profile specific themed GUI elements, but for pure functionality, I'll be using the VoiceAttack get-user input boxes until then.<br>
			 
		</p>

		<p>
			Here's a copy of the latest changelog entry:
		</p>

		<pre class="ipsCode" id="ips_uid_731_23">




Public Release AVCS4 BMS v1.40 Changelog May-11-2021

   This is a Major Profile Update, and requires downloading and importing the latest AVCS4 BMS Radios (v1.40) and AVCS CORE (v1.0) profiles:

New Commands:
 -"Open the Command Reference" (or variations - open up-to-date command reference page online, or last updated reference file locally if offline)
 -"Set a Computer Name" (or variations - set a 'Computer' Assistant name for AVCS PTT mode, say before any command to wake listening temporarily)
 -"Set a Push to Talk Button" (or variations - set up to 6 total keyboard, mouse, or joystick buttons through automated script - just press when asked)

Fixes/Improvements:
 -Improved PTT (Push to Talk) Mode with voice controlled automated key/button detection during "Set" command
 -Added PTT Modes (chosen during "Set" command) for game/QCC commands only (default), or toggle VoiceAttack Global Listening Mode
 -Added PTT Mode 'Wake' by 'Computer' Assistant Name - set a name to say before any existing command to temporarily wake Global Listening Mode
 -Added Profile Misc. Commands to QCC, allows new commands or macros to be added via Live Update Patch Fix to CORE or AVCS4 profiles between major updates if needed
 -Added requirement to Include AVCS CORE Profile Commands through AVCS4 BMS Profile Options, instructions provided during first-time init
 -Fixed International Decimals - All Decimal Variables finally compatible for international users via cultural identification fix during init
 -Fixed Issue where user was asked to set Keyboard type more than once during first few profile uses, even when already saved to file and loaded properly</pre>

		<p>
			Any problems or new bugs, or brilliant ideas, feel free to drop some feedback!  Cheers! <img alt=":drinks:" data-emoticon="1" src="https://veterans-gaming.com/uploads/emoticons/drinks.gif" title=":drinks:"> 
		</p>
	</div>
</blockquote>

<p>
	 
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			<span style="color:#e67e22;"><span style="font-size:20px;"><strong>v1.3.92b Major Profile Update (beta)</strong></span></span><br><br>
			Since the Beta Test for AVCS CORE has progressed, and changed the way it runs, AVCS4 BMS must be updated as well.  This will not be the norm, I don't expect many AVCS CORE updates, it is a fixed set of functions.  <span style="color:#ecf0f1;">You can download and import both the new versions of AVCS CORE and AVCS4 Falcon BMS at the same time - just switch to the AVCS CORE 0.92 profile first to trigger the new version setup.</span><br><br><font color="#f39c12"><u>Update notes:</u></font><br>
			There were many issues with the radio commands beginning with a wildcard, to a degree that I'm not sure why there were not more reports of commands not working.  I have fixed all of these, as well as the problem with international decimal separators.  Another large focus of the .92 beta updates is initialization optimization, and I am hoping that load time is now on par with v1.2 from before the AVCS CORE integration.  Feedback on this is greatly appreciated, my goal is to ensure load time is as fast as possible across a majority of CPU's and builds.<br><br>
			Thanks for your patience during the beta test rounds here, again, the end goal for AVCS CORE is to be a stable un-changing profile that can handle profile management for any new AVCS4 game profile I create in the future without needing updates itself, and I think we're well on our way to that.  Cheers!<br><br><span style="color:#f1c40f;">Please be sure to download the </span><a href="https://veterans-gaming.com/index.php?/files/file/37-avcs-core-profile-framework-for-voiceattack/" rel=""><span style="color:#3498db;">AVCS CORE v0.92b Profile</span></a><span style="color:#f1c40f;"> (required), this updated changed the entire initialization methods in AVCS CORE function commands and AVCS4 BMS, too!</span>
		</p>

		<pre class="ipsCode" id="ips_uid_1615_8">







BETA Release AVCS4 BMS v1.3.92 Changelog Dec-6-2020

   This is a Major Profile Update, and requires downloading and importing the latest AVCS4 BMS Radios (v1.3.92b) and AVCS CORE (v0.92b) profiles:

Fixes/Improvements:
 -Improved AVCS_CORE and AVCS4 BMS profile initialization optimized again for decreased load time - most noticeable on first use
  -(AVCS4 BMS profile initialization should be even much faster now!)
 -Fixed infinite loop on Minor Version Rollback toggle and version display errors following toggle
 -Fixed International Decimals - All Decimal Variables now compatible for international users via cultural invariant token "DECINV"
 -Fixed All Wildcard Commands fixed to allow both Wildcard and non-Wildcard recognition ("anything that ends with" or "just the raw command")
 -Fixed Audio Feedback Mode not playing sound when commands recognized
 -Fixed Audio Feedback Mode on/off text entry in VA Event Log 'not set'</pre>
	</div>
</blockquote>

<p>
	 
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		Quote
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			<span style="color:#e67e22;"><span style="font-size:20px;"><strong>v1.3.91b Major Profile Update (beta)</strong></span></span><br><br>
			Since the Beta Test for AVCS CORE has progressed, and changed the way it runs, AVCS4 BMS must be updated as well.  This will not be the norm, I don't expect many AVCS CORE updates, it is a fixed set of functions.  <span style="color:#ecf0f1;">You can download and import both the new versions of AVCS CORE and AVCS4 Falcon BMS at the same time - just switch to the AVCS CORE 0.91 profile first to trigger the new version setup.</span><br><br><span style="color:#f39c12;"><u>Regarding the changes to AVCS CORE, and how they effect AVCS4 Falcon BMS:</u></span><br>
			Due to some initial issues right off the bat, it seems the concept of having some AVCS CORE functions outside the profile itself as part of an App for VoiceAttack would have included a bit more work, but more importantly increased the profile package size from around 1MB to over 25MB, and it's just not worth it.  The idea was specifically for things like my Save File Sort function that orders the lines of the save file into a readable alphanumeric sorting, where AVCS4 module specific entries were properly grouped together (like saved Quick Commands or VAS Passphrases), and any new AVCS4 profile such as Elite Dangerous could introduce new sorting rules by simply including a new version of the AVCS_CORE App for VoiceAttack in it's profile package.  This would have removed the need to update the base AVCS CORE profile that all AVCS4 game profiles rely upon anytime I wanted to modify those game-specific functions.<br><br>
			I've done away with the app completely now, and recreated the simple functions like sort and initialize as inline functions for VoiceAttack.  This requires everyone to download a new version of AVCS CORE and the AVCS4 Falcon BMS Radios (beta) profile if currently used.<br><br>
			Thanks for your patience during the beta test rounds here, the end goal for AVCS CORE is to be a stable un-changing profile that can handle profile management for any new AVCS4 game profile I create in the future without needing updates itself, and I think we're well on our way to that.  Cheers!<br><br><span style="color:#f1c40f;">Please be sure to download the </span><a href="https://veterans-gaming.com/index.php?/files/file/37-avcs-core-profile-framework-for-voiceattack/" rel=""><span style="color:#3498db;">AVCS CORE v0.91b Profile</span></a><span style="color:#f1c40f;"> (required), this updated changed the entire initialization methods in AVCS CORE function commands and AVCS4 BMS, too!</span>
		</p>

		<p>
			 
		</p>

		<pre class="ipsCode" id="ips_uid_3459_9">







BETA Release AVCS4 BMS v1.3.91 Changelog Aug-22-2020

	! USER NOTICE!
	-This is a major profile update, users of v1.3.90b must download the new v1.3.91 beta test profile and AVCS CORE v0.91b
		-(AVCS4 BMS profile version 1.3.90b will be retired in 30 days)

Fixes/Improvements:
 -AVCS_CORE App removed in place of internal systems - was too slow, and had compatibility issues
</pre>

		<p>
			 
		</p>
	</div>
</blockquote>

<p>
	 
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="" data-ipsquote-contentapp="blog" data-ipsquote-contentclass="blog_Entry" data-ipsquote-contentcommentid="176" data-ipsquote-contentid="31" data-ipsquote-contenttype="blogs" data-ipsquote-timestamp="1597295707" data-ipsquote-userid="639" data-ipsquote-username="=VG= SemlerPDX">
	<div class="ipsQuote_citation">
		On 8/12/2020 at 10:15 PM, =VG= SemlerPDX said:
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			<span style="color:#e67e22;"><span style="font-size:20px;"><strong>v1.3.90b Full Overhaul &amp; AVCS CORE Integration Update (beta)</strong></span></span><br><br>
			I'm very proud to finally offer the next version of AVCS4 BMS because it includes an entire set of profile control and support from my new AVCS CORE Framework Profile for VoiceAttack.  While AVCS4 BMS has not functionally changed much from what users have come to expect, AVCS CORE adds entirely new features that remove any previous need to manually edit any commands in the traditional sense to modify any configuration settings or otherwise.<br><br>
			The only significant new command added directly to AVCS4 BMS is "Edit the Callsigns List" (and phrase variations of it).  This opens a simple Get Choice menu to offer options to add/change/edit/remove any callsigns recognized by the profile.<br><br>
			After that, most everything comes from the required AVCS CORE Profile Framework that will load before AVCS4 BMS, adding commands and features, as well as allowing auto-profile switching by setting AVCS4 BMS as a "Preferred Profile" in the CORE Options Menu (say, "Open Core Options", poke around, have fun!)
		</p>

		<p>
			<br><br>
			Please be sure to download the AVCS CORE 0.90b Profile from this download section as well, it is now a requirement for any AVCS4 game profile I release, such as the upcoming Elite Dangerous profile, and more...
		</p>

		<pre class="ipsCode" id="ips_uid_4400_12">







BETA Release v1.3.90 Changelog Aug2020

New Commands:
 -AVCS CORE Commands Included into AVCS4 BMS Profile to lessen profile switching to CORE when it was needed
 -"Create a new Voice Authorization Phrase" and other included commands from Voice Authorization System
 -VAS can allow QCC commands to be locked behind a required authorization phrase as set by users, in up to 10 weighted levels
 -Integerated Bug Reporting and debugging options from AVCS CORE for easy troubleshooting
 -Versioning allows for Mutiple prior versions (reinitialization required) for easy profile version rollback if desired
 -Included UPDATE command to allow users to import previous saved user settings and saved Quick Commands from previous version of profile
 -Full profile control through command, "Open CORE Options Menu"
 -Better user support through command, "Open Help and Support Menu"  (will expand in time)
 -User settings save file control through command, "Open Save File Menu"  (includes save file backup and restore system)
 -...and much more (see posts at avcs homepage)

Fixes/Improvements:
 -Set First Use to present user with Get Choice box for Default Keyboard Layout (QWERTY/AZERTY/etc..)
 -Setting 'CurrentBackupIndex' and 'SaveFileBackupCount' to 'Not Set' inside F_SFS_LOAD_ALL  (was getting corrupted in save file)
 -Separated 'new_profiles.txt' file from AVCS4 profiles and AVCS CORE profiles to handle two imports before first time run/initialization of either
 -Added Duplicate Profile check from AVCS CORE, informs user of non-functional AVCS profiles (if ending in 'dash number' such as '-1')
 -Edited Preferred Profile command to allow for any user profile to be set to be auto-switched to after AVCS CORE finishes initializing

___

BETA Release v1.3.80 Changelog Mar2020

New Commands:
 -"Add/Edit Callsigns List" commands to add or remove callsigns recognized
 -"Add a new Voice Command" and others included from Quick Command Creator system
 - QCC can be used to create additional phrasings, just set action to execute another command (by name)
 -"Edit Keypress Timings" to open options menu to set custom timings

Fixes/Improvements:
 -AVCS CORE Profile and Updates Management integeration (see AVCS CORE changelog)
 -Full Profile Update Control added with user choice, only downloads if allowed by user (only checks 8 bytes of a version number before that)
 -Profile Updates set to allow choice for majority of fixes/changes to occur without new VoiceAttack Profile download/import  *called "LIVE UPDATES"
 -Physical Profile Updates set to allow previous versions to remain installed without conflict, and also import/uninstall previous version files  *called "MAJOR UPDATES"
 -Fixed typo in command "Raygun" -- corrected from "Ragun"  (first fix via new live updates system)
 -Created 'Add New Callsigns' system using Get-Choice boxes
 -Set most profile variables to config files in VA Apps Folder (edit with "Open Advanced Core Options" command)
 -Set most commands to Text Variables, read from config files</pre>

		<p>
			 
		</p>
	</div>
</blockquote>

<p>
	 
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="" data-ipsquote-contentapp="blog" data-ipsquote-contentclass="blog_Entry" data-ipsquote-contentcommentid="140" data-ipsquote-contentid="31" data-ipsquote-contenttype="blogs" data-ipsquote-timestamp="1578031874" data-ipsquote-userid="639" data-ipsquote-username="=VG= SemlerPDX">
	<div class="ipsQuote_citation">
		On 1/2/2020 at 10:11 PM, =VG= SemlerPDX said:
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			<span style="color:#e67e22;"><span style="font-size:20px;"><strong>v1.3 Patch has been released for BMS 4.34.1 (U1)</strong></span></span><br><br>
			Just a simple hotfix for a bug found by Wheelchock, the standard "Ready for Departure" command was getting overwritten by the variable for the new "Carrier Ready for Departure" command added for the new U1 update for BMS. As a result, this command will call an Abort by attempting the same input key as the carrier departure. Basically, everyone does need this hotfix, can't be avoided.<br><br>
			Anyone can easily fix this themselve inside their own profile, <strong>if you already have v1.2</strong>, and you don't want to bother importing this new version - just open the command labeled,<br>
			"KEYPRESS_Variables →→→((ADJUST AI COMMS LISTS &amp; KEYS USED BY THIS PROFILE HERE))←←←" and scroll down to the ATC Variables section, under the Carrier Page section,<br>
			you can change the #7 variable from "<strong>Set Text [KEY_ATC_ReadyForDeparture] to '7'</strong>" to "<strong>Set Text [KEY_ATC_<span style="color:#f1c40f;">Carrier</span>ReadyForDeparture] to '7'</strong>", and apply changes.<br><br>
			Otherwise, just download this new version...
		</p>

		<pre class="ipsCode" id="ips_uid_7958_11">







Patch Release v1.3 Changelog Jan2020

Fixes/Improvements:
 -Fixed issue with variable conflict for "Ready for Departure" - was pulling new variable from "Carrier Ready for Departure"</pre>
	</div>
</blockquote>

<p>
	 
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="" data-ipsquote-contentapp="blog" data-ipsquote-contentclass="blog_Entry" data-ipsquote-contentcommentid="139" data-ipsquote-contentid="31" data-ipsquote-contenttype="blogs" data-ipsquote-timestamp="1577577237" data-ipsquote-userid="639" data-ipsquote-username="=VG= SemlerPDX">
	<div class="ipsQuote_citation">
		On 12/28/2019 at 3:53 PM, =VG= SemlerPDX said:
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			<span style="color:#e67e22;"><span style="font-size:20px;"><strong>v1.2 Update has been released for BMS 4.34.1 (U1)</strong></span></span><br><br>
			Falcon BMS 4.34 has just released Update 1, and with it has come some serious improvements and additional features.  For this profile, and the in-game Radio Menus in general, all that has changed is an addition of a "Ready for Departure" call as the 7th choice on Page 6 of the ATC Radio Menu.  I have added that command to the profile, but as it does conflict with the default "Ready for Departure" command, this Carrier specific command will need to be preceded by the word "Carrier" as a forced prefix word (see note in the large Command Reference pic).<br><br><span style="color:#dddddd;"><strong>Example use:  "This is Joker 7-1, Carrier Ready for Departure"</strong></span><br><br>
			I've also added a bit of polish to the Audio Feedback system, allowing it to recognize the word "feedback" as two words, "feed back", to help us avoid repeating ourselves to get the commands to fire, as well as a null check on the Stereo Audio Feedback output channel, so it can recover if this saved setting is lost.  I've also updated the minimum version of VoiceAttack, so please be sure to update your VA program.<br>
			We've tested this version, just minor additions, and everything seems great - but let me know if any issues pop up!  Happy New Year!
		</p>

		<pre class="ipsCode" id="ips_uid_1062_16">







Patch Release v1.2 Changelog Dec2019
New Commands:
 -"Carrier Ready for Departure" : for ATC Page 6, new 7th item added for 4.34 (U1) update

Fixes/Improvements:
 -Added additional recognition words for turning on/off Audio Feedback Mode - "feedback" can now be recognized as "feed back"
 -Added Null Check on Audio Feedback Stereo Output Channel setting, if saved setting lost, will force user input on profile load
 -Updated minimum VoiceAttack version to latest release (v1.8.3) for compatibility</pre>
	</div>
</blockquote>

<p>
	 
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="" data-ipsquote-contentapp="blog" data-ipsquote-contentclass="blog_Entry" data-ipsquote-contentcommentid="135" data-ipsquote-contentid="31" data-ipsquote-contenttype="blogs" data-ipsquote-timestamp="1572805886" data-ipsquote-userid="639" data-ipsquote-username="=VG= SemlerPDX">
	<div class="ipsQuote_citation">
		On 11/3/2019 at 10:31 AM, =VG= SemlerPDX said:
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			<span style="color:#e67e22;"><span style="font-size:20px;"><strong>v1.1 Patch has been released</strong></span></span><br><br>
			A small bug has been identified and removed.  This issue prevented the entire Human Pilots Registry system to function and should have been caught before the final release version.  All apologies to everyone who has been trying to use this new voice program.  In addition to this, I've decided to not use a wildcard to catch the name of the BMS program to send keypresses to, and have gone for the "Falcon BMS.exe" method.  Still, this will not catch every user, and players will need to test to be sure commands go through initially, and refer to VoiceAttack troubleshooting (and those tips we've highlighted already) to get commands to fire in the correct window.  I'm happy to help new users, and the community has been helpful as well.  Any questions, feel free to ask!
		</p>

		<pre class="ipsCode" id="ips_uid_2095_8">







Patch Release v1.1 Changelog Nov2019

Fixes/Improvements:
 -Changed common Send To default from *Falcon BMS* to "Falcon BMS.exe" to avoid conflict with open PDF's, etc. with Falcon BMS in name
 -Fixed Human/Computer Pilots Registry system - last minute addition of a mode check was to blame, has been removed for now
</pre>

		<p>
			 Again, any issues feel free to let me know! <img alt=":hi:" data-emoticon="1" src="https://veterans-gaming.com/uploads/emoticons/hi.gif" title=":hi:"></p>
	</div>
</blockquote>

<p>
	 
</p>

<p>
	 
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="" data-ipsquote-contentapp="blog" data-ipsquote-contentclass="blog_Entry" data-ipsquote-contentcommentid="134" data-ipsquote-contentid="31" data-ipsquote-contenttype="blogs" data-ipsquote-timestamp="1572396652" data-ipsquote-userid="639" data-ipsquote-username="=VG= SemlerPDX">
	<div class="ipsQuote_citation">
		On 10/29/2019 at 5:50 PM, =VG= SemlerPDX said:
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p style="text-align: center;">
			<strong><span style="color:#dba901;"><span style="font-size:20px;">FINAL RELEASE TO v1.0</span></span></strong>
		</p>

		<p>
			<strong><span style="color:#dba901;"><span style="font-size:16px;">Please download updated final version!  Link below and updated in the main post above!  You don't have to remove the old 0.99 beta profile, but it is recommended to not use both at the same time or variables may get messed up.  Thanks to everyone for helping to finish up final testing!</span></span><br><br>
			SitRep:</strong><br>
			I've finished with all final additions and proposed changes, and all known bugs and issues have been resolved.  We've tested quite extensively to try to break things, and it seems fairly stable.  The final version can be found in our download section, please rate and comment if you like and share this link if you can (<a href="https://veterans-gaming.com/index.php?/files/file/35-avcs4-voice-control-radios-for-falcon-bms/" rel="">click here</a>).  There is now an Audio Feedback Mode that can be turned on or off at any time.  It plays a short sound when a command is successfully recognized, to save time and help avoid the frustration of not knowing if we have to repeat a command.
		</p>

		<p>
			I've given the option to have the Audio Feedback sound effect to output through stereo left, right, or center channel(s), and this is set when you turn the mode on.  It is a radio cue up type sound, but a bit distinct compared to the ones in BMS to help differentiate feedback.  All three sound files are very tiny, and are included in a VoiceAttack Profile Package for easy importing into VA, and will be placed in folder in the VoiceAttack program folder under Sounds automatically when the profile is imported.<br><br>
			Finally, there is a single Variable Pause in the KEYPRESS_Variables command that controls the time between a keypress and release for every action in the profile.  Default is 50ms, and if a user has any issue with the keypress macros firing buttons too fast for their computer, this number can be increased slightly to slow down the system and fix any issues.
		</p>

		<p>
			<br><span style="color:#e67e22;"><strong>Huge thanks to everyone who helped out with comments, feedback, bug reports, and testing</strong></span> - I'm very happy with how well this profile has been developed, and I have a feeling it will be a solid tool for years to come!  I'll support any changes for future BMS versions, and will try to respond to any questions about this profile.<br>
			 
		</p>

		<p>
			Here's a copy of the changelog:
		</p>

		<pre class="ipsCode" id="ips_uid_4448_8">







Final Release v1.0 Changelog Oct2019
New Commands:
 -Turn On/Off Audio Feedback Mode : Provides sound feedback upon successful recognition of a command (per user request)
 -Added a non-functional command to help recognize many variations of "Yes" words for the voice confirmations in profile

Fixes/Improvements:
 -New Variable Pause between any keypress/release for adjustment of the time any key is held down, in keypress_variable command. Default is 50ms
 -New Audio Feedback Mode has custom SFX included, and gives user option of stereo left, right, or center playback for easier distinction
 -New Speech notification on startup for Audio Feedback Mode (if enabled)
 -Speech notifications on startup for PTT mode and All-Humans mode (if enabled) have been greatly shortened.
 -Fixed issues with being able to set Humans in Computer Pilots mode and vice versa</pre>

		<p>
			Any problems or new bugs, or brilliant ideas, feel free to drop some feedback!  Cheers! <img alt=":drinks:" data-emoticon="1" src="https://veterans-gaming.com/uploads/emoticons/drinks.gif" title=":drinks:"> 
		</p>
	</div>
</blockquote>

<p>
	 
</p>

<p>
	 
</p>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="" data-ipsquote-contentapp="blog" data-ipsquote-contentclass="blog_Entry" data-ipsquote-contentcommentid="114" data-ipsquote-contentid="31" data-ipsquote-contenttype="blogs" data-ipsquote-timestamp="1563423285" data-ipsquote-userid="639" data-ipsquote-username="=VG= SemlerPDX">
	<div class="ipsQuote_citation">
		On 7/17/2019 at 9:14 PM, =VG= SemlerPDX said:
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p style="text-align: center;">
			<strong><span style="color:#dba901;"><span style="font-size:20px;">BETA UPDATED TO v0.99 (final beta!)</span><span style="font-size:16px;"> </span></span></strong>
		</p>

		<p>
			<strong><span style="color:#dba901;"><span style="font-size:16px;">Please download newest version!  Link updated in the main post above!  You don't have to remove the 0.98 beta profile, but it is recommended to not use both at the same time or variables may get messed up.  Thanks to everyone for helping to finish up final testing!</span></span></strong><br><br><br>
			Per request, to speed up the interaction of adding/removing pilots from the exclusion lists, you can now say the entire Callsign + Flight Number + Wing Number when asked for the callsign. 
		</p>

		<p>
			<u><strong><span style="color:#f1c40f;">Example:</span></strong></u> <br><span style="color:#95a5a6;">"Set a Human Pilot"</span><br><span style="color:#dddddd;">"say the callsign"</span><br><span style="color:#95a5a6;">"Cowboy 7 3"</span><br><span style="color:#dddddd;">"Cowboy 7 3 - is this correct?"</span><br><span style="color:#95a5a6;">"Yes"</span><br>
			...<br><span style="color:#ecf0f1;"><em>(bypassing the need to individually set Flight Number and then Wing Number!)</em></span>
		</p>

		<p>
			This will jump to the confirmation at the end of the command and greatly reduces the time spent interacting with the voice control system configuration.   During my testing, I found there must be a clear separation between the Flight Number and Wing Number when spoken, to avoid "Cowboy 7 3" getting recognized as "Cowboy 73", and your own results may vary.  Please test and let me know.  The old system is still in place, and you can even just say the Callsign + Flight number, and it will notice and skip to the Set Wing Number segment of the script.  The entire idea was to allow a lot of options to recognize how we speak, and the only catch is that we need to enunciate and keep succinct breaks between words for this style of input.  Further beta testing in this final 0.99 phase should help judge if this will work or if it needs adjustment.
		</p>

		<p>
			<br>
			Additionally, there are now VoiceAttack command log notifications whenever the profile loads showing the current profile settings, and also voice notifications if either PTT mode or the new All-Humans mode are On. <br>
			 
		</p>

		<p>
			Here's a copy of the changelog:
		</p>

		<pre class="ipsCode" id="ips_uid_6511_12">







Beta v0.99 Changelog Jul2019
New Commands:
 -Change Default Keyboard Layout allows choices between QWERTY, QWERTZ, &amp; AZERTY (per user request)
 -Turn On/Off All-Humans Mode : Reverse mode assumes all pilots are humans, add Computer Pilots individually as needed (per user request)
 -Copy of all Add/Remove Human Pilots commands for Computer Pilots &amp; All-Humans Mode

Fixes/Improvements:
 -Can state an entire callsign plus flight &amp; wing numbers when asked for Callsign (per user request to speed up the voice system interaction of adding/removing human pilots)
 -VoiceAttack log entries displays profile information on startup (current keyboard layout, push-to-talk mode on/off state, All-Humans mode on/off state) (per user request)
 -Speech notifications on startup for PTT mode and All-Humans mode if they are enabled (see above)
 -Forced profile initialization if not initialized on any command use (per bug report: on first download/import of profile, trying to use any command fails until voiceattack restarted)</pre>

		<p>
			 
		</p>
	</div>
</blockquote>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>
]]></description><guid isPermaLink="false">31</guid><pubDate>Sun, 16 May 2021 06:14:58 +0000</pubDate></item><item><title>DIY - Custom Game Controller - 2 Dial HSI Course and Heading Knobs</title><link>https://veterans-gaming.com/blogs/entry/32-diy-custom-game-controller-2-dial-hsi-course-and-heading-knobs/</link><description><![CDATA[
<p>
	<br><img alt="zPztEG1.jpg" class="ipsImage ipsAttachLink_image ipsAttachLink_left" height="750" src="https://i.imgur.com/zPztEG1.jpg" style="width: 500px; height: auto; float: left;" width="1000"></p>

<p>
	<span style="font-size:16px;"> I have a touch screen monitor below my main one when I fly in flight simulators like Falcon BMS or DCS or Microsoft Flight Simulator.  It's great for the MFD buttons, as opposed to the actual wired USB Thrustmaster MFD's physically attached to the screen like I used to have, and I can use the monitor for other things, too.  But one thing I would love to have attached to the screen would be the Course and Heading knobs of the HSI (horizontal situation indicator) .</span>
</p>

<p>
	<span style="font-size:16px;">It would need to be removable so I can store it when not in use. </span>
</p>

<p>
	<span style="font-size:16px;">I've heard about a micro-suction tape that can stick to anything smooth and flat without leaving a residue or losing stickiness, so this is a good excuse to buy some and play around with sticking things to my monitors.</span><br>
	 
</p>

<p>
	<span style="font-size:16px;">← On the left is the (green) Arduino Micro board I used to test the concept with a rotary encoder on a breakout board, where I wrote the initial sketch with the Joystick and Encoder libraries.  Later, because I didn't want to sacrifice my Arduino Micro to this controller, I bought a 3 pack of these much smaller Sparkfun Pro Micro clones for fifteen bucks (blue one in the middle).  That one is gonna stay there for future tests and such, they'll be the heart of many projects in the future since they cost so little and include so much!</span>
</p>

<p>
	 
</p>

<p>
	<br>
	 
</p>

<p>
	<span style="font-size:24px;"><span style="color:#dba901;"><u><strong>My DIY USB Game Controller - Rotary Encoders as Course &amp; Heading Knobs for Falcon BMS / DCS / FSX</strong></u></span></span><br><span style="font-size:12px;"><em>*parts list with links at bottom</em></span>
</p>

<p>
	<br><span style="font-size:18px;"><strong>The initial goals I had for this project were:</strong></span><img alt="h5w7NMM.jpg" class="ipsImage ipsAttachLink_image ipsAttachLink_right" height="750" src="https://i.imgur.com/h5w7NMM.jpg" style="width: 500px; height: auto; float: right;" width="1000"></p>

<ul>
<li>
		<span style="font-size:16px;">Two Rotary Encoders with Push Buttons recognized as USB Game Controller in Windows</span>
	</li>
	<li>
		<span style="font-size:16px;">Thin and flat, without taking up too much viewing space on the monitor</span>
	</li>
	<li>
		<span style="font-size:16px;">Can stick and restick to the monitor with micro-suction tape</span>
	</li>
	<li>
		<span style="font-size:16px;">USB connector can be removed so it can be boxed (NetDot magnetic)</span>
	</li>
	<li>
		<span style="font-size:16px;">Fine control for one-degree per detent and Fast Speeds for turning quickly</span>
	</li>
	<li>
		<span style="font-size:16px;">Encased in semi-rigid form like shrink wrap so it won't scratch the monitor</span>
	</li>
	<li>
		<span style="font-size:16px;">Total cost for one single unit less than $10</span>
	</li>
</ul>
<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<br><img alt="4Y01eI2.jpg" class="ipsImage ipsAttachLink_image ipsAttachLink_left" height="750" src="https://i.imgur.com/4Y01eI2.jpg" style="width: 500px; height: auto; float: left;" width="1000"> 
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">First, I affixed the Rotary Encoders and the Pro Micro clone to an 8cm x 2cm prototype PCB with a couple header pins bent outwards and crimped down, and with the two blue solid copper switch wires soldered in place from the top. I also ran the 10k Ohm resistors for the switches now. </span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">These are for the push buttons built into the rotary encoders, and although they only have two pegs on the actual component, they require three wires from the controller board (ground, 5 volt power, and the blue switch wire going to the Pro Micro). All this added plenty of structure. There is no wiggle or play, I'm not gonna try to break it, but it is very rigid now.</span>
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<img alt="H89ZiWv.jpg" class="ipsImage ipsAttachLink_image ipsAttachLink_right" height="750" src="https://i.imgur.com/H89ZiWv.jpg" style="width: 500px; height: auto; float: right;" width="1000"> 
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">Here's a close look at the first stage of soldering. (okay, don't look <em>too</em> close) I don't have the highest quality tools or solder, or even a lot of skill and experience at this, but it's good enough -- and good enough should always be good enough for a DIY project for personal use.  If I wanted to, I could order a custom circuit board if I was going to make a bunch of these, but I'm happy as it is.</span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">It is so cheap to buy some of this stuff, if you messed up, you can always just buy another.  Those Pro Micro controller boards cost about as much as a value meal at a fast food joint, so you can literally afford to make mistakes as you learn even if you're on a very tight budget like I am.  </span>
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<br><img alt="ru0rmph.jpg" class="ipsImage ipsAttachLink_image ipsAttachLink_left" height="750" src="https://i.imgur.com/ru0rmph.jpg" style="width: 500px; height: auto; float: left;" width="1000"></p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">A homemade carbon filter fume extractor, a simple soldering iron with a power switch and a temperature controller, some handy dandy helping hands and that brass soldering tip cleaner make little projects like this very easy, and all these items together costs less than the Logitech mouse to it's right. Good enough to play.</span>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">If anyone reading this has any idea to get into working with things like this, my advice is to jump right in, get the most basic stuff you can get, not the cheapest, but things with good reviews from some good online store like Amazon, Sparkfun, Adafruit, etc.</span>
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<img alt="Pinxa02.jpg" class="ipsImage ipsAttachLink_image ipsAttachLink_right" height="750" src="https://i.imgur.com/Pinxa02.jpg" style="width: 500px; height: auto; float: right;" width="1000"></p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">Soldering the top side here, used one of the helping hands to hold a string of solder from the spool. When I'm dealing with tiny bits that are between 0.5mm-2mm, anything that helps is appreciated. One slip and this 225C soldering iron would burn through any one of those tiny chips or components on the board. I find myself holding my breath and doing one or two, then letting go for a sec. I had to redo a few, and I always wait for it to cool down so I don't transfer too much heat to this poor little board</span>.
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">I had a few bits of solid copper wire with colored insulators, from a breadboard jumpers kit, so I cut some to length, but used others as is. This resulted in an odd looking crossover of the Orange and Yellow wires, but they are not taller than the micro USB port on the other side of the board and that's fine.</span>
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<br><img alt="xzlxtFJ.jpg" class="ipsImage ipsAttachLink_image ipsAttachLink_left" height="750" src="https://i.imgur.com/xzlxtFJ.jpg" style="width: 500px; height: auto; float: left;" width="1000">   <img alt="fzzbWnc.jpg" class="ipsImage ipsAttachLink_image ipsAttachLink_right" height="750" src="https://i.imgur.com/fzzbWnc.jpg" style="width: 500px; height: auto; float: right;" width="1000"><span style="font-size: 16px;">Once I was all done, I tested every connection for continuity and unintentional bridges, and it all checked out, so I encased it in shrink wrap.  By some sort of miracle, it works, it looks decent, and I think that will do just great!  I connected it to the computer and uploaded the sketch, which I had to modify slightly since I used a few different pins for the push buttons on the rotary encoders, now at pins 15 and 6 instead of 6 and 7.</span>
</p>

<p>
	<span style="font-size:16px;">I am thoroughly hooked on these NetDot magnetic adapters.  When I looked at the reviews for Pro Micro boards, one of the only issues I saw that I'd be concerned with is accidentally popping the micro-USB port off the Pro Mini board if dropped or yanked too hard.  A magnetic connector completely eliminates this issue, as well as the standard wear and tear issues that plugging and unplugging creates over time.  And they're as cheap as regular braided USB cables, too.  Why not?</span>
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<br><img alt="Ocsopzo.jpg" class="ipsImage ipsAttachLink_image" height="750" src="https://i.imgur.com/Ocsopzo.jpg" style="width: 500px; height: auto;" width="1000">   <img alt="dzvZVUh.jpg" class="ipsImage ipsAttachLink_image" height="750" src="https://i.imgur.com/dzvZVUh.jpg" style="width: 500px; height: auto;" width="1000">   <a class="ipsAttachLink ipsAttachLink_image" data-fileid="1931" href="https://veterans-gaming.com/uploads/monthly_2019_06/CustomHSIgamecontrollerProperties.PNG.ae03469000f382e5a8c58d2125ed07f7.PNG" rel=""><img alt="CustomHSIgamecontrollerProperties.PNG" class="ipsImage ipsImage_thumbnailed" data-fileid="1931" data-unique="xqxibrh3o" src="https://veterans-gaming.com/uploads/monthly_2019_06/CustomHSIgamecontrollerProperties.thumb.PNG.58a9cba37479c7775ad2f1c4a9b74b16.PNG" style="width: 415px; height: auto;"></a>
</p>

<p>
	<span style="font-size:18px;">Here it is connected to the touchscreen monitor. It is far more satisfying to have tactile dials for these knobs than trying to make little circles on the screen with my finger over the touchscreen dials. The micro-suction tape keeps it in place and actually has some grab when trying to pull it off the screen. I've started using a peeling action but I doubt the screen would ever have problems.  I might get a 3D printed case someday and maybe even a 90 degree angle connector so the cord goes back behind the monitor naturally instead of downwards, but for now, it's done and working great.</span>
</p>

<p>
	<span style="font-size:18px;">Turning the dial with the most basic rotary encoder sketch from that Arduino library results in a "one degree per detent" meaning one turn is one click, and one click is one degree. No matter how fast you turn it, with 20 detents per 360 degrees with these encoders, it would take FOREVER to turn the dial from heading 000 to 180!! </span>
</p>

<p>
	<span style="font-size:18px;">I wrote two separate jump speeds to detect how fast the dial is being turned, one jumps 18 degrees per click, and the other 30 per click. Now, it's easy to twist the dial fast to get it spinning fast on screen, while also being able to dial in one degree at a time when needed.  All in all, it was a fun project and it's made me think seriously about getting a 3D printer someday to make little plastic cases for things like this.</span><br>
	 
</p>

<p>
	<span style="color:#f39c12;"><u><strong><span style="font-size:20px;">Here's the code if someone wants to use it (or modify it to make it better):</span></strong></u></span><br><span style="color:#ecf0f1;"><span style="font-size:18px;">Rotary Encoders HSI Course and Heading Knobs.ino for Arduino IDE</span></span><br><span style="font-size:16px;"><a href="https://pastebin.com/drUnCfKN" ipsnoembed="true" rel="external nofollow">https://pastebin.com/drUnCfKN</a></span>
</p>

<details><summary><img alt="spoilerIMG2415905122018.PNG" class="ipsImage" data-fileid="1426" src="https://veterans-gaming.com/uploads/monthly_2018_05/spoilerIMG2415905122018.PNG.164c542b34dde84540d588000f084583.PNG"></summary><pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_914_5" style="">
<span class="com">/* Simple HSI Knobs Sketch for Falcon BMS / DCS / FSX
 *  for Arduino Micro/Leonardo / Sparkfun Pro Micro or equiv. clones
 * by SemlerPDX June2019
 * VETERANS-GAMING.COM
 *  
 *  Pins:
 *  Rotary Encoder 1 - (OUTA-OUTB-SW) = Arduino Pins (0,1,15)
 *  Rotary Encoder 2 - (OUTA-OUTB-SW) = Arduino Pins (2,3,6)
 *  
 *  Encoder Library
 * http://www.pjrc.com/teensy/td_libs_Encoder.html
 * 
 *  Joystick Library 
 * by Matthew Heironimus
 * https://github.com/MHeironimus/ArduinoJoystickLibrary
 */</span><span class="pln">

</span><span class="com">#define</span><span class="pln"> ENCODER_USE_INTERRUPTS
</span><span class="com">#define</span><span class="pln"> ENCODER_OPTIMIZE_INTERRUPTS
</span><span class="com">#include</span><span class="pln"> </span><span class="str">&lt;Encoder.h&gt;</span><span class="pln">
</span><span class="com">#include</span><span class="pln"> </span><span class="str">&lt;Joystick.h&gt;</span><span class="pln">

</span><span class="com">//Tell the Encoder Library which pins have encoders</span><span class="pln">
</span><span class="typ">Encoder</span><span class="pln"> axisXRotation</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
</span><span class="typ">Encoder</span><span class="pln"> axisYRotation</span><span class="pun">(</span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">3</span><span class="pun">);</span><span class="pln">

</span><span class="com">//Rotary Encoder Push Button Pins</span><span class="pln">
</span><span class="typ">int</span><span class="pln"> buttonArray</span><span class="pun">[</span><span class="lit">2</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="lit">15</span><span class="pun">,</span><span class="pln"> </span><span class="lit">6</span><span class="pun">};</span><span class="pln">

</span><span class="com">//Rotary Encoder Interrupt Pins</span><span class="pln">
</span><span class="typ">int</span><span class="pln"> </span><span class="typ">EncoderPin0</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="typ">int</span><span class="pln"> </span><span class="typ">EncoderPin1</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
</span><span class="typ">int</span><span class="pln"> </span><span class="typ">EncoderPin2</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">2</span><span class="pun">;</span><span class="pln">
</span><span class="typ">int</span><span class="pln"> </span><span class="typ">EncoderPin3</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">3</span><span class="pun">;</span><span class="pln">

</span><span class="com">//Delay Time between loops</span><span class="pln">
</span><span class="typ">int</span><span class="pln"> debounceDelay </span><span class="pun">=</span><span class="pln"> </span><span class="lit">260</span><span class="pun">;</span><span class="pln">

</span><span class="com">//Variables to compare current to old values</span><span class="pln">
</span><span class="typ">int</span><span class="pln"> oldX </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="typ">int</span><span class="pln"> oldY </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln">
</span><span class="typ">int</span><span class="pln"> </span><span class="typ">RxAxis_Value</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
</span><span class="typ">int</span><span class="pln"> </span><span class="typ">RyAxis_Value</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">

</span><span class="com">//Intervals for Jump/Warp Speed Rotations</span><span class="pln">
</span><span class="typ">int</span><span class="pln"> </span><span class="typ">JumpSpeed</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">18</span><span class="pun">;</span><span class="pln">
</span><span class="typ">int</span><span class="pln"> </span><span class="typ">WarpSpeed</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="lit">30</span><span class="pun">;</span><span class="pln">

</span><span class="com">//Set generic joystick with id 42 with 2 buttons and 2 axes</span><span class="pln">
</span><span class="typ">Joystick_</span><span class="pln"> </span><span class="typ">Joystick</span><span class="pun">(</span><span class="lit">0x42</span><span class="pun">,</span><span class="pln"> 
  </span><span class="lit">0x04</span><span class="pun">,</span><span class="pln"> </span><span class="lit">2</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln">
  </span><span class="kwd">false</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">true</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">,</span><span class="pln">
  </span><span class="kwd">false</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">,</span><span class="pln"> </span><span class="kwd">false</span><span class="pun">);</span><span class="pln">  


</span><span class="kwd">void</span><span class="pln"> setup</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> 

  </span><span class="com">//Set Encoder Pins as Pullups</span><span class="pln">
  pinMode</span><span class="pun">(</span><span class="typ">EncoderPin0</span><span class="pun">,</span><span class="pln"> INPUT_PULLUP</span><span class="pun">);</span><span class="pln">
  pinMode</span><span class="pun">(</span><span class="typ">EncoderPin1</span><span class="pun">,</span><span class="pln"> INPUT_PULLUP</span><span class="pun">);</span><span class="pln">
  pinMode</span><span class="pun">(</span><span class="typ">EncoderPin2</span><span class="pun">,</span><span class="pln"> INPUT_PULLUP</span><span class="pun">);</span><span class="pln">
  pinMode</span><span class="pun">(</span><span class="typ">EncoderPin3</span><span class="pun">,</span><span class="pln"> INPUT_PULLUP</span><span class="pun">);</span><span class="pln">

  </span><span class="com">//Loop through buttons and set them as Pullups</span><span class="pln">
  </span><span class="kwd">for</span><span class="pun">(</span><span class="typ">int</span><span class="pln"> x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> x </span><span class="pun">&lt;</span><span class="pln"> </span><span class="kwd">sizeof</span><span class="pun">(</span><span class="pln">buttonArray</span><span class="pun">);</span><span class="pln"> x</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    pinMode</span><span class="pun">(</span><span class="pln">buttonArray</span><span class="pun">[</span><span class="pln">x</span><span class="pun">],</span><span class="pln"> INPUT_PULLUP</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="com">//Set Range of custom Axes</span><span class="pln">
  </span><span class="typ">Joystick</span><span class="pun">.</span><span class="pln">setRxAxisRange</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">359</span><span class="pun">);</span><span class="pln">
  </span><span class="typ">Joystick</span><span class="pun">.</span><span class="pln">setRyAxisRange</span><span class="pun">(</span><span class="lit">0</span><span class="pun">,</span><span class="pln"> </span><span class="lit">359</span><span class="pun">);</span><span class="pln">
  
  </span><span class="com">// Initialize Joystick Library</span><span class="pln">
  </span><span class="typ">Joystick</span><span class="pun">.</span><span class="pln">begin</span><span class="pun">(</span><span class="kwd">false</span><span class="pun">);</span><span class="pln">

</span><span class="pun">}</span><span class="pln">


</span><span class="kwd">void</span><span class="pln"> loop</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

  </span><span class="com">// Loop through button pin values &amp; set to Joystick</span><span class="pln">
  </span><span class="kwd">for</span><span class="pln"> </span><span class="pun">(</span><span class="typ">int</span><span class="pln"> x </span><span class="pun">=</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><span class="pln"> x </span><span class="pun">&lt;</span><span class="pln"> </span><span class="kwd">sizeof</span><span class="pun">(</span><span class="pln">buttonArray</span><span class="pun">);</span><span class="pln"> x</span><span class="pun">++)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    byte currentButtonState </span><span class="pun">=</span><span class="pln"> </span><span class="pun">!</span><span class="pln">digitalRead</span><span class="pun">(</span><span class="pln">buttonArray</span><span class="pun">[</span><span class="pln">x</span><span class="pun">]);</span><span class="pln">
    </span><span class="typ">Joystick</span><span class="pun">.</span><span class="pln">setButton</span><span class="pun">(</span><span class="pln">x</span><span class="pun">,</span><span class="pln"> currentButtonState</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">


  </span><span class="com">// Read "Heading" X Axis Rotation Encoder Knob</span><span class="pln">
  </span><span class="typ">int</span><span class="pln"> newX </span><span class="pun">=</span><span class="pln"> axisXRotation</span><span class="pun">.</span><span class="pln">read</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">newX </span><span class="pun">&gt;</span><span class="pln"> oldX</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="com">//Determine speed of increment &amp; set output</span><span class="pln">
    </span><span class="typ">int</span><span class="pln"> difX </span><span class="pun">=</span><span class="pln"> newX </span><span class="pun">-</span><span class="pln"> oldX</span><span class="pun">;</span><span class="pln">
    </span><span class="typ">RxAxis_Value</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> speedVal</span><span class="pun">(</span><span class="pln">difX</span><span class="pun">,</span><span class="pln"> </span><span class="typ">RxAxis_Value</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
    </span><span class="typ">Joystick</span><span class="pun">.</span><span class="pln">setRxAxis</span><span class="pun">(</span><span class="typ">RxAxis_Value</span><span class="pun">);</span><span class="pln">
    axisXRotation</span><span class="pun">.</span><span class="pln">write</span><span class="pun">(</span><span class="pln">newX</span><span class="pun">);</span><span class="pln">
    oldX </span><span class="pun">=</span><span class="pln"> newX</span><span class="pun">;</span><span class="pln">

  </span><span class="pun">}</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">newX </span><span class="pun">&lt;</span><span class="pln"> oldX</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="com">//Determine speed of decrement &amp; set output</span><span class="pln">
    </span><span class="typ">int</span><span class="pln"> difX </span><span class="pun">=</span><span class="pln"> oldX </span><span class="pun">-</span><span class="pln"> newX</span><span class="pun">;</span><span class="pln">
    </span><span class="typ">RxAxis_Value</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> speedVal</span><span class="pun">(</span><span class="pln">difX</span><span class="pun">,</span><span class="pln"> </span><span class="typ">RxAxis_Value</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
    </span><span class="typ">Joystick</span><span class="pun">.</span><span class="pln">setRxAxis</span><span class="pun">(</span><span class="typ">RxAxis_Value</span><span class="pun">);</span><span class="pln">
    axisXRotation</span><span class="pun">.</span><span class="pln">write</span><span class="pun">(</span><span class="pln">newX</span><span class="pun">);</span><span class="pln">
    oldX </span><span class="pun">=</span><span class="pln"> newX</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">


  </span><span class="com">// Read "Course" Y Axis Rotation Encoder Knob</span><span class="pln">
  </span><span class="typ">int</span><span class="pln"> newY </span><span class="pun">=</span><span class="pln"> axisYRotation</span><span class="pun">.</span><span class="pln">read</span><span class="pun">();</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">newY </span><span class="pun">&gt;</span><span class="pln"> oldY</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="com">//Determine speed of increment &amp; set output</span><span class="pln">
    </span><span class="typ">int</span><span class="pln"> difY </span><span class="pun">=</span><span class="pln"> newY </span><span class="pun">-</span><span class="pln"> oldY</span><span class="pun">;</span><span class="pln">
    </span><span class="typ">RyAxis_Value</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> speedVal</span><span class="pun">(</span><span class="pln">difY</span><span class="pun">,</span><span class="pln"> </span><span class="typ">RyAxis_Value</span><span class="pun">,</span><span class="pln"> </span><span class="lit">1</span><span class="pun">);</span><span class="pln">
    </span><span class="typ">Joystick</span><span class="pun">.</span><span class="pln">setRyAxis</span><span class="pun">(</span><span class="typ">RyAxis_Value</span><span class="pun">);</span><span class="pln">
    axisYRotation</span><span class="pun">.</span><span class="pln">write</span><span class="pun">(</span><span class="pln">newY</span><span class="pun">);</span><span class="pln">
    oldY </span><span class="pun">=</span><span class="pln"> newY</span><span class="pun">;</span><span class="pln">

  </span><span class="pun">}</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">newY </span><span class="pun">&lt;</span><span class="pln"> oldY</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="com">//Determine speed of decrement &amp; set output</span><span class="pln">
    </span><span class="typ">int</span><span class="pln"> difY </span><span class="pun">=</span><span class="pln"> oldY </span><span class="pun">-</span><span class="pln"> newY</span><span class="pun">;</span><span class="pln">
    </span><span class="typ">RyAxis_Value</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> speedVal</span><span class="pun">(</span><span class="pln">difY</span><span class="pun">,</span><span class="pln"> </span><span class="typ">RyAxis_Value</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">);</span><span class="pln">
    </span><span class="typ">Joystick</span><span class="pun">.</span><span class="pln">setRyAxis</span><span class="pun">(</span><span class="typ">RyAxis_Value</span><span class="pun">);</span><span class="pln">
    axisYRotation</span><span class="pun">.</span><span class="pln">write</span><span class="pun">(</span><span class="pln">newY</span><span class="pun">);</span><span class="pln">
    oldY </span><span class="pun">=</span><span class="pln"> newY</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">


  </span><span class="com">//Send Joystick info through USB</span><span class="pln">
  </span><span class="typ">Joystick</span><span class="pun">.</span><span class="pln">sendState</span><span class="pun">();</span><span class="pln">
  delay</span><span class="pun">(</span><span class="pln">debounceDelay</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="pln">


</span><span class="com">//Function to set Rotation value adjusted for the turning speed</span><span class="pln">
</span><span class="typ">int</span><span class="pln"> speedVal</span><span class="pun">(</span><span class="typ">int</span><span class="pln"> dif</span><span class="pun">,</span><span class="pln"> </span><span class="typ">int</span><span class="pln"> val</span><span class="pun">,</span><span class="pln"> </span><span class="typ">int</span><span class="pln"> dir</span><span class="pun">){</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">dif </span><span class="pun">&gt;=</span><span class="pln"> </span><span class="typ">WarpSpeed</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">dir </span><span class="pun">==</span><span class="pln"> </span><span class="lit">1</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      val </span><span class="pun">=</span><span class="pln"> val </span><span class="pun">+</span><span class="pln"> </span><span class="typ">WarpSpeed</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="kwd">else</span><span class="pun">{</span><span class="pln">
      val </span><span class="pun">=</span><span class="pln"> val </span><span class="pun">-</span><span class="pln"> </span><span class="typ">WarpSpeed</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">}</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">dif </span><span class="pun">&gt;=</span><span class="pln"> </span><span class="typ">JumpSpeed</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">dir </span><span class="pun">==</span><span class="pln"> </span><span class="lit">1</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      val </span><span class="pun">=</span><span class="pln"> val </span><span class="pun">+</span><span class="pln"> </span><span class="typ">JumpSpeed</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="kwd">else</span><span class="pun">{</span><span class="pln">
      val </span><span class="pun">=</span><span class="pln"> val </span><span class="pun">-</span><span class="pln"> </span><span class="typ">JumpSpeed</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">}</span><span class="kwd">else</span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">dir </span><span class="pun">==</span><span class="pln"> </span><span class="lit">1</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
      val </span><span class="pun">=</span><span class="pln"> val </span><span class="pun">+</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="kwd">else</span><span class="pun">{</span><span class="pln">
      val </span><span class="pun">=</span><span class="pln"> val </span><span class="pun">-</span><span class="pln"> </span><span class="lit">1</span><span class="pun">;</span><span class="pln">
    </span><span class="pun">}</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="com">//Correct Rotation within 360 deg.</span><span class="pln">
  </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">val </span><span class="pun">&lt;</span><span class="pln"> </span><span class="lit">0</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    val </span><span class="pun">=</span><span class="pln"> val </span><span class="pun">+</span><span class="pln"> </span><span class="lit">360</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">val </span><span class="pun">&gt;=</span><span class="pln"> </span><span class="lit">360</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">        
    val </span><span class="pun">=</span><span class="pln"> val </span><span class="pun">-</span><span class="pln"> </span><span class="lit">360</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
  </span><span class="kwd">return</span><span class="pln"> val</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre>

	<p>
		 
	</p>
</details><p>
	 
</p>

<p>
	<br><span style="font-size:20px;"><span style="color:#27ae60;"><u><strong>Here's a cost breakdown:</strong></u></span></span>
</p>

<p>
	<span style="font-size:16px;">Pro Micro  (clone of Sparkfun Pro Micro board sold by KeeYees) (3 pack)  -  $15.99<br><a href="https://www.amazon.com/gp/product/B07FXCTVQP/" rel="external nofollow">https://www.amazon.com/gp/product/B07FXCTVQP/</a><br><span style="color:#27ae60;">$5.33 per board</span></span>
</p>

<p>
	<span style="font-size:16px;">PCB Prototype Board Kit  -  $15.99<br><a href="https://www.amazon.com/gp/product/B07CK3RCKS/" rel="external nofollow">https://www.amazon.com/gp/product/B07CK3RCKS/</a> <br><span style="color:#27ae60;">$0.25 (just a guestimate - it's one part out of a huge kit)</span></span>
</p>

<p>
	<span style="font-size:16px;">360 Degree Rotary Encoders (5 pack w/knob caps)  -  $8.89<br><a href="https://www.amazon.com/gp/product/B07DM2YMT4/" rel="external nofollow">https://www.amazon.com/gp/product/B07DM2YMT4/</a><br><span style="color:#27ae60;">$3.56 for 2 dials</span></span>
</p>

<p>
	<span style="font-size:16px;">Microsuction Tape (25cm X 30cm Sheet)  -  $14.95<br><a href="https://www.amazon.com/gp/product/B00M7FC1K8/" ipsnoembed="true" rel="external nofollow">https://www.amazon.com/gp/product/B00M7FC1K8/</a><br><span style="color:#27ae60;">$0.12 (just a guestimate - used 1.5cm x 6cm strip of a huge sheet)</span></span>
</p>

<p>
	<span style="font-size:16px;">NetDot 5ft Braided Magnetic Tip USB Micro Cable (3 pack)  -  $13.90<br><a href="https://www.amazon.com/gp/product/B074TB8XTL/" rel="external nofollow">https://www.amazon.com/gp/product/B074TB8XTL/</a><br><span style="color:#27ae60;">$4.64 for 1 cord</span></span>
</p>

<p>
	<em>(Not taking into account things like double sided sticky tape, solder, wires, or shrink wrap tubing segments used because they cost less than a few pennies)</em>
</p>

<p>
	<span style="color:#f1c40f;"><u><span style="font-size:22px;"><strong>Total:</strong></span></u></span><br><strong><span style="font-size:22px;"><span style="color:#2ecc71;">$13.65 (USD)</span></span></strong>
</p>

<p>
	_________________________________
</p>

<p>
	<span style="font-size:16px;">I spent a fair bit more money than I initially expected to (almost $55!), but much of that went towards components or materials that I'll be able to use for several projects in the future.  At about $14 bucks, it is twice what I thought it would be per unit, so that will help me to better gauge other ideas.  It seemed like it would be cheap as dirt, using many parts I already owned, but it all adds up - they don't sell less than a sheet of micro-suction tape, and buying control boards in bulk is the only wise way to do it (if you can call 3 units "bulk", that is).</span>
</p>

<p>
	<br><span style="font-size: 16px;">In conclusion, it was great to have an idea, play around with some proof of concepts, and then make it into a reality within a few days.  Single game controllers today.... one day, a full cockpit of switches!  Not sure what my next project will be, but among other ideas, I've considered making a custom control board for Kerbal Space Program, or maybe some kind of wireless gear that can connect to a computer and translate into RF to control some DIY RC cars or whatever with my Xbox controller already attached to my PC.  Eventually, I want to get into wireless stuff, and even RC, but I might start with button boards that use USB cables just like this one. </span>
</p>

<p>
	<span style="font-size: 16px;">If anyone has any questions on this project, feel free to ask.</span>
</p>

<p>
	<br><span style="font-size:16px;">Thanks for reading! </span>
</p>
]]></description><guid isPermaLink="false">32</guid><pubDate>Sat, 15 Jun 2019 08:25:05 +0000</pubDate></item><item><title>DIY - Wireless TrackClip Pro mod for TrackIR</title><link>https://veterans-gaming.com/blogs/entry/30-diy-wireless-trackclip-pro-mod-for-trackir/</link><description><![CDATA[
<p>
	<br><img alt="qLBxVFn.jpg" class="ipsImage ipsAttachLink_image ipsAttachLink_left" height="750" src="https://i.imgur.com/qLBxVFn.jpg" style="width: 500px; height: auto; float: left;" width="1000"></p>

<p>
	<span style="font-size:16px;"> I bought a Logitech G933 wireless headset last year and I'd like to make my TrackIR TrackClip Pro into a wireless unit as well.  I need to be able to remove it from the G933 when not in use, TrackClip Pro's break if you look at them too hard, so taking it off is a primary requirement.  I'll want to be able to recharge it with the same cord the G933 uses, too.  I'm not a pro at this stuff, so any thing that works well and doesn't cost too much will be just fine with me.</span>
</p>

<p>
	<span style="font-size:16px;">I know that if I ramp up the voltage from one single 3.7V battery, I can achieve 5V @ 1A for the 3 LED's on the TrackClip, and should retain a duration of more than 4 hours (overly hopeful estimate).  I'll need to do some testing, if I have to, I'll use the second 3.7V battery like in the image here just for longer time between charges.</span>
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<span style="font-size:24px;"><span style="color:#dba901;"><u><strong>My DIY TrackIR "Wireless Rechargeable" Track Clip Pro mod</strong></u></span></span><br><span style="font-size:12px;"><em>*parts list with links at bottom</em></span><br>
	 
</p>

<p>
	<span style="font-size:18px;"><strong>The initial goals I had once I began were:</strong></span><img alt="hI7g3Yf.jpg" class="ipsImage ipsAttachLink_image ipsAttachLink_right" height="750" src="https://i.imgur.com/hI7g3Yf.jpg" style="width: 500px; height: auto; float: right;" width="1000"></p>

<ul>
<li>
		<span style="font-size:16px;">Tiny form-factor, less than 5cm long, less than 2.5cm wide &amp; tall</span>
	</li>
	<li>
		<span style="font-size:16px;">Can power TrackClip for between 4-8 hours continuously</span>
	</li>
	<li>
		<span style="font-size:16px;">Tiny on-off slider switch</span>
	</li>
	<li>
		<span style="font-size:16px;">Rechargeable via micro-A USB female plugin</span>
	</li>
	<li>
		<span style="font-size:16px;">Output to TrackClip via USB (type A) female outlet plug (as in picture above)</span>
	</li>
	<li>
		<span style="font-size:16px;">Encased in semi-rigid form like shrink wrap, adapted plastic case, or custom 3D printed plastic case</span>
	</li>
	<li>
		<span style="font-size:16px;">Velcro strap to easily mount on headphones</span>
	</li>
	<li>
		<span style="font-size:16px;">Total cost for one single powerpack unit less than $10 USD  </span>
	</li>
</ul>
<p>
	 
</p>

<p>
	<br><img alt="fnvI6Vr.jpg" class="ipsImage ipsAttachLink_image ipsAttachLink_left" height="750" src="https://i.imgur.com/fnvI6Vr.jpg" style="width: 500px; height: auto; float: left;" width="1000"> 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">Soldering leads to the TP4056 (03962A) Charging Board with Protection.  This is the brains of this unit, and will make sure the rechargeable 3.7V battery will not discharge past 2.5V and will not recharge over 4.2V.  It acts as the buffer between the battery and the voltage booster.</span>
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<img alt="rHLDhRw.jpg" class="ipsImage ipsAttachLink_image ipsAttachLink_right" height="750" src="https://i.imgur.com/rHLDhRw.jpg" style="width: 500px; height: auto; float: right;" width="1000"> 
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">Here is the 03962A Charging Board and battery holder wired to the MT3608 DC to DC Step Up Boost Converter.  I did this for initial testing and to set the trim-pot (blue square box with round brass peg) on the boost converter from the 18V setting it shipped with to the 5V that I need.  It will take the 3.7 Volt battery and step up its voltage to something usable by the TrackClip Pro without the need for a second battery.</span>
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<br><img alt="hKiHu6f.jpg" class="ipsImage ipsAttachLink_image ipsAttachLink_left" height="750" src="https://i.imgur.com/hKiHu6f.jpg" style="width: 500px; height: auto; float: left;" width="1000"></p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<span style="font-size:16px;">Trying to keep the size small, mounting the breakout boards close together makes it about the size of a stick of gum, plus the AAA sized battery.  I put a USB female plug in for size reference along with the Bic lighter.  The 10440 is a 3.7 Volt Lithium Ion rechargeable battery in a AAA size.  According to a features sheet on a batteries info website, "Lighter weight and higher energy density than any other rechargeable battery".  I'll be ramping up it's voltage to a full 5V.</span>
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<br><img alt="c25gjkN.jpg" class="ipsImage ipsAttachLink_image ipsAttachLink_right" height="750" src="https://i.imgur.com/c25gjkN.jpg" style="width: 500px; height: auto; float: right;" width="1000"><span style="font-size:16px;">I used a portion of shrink wrap tubing around the 03962A Charging Board on the left, and MT3608 Boost Converter on the right is hot glued to the battery holder and to the 03962A in the middle.</span>
</p>

<p>
	<span style="font-size:16px;">Through the shrink wrap I cut holes for the LED indicator lights on the charging board.  The tiny switch has a pin through the breakout board and is soldered in place, with another pin bent and wrapped around the edge of the board, and soldered to it's wire (I didn't have red shrink wrap, but the thicker top right wire is the load line, and is red under there).  Even with all of that, I just don't trust tiny switches to stay in place and solder is not structural, so it got a healthy dose from the hot glue gun.  As you can see, I've used the highly skilled technique known as "just glob it on".</span>
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<br><img alt="OjjV4BX.jpg" class="ipsImage ipsAttachLink_image ipsAttachLink_left" height="750" src="https://i.imgur.com/OjjV4BX.jpg" style="width: 500px; height: auto; float: left;" width="1000">   <img alt="UNQlfmT.jpg" class="ipsImage ipsAttachLink_image ipsAttachLink_right" height="750" src="https://i.imgur.com/UNQlfmT.jpg" style="width: 500px; height: auto; float: right;" width="1000"><span style="font-size: 16px;">I've cut the cord on the Track Clip Pro, spliced the wires to the Boost Converter, and used shrink wrap tubing to contain the entire unit.  I've left a bit of the wire jacket hanging below the wires and hot glued in place, and then shrink wrapped under a little tension. This causes a slight bend in the wire, shown in these pics and it helps the unit bend the newly magnetic end inwards to the screw under this panel.</span>
</p>

<p>
	<span style="font-size:16px;">A NetDot micro-USB magnetic adapter makes connecting a charging cable easy, and gives one end of my battery pack a strong magnet to work with. The NetDot magnetic charging adapter is so strong it is very well stuck to the screw on the corner of the G933 headset under the panel.  It doesn't come off and swing around when I move my head around, and that's all that really matters to me.  Function before looks.</span>
</p>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<br><img alt="8J2MzkV.jpg" class="ipsImage ipsAttachLink_image" height="750" src="https://i.imgur.com/8J2MzkV.jpg" style="width: 500px; height: auto;" width="1000"><img alt="sJ8UdQ7.jpg" class="ipsImage ipsAttachLink_image" height="750" src="https://i.imgur.com/sJ8UdQ7.jpg" style="width: 500px; height: auto;" width="1000"></p>

<p>
	<span style="font-size:18px;">It's finally finished and working great!  I expect it will last for a few years before I'll want to carve off the outer shrink wrap and replace the 10440 battery, and seal it back up with a new shrink wrap tube (and some new cut-outs for the switch and lights).</span><br><br><span style="font-size:20px;"><span style="color:#27ae60;"><u><strong>Here's a cost breakdown:</strong></u></span></span>
</p>

<p>
	<span style="font-size:16px;">NetDot Magnetic Bi-Directional microUSB Plug Adapters<br><a href="https://www.amazon.com/NetDot-Generation-Magnetic-Adapter-Compatible/dp/B076QC2RQT/" ipsnoembed="true" rel="external nofollow">https://www.amazon.com/NetDot-Generation-Magnetic-Adapter-Compatible/dp/B076QC2RQT/</a><br><span style="color:#27ae60;">$4 (per male/female adapter pair)</span></span>
</p>

<p>
	<span style="font-size:16px;">TP4056 (03962A) Charging Board with Protection<br>
	MT3608 DC to DC Step Up Boost Converter<br>
	(in a pack with 3 of each board, plus 5 battery holders)<br><a href="https://www.amazon.com/dp/B07NHHCNNQ" ipsnoembed="true" rel="external nofollow">https://www.amazon.com/dp/B07NHHCNNQ</a><br><span style="color:#27ae60;">$1.00 per breakout board</span></span>
</p>

<p>
	<span style="font-size:16px;">The battery holder I used was actually the AAA type:<br><a href="https://www.amazon.com/gp/product/B07C2XT5C5" ipsnoembed="true" rel="external nofollow">https://www.amazon.com/gp/product/B07C2XT5C5</a><br><span style="color:#27ae60;">$0.58 (one)</span></span>
</p>

<p>
	<span style="font-size:16px;">3.7V 10440 AAA Lithium Ion Rechargeable Battery (x4 @11.69 - w/Charger $19.09)*(note: these are NOT AAA batteries! They must be charged with a special charger, and shouldn't be used for normal AAA battery powered devices!)<br><a href="https://www.amazon.com/10440-Rechargeable-Lithium-Battery-350mah/dp/B010ABNW5S/" ipsnoembed="true" rel="external nofollow">https://www.amazon.com/10440-Rechargeable-Lithium-Battery-350mah/dp/B010ABNW5S/</a><br><em>(or)</em><br><a href="https://www.amazon.com/10440-Lithium-Rechargeable-Battery-Charger/dp/B06X9TZ1CG/" ipsnoembed="true" rel="external nofollow">https://www.amazon.com/10440-Lithium-Rechargeable-Battery-Charger/dp/B06X9TZ1CG/</a><br><span style="color:#27ae60;">$2.92 / battery</span></span>
</p>

<p>
	<span style="font-size:16px;">Tiny switch with nice long legs (they come in a pack of a hundred for six bucks):<br><a href="https://www.amazon.com/gp/product/B0777GWVWL" rel="external nofollow">https://www.amazon.com/Cylewet-Vertical-Switch-Arduino-CYT1016/dp/B01N7NCW8N/</a><br><span style="color:#27ae60;">$0.06 (one)</span></span>
</p>

<p>
	<em>(Not taking into account things like hot glue sticks, solder, tape, or shrink wrap tubing segments used because they cost less than a few pennies)</em>
</p>

<p>
	<span style="color:#f1c40f;"><u><span style="font-size:22px;"><strong>Total:</strong></span></u></span><br><strong><span style="font-size:22px;"><span style="color:#2ecc71;">$9.56 (USD)</span></span></strong>
</p>

<p>
	_________________________________
</p>

<p>
	<span style="font-size:16px;">Looking back to the start, I've met my goals or caused some to become redundant (like velcro) and the cost for this single battery unit was less than $10, though I do have enough parts to make 2 more, I'm happy to put those in my Arduino projects bins and eat the costs there.</span>
</p>

<p>
	<span style="font-size:16px;">This thing cost me about ten bucks, it works well, and I also have another $26 in extra parts (NetDot's and 3.7V batteries, battery holders, charging and boost breakout boards...).  I learned a bit about larger shrink wrap tubing, it only shrinks so far.  And I think it was all worth it.  Had a flight earlier, with 8 minutes to taxi, I just got up out of my PC chair from a hot pit, and walked over to the fridge to get a soda all without taking off my headset or TrackClip Pro, strolling around while listening in to the Tower and waiting for my clearance to taxi.  It was a feeling of true freedom!</span>
</p>

<p>
	<span style="font-size:16px;">If anyone has any questions on this mod, I'd be happy to help if I can. <br><br>
	See you at Angels 20!</span>
</p>
]]></description><guid isPermaLink="false">30</guid><pubDate>Sat, 08 Jun 2019 01:07:22 +0000</pubDate></item></channel></rss>
