ロータリーエンコーダでサーボを動かす
Arduinoでロータリーエンコーダでサーボを動かすコードを作りました。10番ピンにサーボ、3,4番ピンにロータリーエンコーダをつなぎました。ロータリーエンコーダの検出がなかなか厄介です。可変抵抗よりノイズが少なくなることを期待したものの、うまく検知できずこちらもまだまだ課題がありそうです。
動作の様子
コード
Blocklyduinoのコードです。インポートして使えます。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<xml xmlns="http://www.w3.org/1999/xhtml"><block type="initializes_setup" id="17" x="188" y="13"><statement name="CONTENT"><block type="variables_set" id="181" inline="true"><field name="TYPE">Number</field><field name="VAR">CLK</field><value name="VALUE"><block type="math_number" id="191"><field name="NUM">0</field></block></value><next><block type="variables_set" id="219" inline="true"><field name="TYPE">Number</field><field name="VAR">DT</field><value name="VALUE"><block type="math_number" id="220"><field name="NUM">0</field></block></value><next><block type="variables_set" id="309" inline="true"><field name="TYPE">Boolean</field><field name="VAR">work</field><value name="VALUE"><block type="logic_boolean" id="324"><field name="BOOL">FALSE</field></block></value><next><block type="variables_set" id="333" inline="true"><field name="TYPE">Number</field><field name="VAR">WAVE</field><value name="VALUE"><block type="math_number" id="334"><field name="NUM">0</field></block></value><next><block type="variables_set" id="356" inline="true"><field name="TYPE">Number</field><field name="VAR">WAVE0</field><value name="VALUE"><block type="math_number" id="357"><field name="NUM">0</field></block></value><next><block type="variables_set" id="543" inline="true"><field name="TYPE">Number</field><field name="VAR">Dbit</field><value name="VALUE"><block type="math_number" id="544"><field name="NUM">0</field></block></value><next><block type="variables_set" id="723" inline="true"><field name="TYPE">Number</field><field name="VAR">Angle</field><value name="VALUE"><block type="math_number" id="726"><field name="NUM">0</field></block></value><next><block type="servo_write" id="707" inline="true"><field name="PIN">10</field><value name="ANGLE"><block type="variables_get" id="759"><field name="TYPE">Number</field><field name="VAR">Angle</field></block></value><next><block type="variables_set" id="974" inline="true"><field name="TYPE">Number</field><field name="VAR">Amp</field><value name="VALUE"><block type="math_number" id="975"><field name="NUM">3</field></block></value></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></next></block></statement><next><block type="controls_while" id="164" inline="false"><value name="BOOL"><block type="logic_boolean" id="165"><field name="BOOL">TRUE</field></block></value><statement name="DO"><block type="procedures_callnoreturn" id="573"><mutation name="make_data"></mutation><next><block type="variables_set" id="657" inline="true"><field name="TYPE">Number</field><field name="VAR">Dbit</field><value name="VALUE"><block type="math_number" id="658"><field name="NUM">0</field></block></value><next><block type="controls_if" id="371" inline="false"><value name="IF0"><block type="logic_compare" id="468" inline="true"><field name="OP">EQ</field><value name="A"><block type="variables_get" id="451"><field name="TYPE">Boolean</field><field name="VAR">work</field></block></value><value name="B"><block type="logic_boolean" id="469"><field name="BOOL">FALSE</field></block></value></block></value><statement name="DO0"><block type="controls_if" id="483" inline="false"><mutation elseif="1"></mutation><value name="IF0"><block type="logic_operation" id="415" inline="true"><field name="OP">AND</field><value name="A"><block type="logic_compare" id="421" inline="true"><field name="OP">EQ</field><value name="A"><block type="variables_get" id="396"><field name="TYPE">Number</field><field name="VAR">WAVE0</field></block></value><value name="B"><block type="math_number" id="422"><field name="NUM">0</field></block></value></block></value><value name="B"><block type="logic_compare" id="380" inline="true"><field name="OP">EQ</field><value name="A"><block type="variables_get" id="409"><field name="TYPE">Number</field><field name="VAR">WAVE</field></block></value><value name="B"><block type="math_number" id="423"><field name="NUM">1</field></block></value></block></value></block></value><statement name="DO0"><block type="variables_set" id="496" inline="true"><field name="TYPE">Boolean</field><field name="VAR">work</field><value name="VALUE"><block type="logic_boolean" id="497"><field name="BOOL">TRUE</field></block></value><next><block type="controls_while" id="511" inline="false"><value name="BOOL"><block type="logic_compare" id="513" inline="true"><field name="OP">EQ</field><value name="A"><block type="variables_get" id="514"><field name="TYPE">Boolean</field><field name="VAR">work</field></block></value><value name="B"><block type="logic_boolean" id="515"><field name="BOOL">TRUE</field></block></value></block></value><statement name="DO"><block type="procedures_callnoreturn" id="574"><mutation name="make_data"></mutation><next><block type="controls_if" id="521" inline="false"><value name="IF0"><block type="logic_operation" id="522" inline="true"><field name="OP">AND</field><value name="A"><block type="logic_compare" id="523" inline="true"><field name="OP">EQ</field><value name="A"><block type="variables_get" id="524"><field name="TYPE">Number</field><field name="VAR">WAVE0</field></block></value><value name="B"><block type="math_number" id="525"><field name="NUM">-1</field></block></value></block></value><value name="B"><block type="logic_compare" id="526" inline="true"><field name="OP">EQ</field><value name="A"><block type="variables_get" id="527"><field name="TYPE">Number</field><field name="VAR">WAVE</field></block></value><value name="B"><block type="math_number" id="528"><field name="NUM">0</field></block></value></block></value></block></value><statement name="DO0"><block type="variables_set" id="561" inline="true"><field name="TYPE">Number</field><field name="VAR">Dbit</field><value name="VALUE"><block type="math_number" id="562"><field name="NUM">1</field></block></value><next><block type="variables_set" id="529" inline="true"><field name="TYPE">Boolean</field><field name="VAR">work</field><value name="VALUE"><block type="logic_boolean" id="530"><field name="BOOL">FALSE</field></block></value></block></next></block></statement></block></next></block></statement></block></next></block></statement><value name="IF1"><block type="logic_operation" id="598" inline="true"><field name="OP">AND</field><value name="A"><block type="logic_compare" id="599" inline="true"><field name="OP">EQ</field><value name="A"><block type="variables_get" id="600"><field name="TYPE">Number</field><field name="VAR">WAVE0</field></block></value><value name="B"><block type="math_number" id="601"><field name="NUM">0</field></block></value></block></value><value name="B"><block type="logic_compare" id="602" inline="true"><field name="OP">EQ</field><value name="A"><block type="variables_get" id="603"><field name="TYPE">Number</field><field name="VAR">WAVE</field></block></value><value name="B"><block type="math_number" id="604"><field name="NUM">-1</field></block></value></block></value></block></value><statement name="DO1"><block type="variables_set" id="605" inline="true"><field name="TYPE">Boolean</field><field name="VAR">work</field><value name="VALUE"><block type="logic_boolean" id="606"><field name="BOOL">TRUE</field></block></value><next><block type="controls_while" id="607" inline="false"><value name="BOOL"><block type="logic_compare" id="608" inline="true"><field name="OP">EQ</field><value name="A"><block type="variables_get" id="609"><field name="TYPE">Boolean</field><field name="VAR">work</field></block></value><value name="B"><block type="logic_boolean" id="610"><field name="BOOL">TRUE</field></block></value></block></value><statement name="DO"><block type="procedures_callnoreturn" id="611"><mutation name="make_data"></mutation><next><block type="controls_if" id="612" inline="false"><value name="IF0"><block type="logic_operation" id="613" inline="true"><field name="OP">AND</field><value name="A"><block type="logic_compare" id="614" inline="true"><field name="OP">EQ</field><value name="A"><block type="variables_get" id="615"><field name="TYPE">Number</field><field name="VAR">WAVE0</field></block></value><value name="B"><block type="math_number" id="616"><field name="NUM">1</field></block></value></block></value><value name="B"><block type="logic_compare" id="617" inline="true"><field name="OP">EQ</field><value name="A"><block type="variables_get" id="618"><field name="TYPE">Number</field><field name="VAR">WAVE</field></block></value><value name="B"><block type="math_number" id="619"><field name="NUM">0</field></block></value></block></value></block></value><statement name="DO0"><block type="variables_set" id="620" inline="true"><field name="TYPE">Number</field><field name="VAR">Dbit</field><value name="VALUE"><block type="math_number" id="621"><field name="NUM">-1</field></block></value><next><block type="variables_set" id="622" inline="true"><field name="TYPE">Boolean</field><field name="VAR">work</field><value name="VALUE"><block type="logic_boolean" id="623"><field name="BOOL">FALSE</field></block></value></block></next></block></statement></block></next></block></statement></block></next></block></statement></block></statement><next><block type="variables_set" id="778" inline="true"><field name="TYPE">Number</field><field name="VAR">Angle</field><value name="VALUE"><block type="cast_number" id="1048" inline="true"><field name="TYPE">(int)</field><value name="VAR"><block type="math_arithmetic" id="819" inline="true"><field name="OP">ADD</field><value name="A"><block type="variables_get" id="795"><field name="TYPE">Number</field><field name="VAR">Angle</field></block></value><value name="B"><block type="math_arithmetic" id="985" inline="true"><field name="OP">MULTIPLY</field><value name="A"><block type="variables_get" id="1004"><field name="TYPE">Number</field><field name="VAR">Amp</field></block></value><value name="B"><block type="variables_get" id="836"><field name="TYPE">Number</field><field name="VAR">Dbit</field></block></value></block></value></block></value></block></value><next><block type="controls_if" id="842" inline="false"><mutation elseif="1"></mutation><value name="IF0"><block type="logic_compare" id="888" inline="true"><field name="OP">LTE</field><value name="A"><block type="variables_get" id="933"><field name="TYPE">Number</field><field name="VAR">Angle</field></block></value><value name="B"><block type="math_number" id="934"><field name="NUM">0</field></block></value></block></value><statement name="DO0"><block type="variables_set" id="951" inline="true"><field name="TYPE">Number</field><field name="VAR">Angle</field><value name="VALUE"><block type="math_number" id="952"><field name="NUM">0</field></block></value></block></statement><value name="IF1"><block type="logic_compare" id="953" inline="true"><field name="OP">GTE</field><value name="A"><block type="variables_get" id="954"><field name="TYPE">Number</field><field name="VAR">Angle</field></block></value><value name="B"><block type="math_number" id="955"><field name="NUM">180</field></block></value></block></value><statement name="DO1"><block type="variables_set" id="956" inline="true"><field name="TYPE">Number</field><field name="VAR">Angle</field><value name="VALUE"><block type="math_number" id="957"><field name="NUM">180</field></block></value></block></statement><next><block type="servo_write" id="760" inline="true"><field name="PIN">10</field><value name="ANGLE"><block type="variables_get" id="761"><field name="TYPE">Number</field><field name="VAR">Angle</field></block></value><next><block type="serial_println" id="672" inline="false"><value name="CONTENT"><block type="variables_get" id="697"><field name="TYPE">Number</field><field name="VAR">Angle</field></block></value></block></next></block></next></block></next></block></next></block></next></block></next></block></statement></block></next></block><block type="procedures_defnoreturn" id="168" x="913" y="88"><mutation></mutation><field name="NAME">convert_CLK</field><statement name="STACK"><block type="controls_if" id="174" inline="false"><mutation else="1"></mutation><value name="IF0"><block type="inout_digital_read" id="25"><field name="PIN">3</field><field name="INPUT_MODE">INPUT_PULLUP</field></block></value><statement name="DO0"><block type="variables_set" id="196" inline="true"><field name="TYPE">Number</field><field name="VAR">CLK</field><value name="VALUE"><block type="math_number" id="197"><field name="NUM">1</field></block></value></block></statement><statement name="ELSE"><block type="variables_set" id="198" inline="true"><field name="TYPE">Number</field><field name="VAR">CLK</field><value name="VALUE"><block type="math_number" id="199"><field name="NUM">0</field></block></value></block></statement></block></statement></block><block type="procedures_defnoreturn" id="566" x="913" y="288"><mutation></mutation><field name="NAME">make_data</field><statement name="STACK"><block type="variables_set" id="575" inline="true"><field name="TYPE">Number</field><field name="VAR">WAVE0</field><value name="VALUE"><block type="variables_get" id="593"><field name="TYPE">Number</field><field name="VAR">WAVE</field></block></value><next><block type="procedures_callnoreturn" id="207"><mutation name="convert_CLK"></mutation><next><block type="procedures_callnoreturn" id="234"><mutation name="convert_DT"></mutation><next><block type="variables_set" id="345" inline="true"><field name="TYPE">Number</field><field name="VAR">WAVE</field><value name="VALUE"><block type="math_arithmetic" id="250" inline="true"><field name="OP">MINUS</field><value name="A"><block type="variables_get" id="286"><field name="TYPE">Number</field><field name="VAR">CLK</field></block></value><value name="B"><block type="variables_get" id="293"><field name="TYPE">Number</field><field name="VAR">DT</field></block></value></block></value></block></next></block></next></block></next></block></statement></block><block type="procedures_defnoreturn" id="223" x="913" y="488"><mutation></mutation><field name="NAME">convert_DT</field><statement name="STACK"><block type="controls_if" id="225" inline="false"><mutation else="1"></mutation><value name="IF0"><block type="inout_digital_read" id="226"><field name="PIN">4</field><field name="INPUT_MODE">INPUT_PULLUP</field></block></value><statement name="DO0"><block type="variables_set" id="227" inline="true"><field name="TYPE">Number</field><field name="VAR">DT</field><value name="VALUE"><block type="math_number" id="228"><field name="NUM">1</field></block></value></block></statement><statement name="ELSE"><block type="variables_set" id="229" inline="true"><field name="TYPE">Number</field><field name="VAR">DT</field><value name="VALUE"><block type="math_number" id="230"><field name="NUM">0</field></block></value></block></statement></block></statement></block></xml> |
Post a Comment