{"id":365,"date":"2011-02-17T10:42:11","date_gmt":"2011-02-17T10:42:11","guid":{"rendered":"http:\/\/louisc.co.uk\/FYP\/?p=365"},"modified":"2015-01-13T23:40:23","modified_gmt":"2015-01-13T23:40:23","slug":"calculating-the-fade-mathematics","status":"publish","type":"post","link":"https:\/\/louisc.co.uk\/?p=365","title":{"rendered":"Calculating the Fade Mathematics"},"content":{"rendered":"<p>A C++ program was written to aid the design of code to be used to calculate and then implement fades on the driver unit.<\/p>\n<p>The program reads in all of the values which would be sent over a standard radio packet. This is | BAR | RED Val| GREEN Val | BLUE Val | Fade Time | . It then collects some information which the system will already know, this is the current values of the selected bar. Once it had this information it manually calls an &#8220;outUpdate&#8221; which will write the output to the TLC chip and in turn the LED&#8217;s. For this test the command call to the TLC to change the outputs was commented out and replaced with a cout command so that the output is printed to the console.<\/p>\n<p>Here is the code:<\/p>\n<h3>Fade_Maths.cpp<\/h3>\n<pre class=\"brush: cpp\">#include\r\n#include\r\nusing namespace std;\r\n\r\n#define FADE_ITERATION_TIME 5\r\n\r\n\/\/DEFINE VARIABLES HERE\r\nuint16_t command[5];\r\nfloat currentval[16];\r\nfloat RememberChanVal[16];\r\nuint16_t stepcount[16];\r\nfloat stepsize[16];\r\n\r\n\/\/ PROTOTYPE FUNCTIONS\r\nvoid cinCommand();\r\nvoid setFade();\r\nvoid stepFade(uint8_t chan);\r\nvoid outUpdate();\r\n\r\nint main()\r\n{\r\n    cinCommand();\r\n    setFade();\r\n    outUpdate();\r\n\r\n    return 0;\r\n}\r\n\r\nvoid cinCommand()\r\n{\r\n    cout &lt;&lt; \"Enter Bar:\" &lt;&lt; endl;     cin &gt;&gt; command[0];\r\n    cout &lt;&lt; \"Enter RED value:\" &lt;&lt; endl;     cin &gt;&gt; command[1];\r\n    cout &lt;&lt; \"Enter GREEN value:\" &lt;&lt; endl;     cin &gt;&gt; command[2];\r\n    cout &lt;&lt; \"Enter BLUE value:\" &lt;&lt; endl;     cin &gt;&gt; command[3];\r\n    cout &lt;&lt; \"Enter Fade Time:\" &lt;&lt; endl;     cin &gt;&gt; command[4];\r\n    cout &lt;&lt; endl;\r\n    for(int x = 0 ; x &lt; 3 ; x++)\r\n\t\t{\r\n        cout &lt;&lt; \"Current Val for selected bar \" &lt;&lt; command[0]\r\n        &lt;&lt; \" colour \" &lt;&lt; x &lt;&lt; \" Array Element \"\r\n        &lt;&lt; ((3*command[0])+x) &lt;&lt; endl;         cin &gt;&gt; currentval[(3*command[0])+x];\r\n\t\t}\r\n     cout &lt;&lt; endl;\r\n}\r\n\r\nvoid setFade()\r\n{\r\n\t\tfloat difference;\r\n\r\n\t\tif( command[4] &lt; FADE_ITERATION_TIME) \/\/ If the fade time is set to less than 5, then instant change, so set to 5 which will mean change in single step.\r\n            command[4] = FADE_ITERATION_TIME;\r\n\r\n        for(int x = 0 ; x &lt; 3 ; x++)\r\n\t\t{\r\n\t\t\tuint16_t sentval = command[x+1];\r\n\t\t\tdifference = (( 4095 - sentval ) - currentval[(3*command[0])+x]);\r\n\t\t\tstepcount[(3*command[0])+x] =  command[4]  \/ FADE_ITERATION_TIME;\r\n\t\t\tstepsize[(3*command[0])+x] = difference \/ (float)stepcount[(3*command[0])+x];\r\n\r\n\t\t\tcout &lt;&lt; \"Colour \" &lt;&lt; x &lt;&lt; \" array element \" &lt;&lt; ((3*command[0])+x)\r\n\t\t\t&lt;&lt; \" Current Value \" &lt;&lt;  currentval[(3*command[0])+x]\r\n\t\t\t&lt;&lt; \" difference \" &lt;&lt; difference &lt;&lt; \" stepcount \"\r\n\t\t\t&lt;&lt;  stepcount[(3*command[0])+x] &lt;&lt; \" stepsize \"\r\n\t\t\t&lt;&lt; stepsize[(3*command[0])+x] &lt;&lt; endl;\r\n\t\t}\r\n\r\n}\r\n\r\nvoid stepFade(uint8_t chan)\r\n\t{\r\n\t\tRememberChanVal[chan]= currentval[chan] + stepsize[chan];\r\n\t\tif( RememberChanVal[chan] &lt; 0 )\r\n\t\t\tRememberChanVal[chan] = 0;\r\n\t\t\/\/Tlc.set( chan, int(RememberChanVal[chan]) );\r\n\t\tcout &lt;&lt; \"channel \" &lt;&lt; (int)chan &lt;&lt; \" Remember Chan Val \"\r\n\t\t&lt;&lt; int(RememberChanVal[chan]) &lt; 0)\r\n\t\t\t\t {\r\n\t\t\t\t\tstepFade(chan);\r\n\t\t\t\t\tfadeincomplete = stepcount[chan];\r\n\t\t\t     }\r\n\t\t\t\t}\r\n\r\n\t\t\t\t\/\/Tlc.update();\r\n        }\r\n    }<\/pre>\n<h3>The console output of the above code for a simple example:<\/h3>\n<pre class=\"brush: cpp\">Enter Bar:\r\n0\r\nEnter RED value:\r\n4075\r\nEnter GREEN value:\r\n4075\r\nEnter BLUE value:\r\n4075\r\nEnter Fade Time:\r\n100\r\n\r\nCurrent Val for selected bar 0 colour 0 Array Element 0\r\n0\r\nCurrent Val for selected bar 0 colour 1 Array Element 1\r\n0\r\nCurrent Val for selected bar 0 colour 2 Array Element 2\r\n0\r\n\r\nColour 0 array element 0 Current Value 0 difference 20 stepcount 20 stepsize 1\r\nColour 1 array element 1 Current Value 0 difference 20 stepcount 20 stepsize 1\r\nColour 2 array element 2 Current Value 0 difference 20 stepcount 20 stepsize 1\r\nchannel 0 Remember Chan Val 1\r\nchannel 1 Remember Chan Val 1\r\nchannel 2 Remember Chan Val 1\r\nchannel 0 Remember Chan Val 2\r\nchannel 1 Remember Chan Val 2\r\nchannel 2 Remember Chan Val 2\r\nchannel 0 Remember Chan Val 3\r\nchannel 1 Remember Chan Val 3\r\nchannel 2 Remember Chan Val 3\r\nchannel 0 Remember Chan Val 4\r\nchannel 1 Remember Chan Val 4\r\nchannel 2 Remember Chan Val 4\r\nchannel 0 Remember Chan Val 5\r\nchannel 1 Remember Chan Val 5\r\nchannel 2 Remember Chan Val 5\r\nchannel 0 Remember Chan Val 6\r\nchannel 1 Remember Chan Val 6\r\nchannel 2 Remember Chan Val 6\r\nchannel 0 Remember Chan Val 7\r\nchannel 1 Remember Chan Val 7\r\nchannel 2 Remember Chan Val 7\r\nchannel 0 Remember Chan Val 8\r\nchannel 1 Remember Chan Val 8\r\nchannel 2 Remember Chan Val 8\r\nchannel 0 Remember Chan Val 9\r\nchannel 1 Remember Chan Val 9\r\nchannel 2 Remember Chan Val 9\r\nchannel 0 Remember Chan Val 10\r\nchannel 1 Remember Chan Val 10\r\nchannel 2 Remember Chan Val 10\r\nchannel 0 Remember Chan Val 11\r\nchannel 1 Remember Chan Val 11\r\nchannel 2 Remember Chan Val 11\r\nchannel 0 Remember Chan Val 12\r\nchannel 1 Remember Chan Val 12\r\nchannel 2 Remember Chan Val 12\r\nchannel 0 Remember Chan Val 13\r\nchannel 1 Remember Chan Val 13\r\nchannel 2 Remember Chan Val 13\r\nchannel 0 Remember Chan Val 14\r\nchannel 1 Remember Chan Val 14\r\nchannel 2 Remember Chan Val 14\r\nchannel 0 Remember Chan Val 15\r\nchannel 1 Remember Chan Val 15\r\nchannel 2 Remember Chan Val 15\r\nchannel 0 Remember Chan Val 16\r\nchannel 1 Remember Chan Val 16\r\nchannel 2 Remember Chan Val 16\r\nchannel 0 Remember Chan Val 17\r\nchannel 1 Remember Chan Val 17\r\nchannel 2 Remember Chan Val 17\r\nchannel 0 Remember Chan Val 18\r\nchannel 1 Remember Chan Val 18\r\nchannel 2 Remember Chan Val 18\r\nchannel 0 Remember Chan Val 19\r\nchannel 1 Remember Chan Val 19\r\nchannel 2 Remember Chan Val 19\r\nchannel 0 Remember Chan Val 20\r\nchannel 1 Remember Chan Val 20\r\nchannel 2 Remember Chan Val 20\r\n\r\nProcess returned 0 (0x0)   execution time : 54.114 s\r\nPress any key to continue.<\/pre>\n<p>The next stage is to adapt this to the Arduino library.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A C++ program was written to aid the design of code to be used to calculate and then implement fades on the driver unit. The program reads in all of the values which would be sent over a standard radio packet. This is | BAR | RED Val| GREEN Val | BLUE Val | Fade Time | . It then collects some information which the system will already know, this is the current values of the selected [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":473,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[32],"tags":[34,35,42],"class_list":["post-365","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-lightive-reactive-lighting-system","tag-arduino","tag-atmel","tag-c"],"_links":{"self":[{"href":"https:\/\/louisc.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/365","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/louisc.co.uk\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/louisc.co.uk\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/louisc.co.uk\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/louisc.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=365"}],"version-history":[{"count":17,"href":"https:\/\/louisc.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/365\/revisions"}],"predecessor-version":[{"id":2136,"href":"https:\/\/louisc.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/365\/revisions\/2136"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/louisc.co.uk\/index.php?rest_route=\/wp\/v2\/media\/473"}],"wp:attachment":[{"href":"https:\/\/louisc.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=365"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/louisc.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=365"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/louisc.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=365"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}