<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.extremist.software/index.php?action=history&amp;feed=atom&amp;title=Hack_Notes_CVA_090326</id>
	<title>Hack Notes CVA 090326 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.extremist.software/index.php?action=history&amp;feed=atom&amp;title=Hack_Notes_CVA_090326"/>
	<link rel="alternate" type="text/html" href="https://wiki.extremist.software/index.php?title=Hack_Notes_CVA_090326&amp;action=history"/>
	<updated>2026-04-05T06:41:02Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.13</generator>
	<entry>
		<id>https://wiki.extremist.software/index.php?title=Hack_Notes_CVA_090326&amp;diff=4396&amp;oldid=prev</id>
		<title>Elgreengeeto: /* The Code */</title>
		<link rel="alternate" type="text/html" href="https://wiki.extremist.software/index.php?title=Hack_Notes_CVA_090326&amp;diff=4396&amp;oldid=prev"/>
		<updated>2009-04-10T18:04:08Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;The Code&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:04, 10 April 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l235&quot;&gt;Line 235:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 235:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Image: anklethack-12.jpg]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Image: anklethack-12.jpg]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Sensebridge]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Elgreengeeto</name></author>
	</entry>
	<entry>
		<id>https://wiki.extremist.software/index.php?title=Hack_Notes_CVA_090326&amp;diff=4145&amp;oldid=prev</id>
		<title>SpammerHellDontDelete: /* Task: Get 4 motors rigged */</title>
		<link rel="alternate" type="text/html" href="https://wiki.extremist.software/index.php?title=Hack_Notes_CVA_090326&amp;diff=4145&amp;oldid=prev"/>
		<updated>2009-04-04T18:26:29Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Task: Get 4 motors rigged&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:26, 4 April 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l10&quot;&gt;Line 10:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 10:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Task: Get 4 motors rigged=&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Task: Get 4 motors rigged=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*4 &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;circtuits &lt;/del&gt;put on one crowded breadboard.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*4 &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;circuits &lt;/ins&gt;put on one crowded breadboard.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*Set the two remaining binary pins as output, using digitalWrite(pin_num, HIGH/LOW)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*Set the two remaining binary pins as output, using digitalWrite(pin_num, HIGH/LOW)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*Ummm our pulses are broken. ??? we aren&amp;#039;t doing the digitalWrite right somehow?&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*Ummm our pulses are broken. ??? we aren&amp;#039;t doing the digitalWrite right somehow?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>SpammerHellDontDelete</name></author>
	</entry>
	<entry>
		<id>https://wiki.extremist.software/index.php?title=Hack_Notes_CVA_090326&amp;diff=3883&amp;oldid=prev</id>
		<title>Elgreengeeto at 06:33, 27 March 2009</title>
		<link rel="alternate" type="text/html" href="https://wiki.extremist.software/index.php?title=Hack_Notes_CVA_090326&amp;diff=3883&amp;oldid=prev"/>
		<updated>2009-03-27T06:33:46Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 23:33, 26 March 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l19&quot;&gt;Line 19:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 19:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=The Code=&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=The Code=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*Rewrite the code to activate motors directionally rather than the previous pulsing scheme. We&amp;#039;ll start by dividing the circle into eight zones, four of which cause only one motor to vibrate, and the other four defined by an overlap which causes two motors to vibrate. If it&amp;#039;s possible to detect that two adjacent ones are on rather than just one on, this could give us a resolution of 8 using just four pager motors:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*Rewrite the code to activate motors directionally rather than the previous pulsing scheme. We&amp;#039;ll start by dividing the circle into eight zones, four of which cause only one motor to vibrate, and the other four defined by an overlap which causes two motors to vibrate. If it&amp;#039;s possible to detect that two adjacent ones are on rather than just one on, this could give us a resolution of 8 using just four pager motors:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{|- &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;border = 1, padding = 2&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! Motor&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! Motor&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! Range (in degrees, 0=North)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! Range (in degrees, 0=North)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l38&quot;&gt;Line 38:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 38:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*OK, we got that working, but let&amp;#039;s try without overlapping:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*OK, we got that working, but let&amp;#039;s try without overlapping:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{|- &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;border = 1, padding = 2&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! Motor #&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! Motor #&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! Range (in degrees, 0=North)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! Range (in degrees, 0=North)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Elgreengeeto</name></author>
	</entry>
	<entry>
		<id>https://wiki.extremist.software/index.php?title=Hack_Notes_CVA_090326&amp;diff=3879&amp;oldid=prev</id>
		<title>Elgreengeeto: New page: Compass Vibro-Anklet Hack Notes 2009.03.26  =Today&#039;s Tasks= *While we&#039;re waiting on more bits and pieces, today we&#039;re just going to try and add two more pager motors and then experiement w...</title>
		<link rel="alternate" type="text/html" href="https://wiki.extremist.software/index.php?title=Hack_Notes_CVA_090326&amp;diff=3879&amp;oldid=prev"/>
		<updated>2009-03-27T06:31:05Z</updated>

		<summary type="html">&lt;p&gt;New page: Compass Vibro-Anklet Hack Notes 2009.03.26  =Today&amp;#039;s Tasks= *While we&amp;#039;re waiting on more bits and pieces, today we&amp;#039;re just going to try and add two more pager motors and then experiement w...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Compass Vibro-Anklet Hack Notes 2009.03.26&lt;br /&gt;
&lt;br /&gt;
=Today&amp;#039;s Tasks=&lt;br /&gt;
*While we&amp;#039;re waiting on more bits and pieces, today we&amp;#039;re just going to try and add two more pager motors and then experiement with the different display patterns that having two more motors allows us.&lt;br /&gt;
*The LCD display is super useful for debugging. As it is now, there are only two open pins left, neither of which will do PWM out. So to keep the LCD on for now, we&amp;#039;ll attach motors to those pins and just settle with only being able to set them full on or off.&lt;br /&gt;
**This has inspired us to order [http://search.digikey.com/scripts/DkSearch/dksus.dll?Detail&amp;amp;name=296-1351-5-ND some of these].&lt;br /&gt;
**Looking on digikey also prompted some quick research on alternative economical 3-axis compass chips since the HMC5843 that we all wanted is back ordered until May sometime. We couldn&amp;#039;t find anything good, and then diverted into discussing ways, using just software or a tilt-meter and software, to discount the outlier values we expect to be produced by compass mis-readings at the high part of a users stride - thereby allowing use of a 2-axis chip on the ankle without diaflkj....... runonsentencesyaaay.&lt;br /&gt;
&lt;br /&gt;
[[Image: anklethack-10.jpg]]&lt;br /&gt;
&lt;br /&gt;
=Task: Get 4 motors rigged=&lt;br /&gt;
*4 circtuits put on one crowded breadboard.&lt;br /&gt;
*Set the two remaining binary pins as output, using digitalWrite(pin_num, HIGH/LOW)&lt;br /&gt;
*Ummm our pulses are broken. ??? we aren&amp;#039;t doing the digitalWrite right somehow?&lt;br /&gt;
*OK, pins 0 and 1, which we were trying to use with digitalWrite(pin_num, HIGH/LOW) have some kind of crazy constraints on them and we&amp;#039;re freaking tired of debugging this business. Solution: bye-bye LCD!&lt;br /&gt;
&lt;br /&gt;
[[Image: anklethack-11.jpg]]&lt;br /&gt;
&lt;br /&gt;
=The Code=&lt;br /&gt;
*Rewrite the code to activate motors directionally rather than the previous pulsing scheme. We&amp;#039;ll start by dividing the circle into eight zones, four of which cause only one motor to vibrate, and the other four defined by an overlap which causes two motors to vibrate. If it&amp;#039;s possible to detect that two adjacent ones are on rather than just one on, this could give us a resolution of 8 using just four pager motors:&lt;br /&gt;
{|-&lt;br /&gt;
! Motor&lt;br /&gt;
! Range (in degrees, 0=North)&lt;br /&gt;
|-&lt;br /&gt;
| motor 1&lt;br /&gt;
|  -77.5 &amp;lt; angle &amp;lt;  77.5&lt;br /&gt;
|-&lt;br /&gt;
| motor 2&lt;br /&gt;
| 22.5 &amp;lt; angle &amp;lt;  177.5&lt;br /&gt;
|-&lt;br /&gt;
| motor 3&lt;br /&gt;
| 112.5 &amp;lt; angle &amp;lt; -112.5&lt;br /&gt;
|-&lt;br /&gt;
| motor 4&lt;br /&gt;
| -177.5 &amp;gt; angle &amp;gt; -22.5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*OK, we got that working, but let&amp;#039;s try without overlapping:&lt;br /&gt;
&lt;br /&gt;
{|-&lt;br /&gt;
! Motor #&lt;br /&gt;
! Range (in degrees, 0=North)&lt;br /&gt;
|-&lt;br /&gt;
| motor 1&lt;br /&gt;
|  -77.5 &amp;lt; angle &amp;lt;  77.5&lt;br /&gt;
|-&lt;br /&gt;
| motor 2&lt;br /&gt;
| 45 &amp;lt; angle &amp;lt;  135&lt;br /&gt;
|-&lt;br /&gt;
| motor 3&lt;br /&gt;
| 135 &amp;lt; angle &amp;lt; -135&lt;br /&gt;
|-&lt;br /&gt;
| motor 4&lt;br /&gt;
| -135 &amp;gt; angle &amp;gt; -45&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Results: 2 out of 2 expert testers agree, overlapping is feelable, but delivers a kind of fuzzy transition between directions that, rather than delivering a higher resolution, is confusing and less intuitive than the sharp transition felt when it is programmed without the overlap. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Some Hitachi HM55B Compass reading code copied from: kiilo kiilo@kiilo.org&lt;br /&gt;
License:  http://creativecommons.org/licenses/by-nc-sa/2.5/ch/&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;math.h&amp;gt; //&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//// VARS&lt;br /&gt;
byte VIB1_pin = 9;&lt;br /&gt;
byte VIB2_pin = 10;&lt;br /&gt;
byte VIB3_pin = 3;&lt;br /&gt;
byte VIB4_pin = 5;&lt;br /&gt;
byte CLK_pin = 6;&lt;br /&gt;
byte EN_pin = 4;&lt;br /&gt;
byte DIO_pin = 11;&lt;br /&gt;
&lt;br /&gt;
int X_Data = 0;&lt;br /&gt;
int Y_Data = 0;&lt;br /&gt;
int angle;&lt;br /&gt;
&lt;br /&gt;
int status;&lt;br /&gt;
unsigned long serialTimer = millis();&lt;br /&gt;
&lt;br /&gt;
//// FUNCTIONS&lt;br /&gt;
&lt;br /&gt;
void ShiftOut(int Value, int BitsCount) {&lt;br /&gt;
  for(int i = BitsCount; i &amp;gt;= 0; i--) {&lt;br /&gt;
    digitalWrite(CLK_pin, LOW);&lt;br /&gt;
    if ((Value &amp;amp; 1 &amp;lt;&amp;lt; i) == ( 1 &amp;lt;&amp;lt; i)) {&lt;br /&gt;
      digitalWrite(DIO_pin, HIGH);&lt;br /&gt;
      //Serial.print(&amp;quot;1&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    else {&lt;br /&gt;
      digitalWrite(DIO_pin, LOW);&lt;br /&gt;
      //Serial.print(&amp;quot;0&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    digitalWrite(CLK_pin, HIGH);&lt;br /&gt;
    delayMicroseconds(1);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int ShiftIn(int BitsCount) {&lt;br /&gt;
  int ShiftIn_result;&lt;br /&gt;
    ShiftIn_result = 0;&lt;br /&gt;
    pinMode(DIO_pin, INPUT);&lt;br /&gt;
    for(int i = BitsCount; i &amp;gt;= 0; i--) {&lt;br /&gt;
      digitalWrite(CLK_pin, HIGH);&lt;br /&gt;
      delayMicroseconds(1);&lt;br /&gt;
      if (digitalRead(DIO_pin) == HIGH) {&lt;br /&gt;
        ShiftIn_result = (ShiftIn_result &amp;lt;&amp;lt; 1) + 1; &lt;br /&gt;
      }&lt;br /&gt;
      else {&lt;br /&gt;
        ShiftIn_result = (ShiftIn_result &amp;lt;&amp;lt; 1) + 0;&lt;br /&gt;
      }&lt;br /&gt;
      digitalWrite(CLK_pin, LOW);&lt;br /&gt;
      delayMicroseconds(1);&lt;br /&gt;
    }&lt;br /&gt;
  //Serial.print(&amp;quot;:&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
// below is difficult to understand:&lt;br /&gt;
// if bit 11 is Set the value is negative&lt;br /&gt;
// the representation of negative values you&lt;br /&gt;
// have to add B11111000 in the upper Byte of&lt;br /&gt;
// the integer.&lt;br /&gt;
// see: http://en.wikipedia.org/wiki/Two%27s_complement&lt;br /&gt;
  if ((ShiftIn_result &amp;amp; 1 &amp;lt;&amp;lt; 11) == 1 &amp;lt;&amp;lt; 11) {&lt;br /&gt;
    ShiftIn_result = (B11111000 &amp;lt;&amp;lt; 8) | ShiftIn_result; &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  return ShiftIn_result;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void HM55B_Reset() {&lt;br /&gt;
  pinMode(DIO_pin, OUTPUT);&lt;br /&gt;
  digitalWrite(EN_pin, LOW);&lt;br /&gt;
  ShiftOut(B0000, 3);&lt;br /&gt;
  digitalWrite(EN_pin, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void HM55B_StartMeasurementCommand() {&lt;br /&gt;
  pinMode(DIO_pin, OUTPUT);&lt;br /&gt;
  digitalWrite(EN_pin, LOW);&lt;br /&gt;
  ShiftOut(B1000, 3);&lt;br /&gt;
  digitalWrite(EN_pin, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int HM55B_ReadCommand() {&lt;br /&gt;
  int result = 0;&lt;br /&gt;
  pinMode(DIO_pin, OUTPUT);&lt;br /&gt;
  digitalWrite(EN_pin, LOW);&lt;br /&gt;
  ShiftOut(B1100, 3);&lt;br /&gt;
  result = ShiftIn(3);&lt;br /&gt;
  return result;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  pinMode(EN_pin, OUTPUT);&lt;br /&gt;
  pinMode(CLK_pin, OUTPUT);&lt;br /&gt;
  pinMode(DIO_pin, INPUT);&lt;br /&gt;
&lt;br /&gt;
  pinMode(VIB1_pin, OUTPUT);&lt;br /&gt;
  pinMode(VIB2_pin, OUTPUT);&lt;br /&gt;
  pinMode(VIB3_pin, OUTPUT);&lt;br /&gt;
  pinMode(VIB4_pin, OUTPUT);&lt;br /&gt;
&lt;br /&gt;
  HM55B_Reset();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
 if ((millis() - serialTimer) &amp;gt; 50 ) {&lt;br /&gt;
&lt;br /&gt;
  //read compass and print data to serial out&lt;br /&gt;
  HM55B_StartMeasurementCommand(); // necessary!!&lt;br /&gt;
  delay(40); // the data is 40ms later ready&lt;br /&gt;
  status = HM55B_ReadCommand();&lt;br /&gt;
  Serial.print(status); // read data and print Status&lt;br /&gt;
  Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
  X_Data = ShiftIn(11); // Field strength in X&lt;br /&gt;
  Y_Data = ShiftIn(11); // and Y direction&lt;br /&gt;
  Serial.print(X_Data); // print X strength&lt;br /&gt;
  Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
  Serial.print(Y_Data); // print Y strength&lt;br /&gt;
  Serial.print(&amp;quot; &amp;quot;);&lt;br /&gt;
  digitalWrite(EN_pin, HIGH); // ok deselect chip&lt;br /&gt;
  angle = 180 * (atan2(-1 * Y_Data , X_Data) / M_PI); // angle is atan( -y/x) !!!&lt;br /&gt;
  Serial.print(angle); // print angle&lt;br /&gt;
  Serial.println(&amp;quot; &amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  analogWrite(VIB1_pin, 0);&lt;br /&gt;
  analogWrite(VIB2_pin, 0);&lt;br /&gt;
  analogWrite(VIB3_pin, 0);&lt;br /&gt;
  analogWrite(VIB4_pin, 0);&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
  //with overlap &lt;br /&gt;
  if ((angle &amp;gt; -77.5) and (angle &amp;lt; 77.5)) {&lt;br /&gt;
    analogWrite(VIB1_pin, 215);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ((angle &amp;gt; 22.5) and (angle &amp;lt; 157.5)) {&lt;br /&gt;
    analogWrite(VIB2_pin, 215);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (((angle &amp;gt; 112.5) and (angle &amp;lt; 180)) or ((angle &amp;lt; -112.5) and (angle &amp;gt; -180))){&lt;br /&gt;
    analogWrite(VIB3_pin, 215);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ((angle &amp;gt; -157.5) and (angle &amp;lt; -22.5)) {&lt;br /&gt;
    analogWrite(VIB4_pin, 215);&lt;br /&gt;
  }    &lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
  //without overlap &lt;br /&gt;
  if ((angle &amp;gt; -45) and (angle &amp;lt; 45)) {&lt;br /&gt;
    analogWrite(VIB1_pin, 215);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ((angle &amp;gt; -135) and (angle &amp;lt; -45)) {&lt;br /&gt;
    analogWrite(VIB2_pin, 215);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (((angle &amp;gt; 135) and (angle &amp;lt; 180)) or ((angle &amp;lt; -135) and (angle &amp;gt; -180))){&lt;br /&gt;
    analogWrite(VIB3_pin, 215);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ((angle &amp;gt; 45) and (angle &amp;lt; 135)) {&lt;br /&gt;
    analogWrite(VIB4_pin, 215);&lt;br /&gt;
  }    &lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image: anklethack-12.jpg]]&lt;/div&gt;</summary>
		<author><name>Elgreengeeto</name></author>
	</entry>
</feed>