{"id":92,"date":"2011-01-05T23:35:50","date_gmt":"2011-01-05T23:35:50","guid":{"rendered":"http:\/\/paulsarduino.co.uk\/?page_id=92"},"modified":"2011-01-05T23:36:03","modified_gmt":"2011-01-05T23:36:03","slug":"nunchuck-3d","status":"publish","type":"page","link":"https:\/\/paulsarduino.co.uk\/?page_id=92","title":{"rendered":"Nunchuck 3D"},"content":{"rendered":"<pre>#include &lt;math.h&gt;\r\n#include &lt;Wire.h&gt;\r\n#include &lt;WiiChuck.h&gt;\r\n#include &lt;TVout.h&gt;\r\n#include &lt;stdio.h&gt;\r\n#include \"notedefs.h\"\r\n#include \"lib3d.h\"\r\n\r\n#define\u00a0\u00a0\u00a0 SETUP_WIDTH\u00a0 120\r\n#define\u00a0\u00a0\u00a0 WIDTH\u00a0\u00a0 119\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ visible width...\r\n#define\u00a0\u00a0\u00a0 HEIGHT\u00a0 96\r\n\r\n#define\u00a0\u00a0\u00a0 SOUND_OUT_PIN\u00a0\u00a0\u00a0 2\r\n\r\n#define\u00a0\u00a0\u00a0 MAX_ROLL\u00a0 15\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ nunchuck max roll\r\n#define\u00a0\u00a0\u00a0 MAX_PITCH\u00a0 90\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ nunchuck max pitch\r\n\r\nTVout\u00a0\u00a0\u00a0\u00a0 cTV;\r\nWiiChuck\u00a0 cChuck = WiiChuck();\r\n\r\nScene3D\u00a0 cScene;\r\n\r\nint\u00a0\u00a0\u00a0 iLeftY = HEIGHT \/ 2;\r\nint\u00a0\u00a0\u00a0 iRightY = HEIGHT \/ 2;\r\n\r\nint angleStart, currentAngle;\r\nint tillerStart = 0;\r\ndouble angle;\r\n\r\n#define\u00a0 CUBE\u00a0\u00a0\u00a0 20\r\n\r\nvoid setup()\r\n{\r\n cChuck.begin();\r\n cChuck.update();\r\n cChuck.calibrateJoy();\r\n\r\n cTV.begin(_PAL,SETUP_WIDTH,HEIGHT);\u00a0\u00a0 \u00a0\/\/for devices with only 1k sram(m168) use TV.begin(_PAL,128,56)\r\n cTV.clear_screen();\r\n\r\n cScene.CreateScene(WIDTH,HEIGHT,&amp;cTV);\r\n cScene.AddCube(0,0,0,CUBE);\r\n}\r\n\r\nvoid loop()\r\n{\r\n char\u00a0\u00a0\u00a0 buffer[20];\r\n int\u00a0\u00a0\u00a0\u00a0 iRoll;\r\n float\u00a0\u00a0 fRollAngle;\r\n int\u00a0\u00a0\u00a0\u00a0 iPitch;\r\n float\u00a0\u00a0 fPitchAngle;\r\n\r\n cTV.delay_frame(1);\r\n cChuck.update();\r\n cTV.clear_screen();\r\n\r\n iRoll = cChuck.readRoll();\r\n fRollAngle = (PI * iRoll)\/MAX_ROLL;\r\n\r\n iPitch = cChuck.readPitch();\r\n fPitchAngle = (PI * iPitch)\/MAX_PITCH;\r\n\r\n sprintf(buffer,\"%d %d\",iRoll,iPitch);\r\n cTV.print_str(0,0,buffer);\r\n\r\n\/\/\u00a0 cTV.draw_line(0,iLeftY - iRoll, WIDTH, iLeftY + iRoll, 1);\r\n\r\n cScene.SetHAngle(fRollAngle);\r\n cScene.SetVAngle(fPitchAngle);\r\n cScene.UpdateDisplay();\r\n\r\n if (iRoll &gt; MAX_ROLL)\r\n {\r\n cTV.tone( NOTE_D4 );\r\n }\r\n else if (iRoll &lt; -MAX_ROLL)\r\n {\r\n cTV.tone( NOTE_B4 );\r\n }\r\n else\r\n {\r\n cTV.noTone();\r\n }\r\n\r\n\/*\r\n Serial.print(\", \"); \u00a0\r\n Serial.print(chuck.readPitch());\r\n Serial.print(\", \"); \u00a0\r\n\r\n Serial.print((int)chuck.readAccelX());\r\n Serial.print(\", \"); \u00a0\r\n Serial.print((int)chuck.readAccelY());\r\n Serial.print(\", \"); \u00a0\r\n\r\n Serial.print((int)chuck.readAccelZ());\r\n\r\n\/\/\u00a0 Serial.print(\", \");\u00a0\u00a0 \u00a0\r\n\/\/\u00a0 Serial.print((int)chuck.readJoyX());\r\n\/\/\u00a0 Serial.print(\", \"); \u00a0\r\n\/\/\u00a0 Serial.print((int)chuck.readJoyY()); \r\n\r\n Serial.println();\r\n\r\n *\/\r\n\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>#include &lt;math.h&gt; #include &lt;Wire.h&gt; #include &lt;WiiChuck.h&gt; #include &lt;TVout.h&gt; #include &lt;stdio.h&gt; #include &#8220;notedefs.h&#8221; #include &#8220;lib3d.h&#8221; #define\u00a0\u00a0\u00a0 SETUP_WIDTH\u00a0 120 #define\u00a0\u00a0\u00a0 WIDTH\u00a0\u00a0 119\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ visible width&#8230; #define\u00a0\u00a0\u00a0 HEIGHT\u00a0 96 #define\u00a0\u00a0\u00a0 SOUND_OUT_PIN\u00a0\u00a0\u00a0 2 #define\u00a0\u00a0\u00a0 MAX_ROLL\u00a0 15\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ nunchuck max roll #define\u00a0\u00a0\u00a0 MAX_PITCH\u00a0 90\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ nunchuck max pitch TVout\u00a0\u00a0\u00a0\u00a0 cTV; WiiChuck\u00a0 cChuck = WiiChuck(); Scene3D\u00a0 cScene; int\u00a0\u00a0\u00a0 iLeftY = HEIGHT [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":16,"menu_order":0,"comment_status":"open","ping_status":"open","template":"","meta":{"footnotes":""},"class_list":["post-92","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/paulsarduino.co.uk\/index.php?rest_route=\/wp\/v2\/pages\/92","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/paulsarduino.co.uk\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/paulsarduino.co.uk\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/paulsarduino.co.uk\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/paulsarduino.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=92"}],"version-history":[{"count":2,"href":"https:\/\/paulsarduino.co.uk\/index.php?rest_route=\/wp\/v2\/pages\/92\/revisions"}],"predecessor-version":[{"id":94,"href":"https:\/\/paulsarduino.co.uk\/index.php?rest_route=\/wp\/v2\/pages\/92\/revisions\/94"}],"up":[{"embeddable":true,"href":"https:\/\/paulsarduino.co.uk\/index.php?rest_route=\/wp\/v2\/pages\/16"}],"wp:attachment":[{"href":"https:\/\/paulsarduino.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=92"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}