# pybricks blocks file:{"blocks":{"languageVersion":0,"blocks":[{"type":"blockGlobalSetup","id":"bjK,wS1MYO7aiYkFSwd{","x":-55,"y":347,"deletable":false,"next":{"block":{"type":"variables_set_ev3_brick","id":"n}}qllW2{TUJu#I%QIwZ","extraState":{"optionLevel":0},"fields":{"VAR":{"id":"a0B[/xs+8f_6[l:$=E.{"}},"next":{"block":{"type":"variables_set_motor","id":"~1+9[Wm?N3N)dQd#SQ0]","fields":{"VAR":{"id":"DL5Mw1^g`(jq?/#fWe^;"}},"inputs":{"PORT":{"shadow":{"type":"blockParametersPort","id":"QCHvn+Q`3Ig{KLRw)T$)","fields":{"NAME":"B"}}},"POSITIVE_DIRECTION":{"shadow":{"type":"blockParametersDirection","id":"ti2yJ+;jZ_xiR3^w`=iu","fields":{"SELECTION":"Direction.CLOCKWISE"}}}},"next":{"block":{"type":"variables_set_motor","id":"j4OFJ%6*z/XkJ;`(o_l3","fields":{"VAR":{"id":"91*s/gQ5Ze8H@+.HR-yz"}},"inputs":{"PORT":{"shadow":{"type":"blockParametersPort","id":"5%mi~=dbY)kZ:z|mZAq9","fields":{"NAME":"C"}}},"POSITIVE_DIRECTION":{"shadow":{"type":"blockParametersDirection","id":"g9i#eZ/!dq?XXmX|q)QA","fields":{"SELECTION":"Direction.CLOCKWISE"}}}},"next":{"block":{"type":"variables_setup_imported_function","id":"}`$]vg?vnuP*93}xarTF","fields":{"FROM_MODULE":"MBC_line16_EV3_Lib","VAR":{"id":"IH6e;v:?oHC*NkAD$z$6"}},"next":{"block":{"type":"variables_setup_imported_function","id":":^v+nl)w:eX*;S23!8L-","fields":{"FROM_MODULE":"MBC_line16_EV3_Lib","VAR":{"id":"l0`*4V8f_r:pnE?A90L:"}},"next":{"block":{"type":"variables_setup_imported_function","id":"$LMlZPdgavI[nQNG|Yk2","fields":{"FROM_MODULE":"MBC_line16_EV3_Lib","VAR":{"id":"x,b$,T;pYpO1Q]4J$~8S"}},"next":{"block":{"type":"variables_setup_imported_function","id":"V@27=?Z3J.h~yHhuMz{z","fields":{"FROM_MODULE":"MBC_line16_EV3_Lib","VAR":{"id":"zyp_.XC:W.rt:M-9]G6O"}},"next":{"block":{"type":"variables_setup_imported_function","id":"%VmFSWGbFv8Qpt]rBVX$","fields":{"FROM_MODULE":"MBC_line16_EV3_Lib","VAR":{"id":"y0f0J=IdG3M`aJRyK[%~"}},"next":{"block":{"type":"variables_setup_imported_function","id":"XC[9O=V@1`A)#m7^bVEi","fields":{"FROM_MODULE":"MBC_line16_EV3_Lib","VAR":{"id":"(7ve.fZ|KUDeR+naw8G/"}},"next":{"block":{"type":"variables_setup_imported_function","id":"]vb2?_s-IdD)U}YqH#dk","fields":{"FROM_MODULE":"MBC_line16_EV3_Lib","VAR":{"id":"zKI{ESfwXAip(vj7xSt+"}},"next":{"block":{"type":"variables_setup_any","id":"gOFLZ.[lWtYZsIFOY~JR","fields":{"VAR":{"id":"A/7yV~NVrBOKs_a?@l]d"}},"inputs":{"VALUE0":{"shadow":{"type":"blockMathNumber","id":"h)6b:uh?t|XxUR-p6Y+[","fields":{"NUM":0}}}},"next":{"block":{"type":"variables_setup_any","id":"NfY0h{FEHT=NuH~n20yd","fields":{"VAR":{"id":"90$8dS8S|Eoa^jA]/%#)"}},"inputs":{"VALUE0":{"shadow":{"type":"blockMathNumber","id":"FqeKECN2yw[|ZR=ehE3o","fields":{"NUM":0}}}}}}}}}}}}}}}}}}}}}}}}}}}}},{"type":"blockGlobalStart","id":"3tJe|AWl0baN(wH9a$@.","x":524,"y":337,"deletable":false,"next":{"block":{"type":"blockFunctionCallStatement","id":"IvaN},M]rK()2mXljfB+","extraState":{"optionLevel":2},"fields":{"CALL_TYPE":"CLASS_CALL_METHOD_SYNC","METHOD":"line_init_port_multitask"},"inputs":{"ARG0":{"shadow":{"type":"blockMathNumber","id":"BUm5`yD-rWobdHFc/0(X","fields":{"NUM":4}}},"ARG1":{"shadow":{"type":"blockMathNumber","id":"ktByu!6S7OdyeMRN3#~+","fields":{"NUM":0}},"block":{"type":"blockLogicTrueFalse","id":"DV(zZe*Gd7%Ol;)P0*=-","fields":{"BOOL":"FALSE"}}}},"next":{"block":{"type":"blockFlowWhile","id":"ln*|3};+jcJOOtdKEI$G","fields":{"MODE":"WHILE"},"inputs":{"BOOL":{"shadow":{"type":"blockLogicTrue","id":"8)F|Nh_(mR#w|*9~S@IV"}},"DO":{"block":{"type":"blockPrint","id":"T3LQh?JrROWWT}*p!VN3","extraState":{"optionLevel":1},"fields":{"SEP":"SEP_SPACE"},"inputs":{"TEXT0":{"shadow":{"type":"text","id":"!x5.0YiWya^`(y)yO5B8","fields":{"TEXT":"Hello, Pybricks!"}},"block":{"type":"blockFunctionCallValue","id":"Gwm~O-gMP5q+CqfNgjtm","extraState":{"optionLevel":0},"fields":{"CALL_TYPE":"CLASS_CALL_METHOD_SYNC","METHOD":"line_pos100"}}},"TEXT1":{"shadow":{"type":"text","id":"XDxV1WoXQs05Um9B%$D7","fields":{"TEXT":"abc"}},"block":{"type":"blockFunctionCallValue","id":"=dz.j!Ad@%ZxoINJ00p@","extraState":{"optionLevel":0},"fields":{"CALL_TYPE":"CLASS_CALL_METHOD_SYNC","METHOD":"line_width"}}}},"next":{"block":{"type":"blockIfElse","id":"U{p7f1S=Mv`8e,.wzCkd","extraState":{"optionLevel":1},"inputs":{"IF0":{"shadow":{"type":"blockLogicTrue","id":"xhBpyWRafW!*bT5.EVn5"},"block":{"type":"blockLogicCompare","id":"kW~D%Ak/2z!f4)],p0#i","fields":{"OP1":"GT"},"inputs":{"A":{"shadow":{"type":"blockMathNumber","id":"yWa{~Fy|Vj-69?w^D}^5","fields":{"NUM":3}},"block":{"type":"blockFunctionCallValue","id":"@5kVMPvhuuT5d(2!4=^W","extraState":{"optionLevel":0},"fields":{"CALL_TYPE":"CLASS_CALL_METHOD_SYNC","METHOD":"line_width"}}},"B":{"shadow":{"type":"blockMathNumber","id":"K8;o{uzAjDsOSlUBpp?f","fields":{"NUM":10}}}}}},"DO0":{"block":{"type":"blockMotorDuty","id":"L)#YVw]dfKp[BXaBfKKE","inputs":{"VAR":{"shadow":{"type":"variables_get_simple_motor_device","id":"#C*C|fgOgtZU4MAs6]Pb","fields":{"VAR":{"id":"DL5Mw1^g`(jq?/#fWe^;","name":"motorL","type":"Motor"}}}},"VALUE0":{"shadow":{"type":"unit_percent","id":"ESTcQj_iu7~bR?1VwtWw","fields":{"VALUE0":0}}}},"next":{"block":{"type":"blockMotorDuty","id":"vc1KNhf~(?k5]]YI:35Q","inputs":{"VAR":{"shadow":{"type":"variables_get_simple_motor_device","id":"_.ZkLiAcB6#jZpZUpZUY","fields":{"VAR":{"id":"91*s/gQ5Ze8H@+.HR-yz","name":"motorR","type":"Motor"}}}},"VALUE0":{"shadow":{"type":"unit_percent","id":"d.}`yEtp8ZDr0$^3@].5","fields":{"VALUE0":0}}}}}}}},"ELSE":{"block":{"type":"blockVariableSetValue","id":"2n+/TWzh,i4`@^,P{umF","inputs":{"VAR":{"shadow":{"type":"variables_get_any","id":"zb1K=:NP/iWv:Lw[r(fI","fields":{"VAR":{"id":"A/7yV~NVrBOKs_a?@l]d","name":"PID","type":"Any"}}}},"VALUE0":{"shadow":{"type":"blockMathNumber","id":"R.4yjf]_?oW(w;0@God|","fields":{"NUM":0}},"block":{"type":"blockMathFormula","id":"c*5xZH])h*gotol;+w7j","inline":false,"extraState":{"optionLevel":4},"fields":{"FORMULA":"a*b+(a-c)*d"},"inputs":{"a":{"shadow":{"type":"blockMathNumber","id":"kEyT`:YBlb*%91%gQ,}q","fields":{"NUM":0}},"block":{"type":"blockFunctionCallValue","id":"bB!G{7{p5L$yPtzd6YvG","extraState":{"optionLevel":0},"fields":{"CALL_TYPE":"CLASS_CALL_METHOD_SYNC","METHOD":"line_pos100"}}},"b":{"shadow":{"type":"blockMathNumber","id":"U$O,*c6@$W2q20ASSO}#","fields":{"NUM":1.2}}},"c":{"shadow":{"type":"blockMathNumber","id":"l-l~Ir8!5HQja/ic*!l:","fields":{"NUM":0}},"block":{"type":"blockVariableGetValue","id":"~NE]Iu7ka4{:4cOnsd?c","inputs":{"VAR":{"shadow":{"type":"variables_get_any","id":"bg;Diefrs(GSpn0dzXh0","fields":{"VAR":{"id":"90$8dS8S|Eoa^jA]/%#)","name":"posLast","type":"Any"}}}}}}},"d":{"shadow":{"type":"blockMathNumber","id":"_O9ga$O_k(#/@,$g,iv^","fields":{"NUM":3.6}}}}}}},"next":{"block":{"type":"blockVariableSetValue","id":"[OI@xXdqF~%{si(l^^?3","inputs":{"VAR":{"shadow":{"type":"variables_get_any","id":"XhHb.]v6,[m/r6DAKZv;","fields":{"VAR":{"id":"90$8dS8S|Eoa^jA]/%#)","name":"posLast","type":"Any"}}}},"VALUE0":{"shadow":{"type":"blockMathNumber","id":"I`d]fP1i-$Smk=AQlYA1","fields":{"NUM":0}},"block":{"type":"blockFunctionCallValue","id":"21sq6:*=BlC=)#_xdR$l","extraState":{"optionLevel":0},"fields":{"CALL_TYPE":"CLASS_CALL_METHOD_SYNC","METHOD":"line_pos100"}}}},"next":{"block":{"type":"blockMotorDuty","id":"v_)%{6rV8,oQf-1G2C]9","inputs":{"VAR":{"shadow":{"type":"variables_get_simple_motor_device","id":"gNPu+0sy]pD)/`f{Ok?$","fields":{"VAR":{"id":"DL5Mw1^g`(jq?/#fWe^;","name":"motorL","type":"Motor"}}}},"VALUE0":{"shadow":{"type":"unit_percent","id":"B.;A]n?[7TBv3poHHPLf","fields":{"VALUE0":0}},"block":{"type":"blockMathArithmetic","id":"h6rWt;Bvdh=/cHA3bP~8","fields":{"OP":"ADD"},"inputs":{"A":{"shadow":{"type":"blockMathNumber","id":"YB0mWf+3KXOfTURo/Ja[","fields":{"NUM":75}}},"B":{"shadow":{"type":"blockMathNumber","id":"Tjk{+!()zOG1sUyRrWn2","fields":{"NUM":1}},"block":{"type":"blockVariableGetValue","id":"oE;nhK?kbC8CUsYV!~mu","inputs":{"VAR":{"shadow":{"type":"variables_get_any","id":"hZF+^o3XC.N7{[FnHQ-J","fields":{"VAR":{"id":"A/7yV~NVrBOKs_a?@l]d","name":"PID","type":"Any"}}}}}}}}}}},"next":{"block":{"type":"blockMotorDuty","id":"gi]4kz1EK_5EOhEz*8QE","inputs":{"VAR":{"shadow":{"type":"variables_get_simple_motor_device","id":"huglaOXe+f$zq{0`i|=%","fields":{"VAR":{"id":"91*s/gQ5Ze8H@+.HR-yz","name":"motorR","type":"Motor"}}}},"VALUE0":{"shadow":{"type":"unit_percent","id":"d*8{{oKJUtR9/A7NGM87","fields":{"VALUE0":0}},"block":{"type":"blockMathArithmetic","id":"fh01_a1bJ82jWU.x0VZj","fields":{"OP":"MINUS"},"inputs":{"A":{"shadow":{"type":"blockMathNumber","id":"]?0sXsX[F/-$_|.XAC=9","fields":{"NUM":75}}},"B":{"shadow":{"type":"blockMathNumber","id":"Tjk{+!()zOG1sUyRrWn2","fields":{"NUM":1}},"block":{"type":"blockVariableGetValue","id":"344o1V048BO{?i*q@t+|","inputs":{"VAR":{"shadow":{"type":"variables_get_any","id":"aJO[uh!yNXV:Hzm8=|=H","fields":{"VAR":{"id":"A/7yV~NVrBOKs_a?@l]d","name":"PID","type":"Any"}}}}}}}}}}}}}}}}}}}},"next":{"block":{"type":"blockWaitTime","id":"xT%WR:MN6pIl9t}yDH/$","inputs":{"VALUE0":{"shadow":{"type":"unit_time","id":"bI7Zmd}~m9,ShV5Y~u}L","fields":{"VALUE0":10}}}}}}}}}}}}}}}}]},"variables":[{"name":"red","id":"b3Xby;P^?$x=s8S+25)y","type":"ColorDef"},{"name":"orange","id":"jy`3o@k|9+H;KHGy./M{","type":"ColorDef"},{"name":"yellow","id":")Vq_1!3FHt,K:,2MP1G3","type":"ColorDef"},{"name":"green","id":"byQpGP,5~v!xhdQPo4;t","type":"ColorDef"},{"name":"cyan","id":"d*6e@Z/`Dvv.93NNI;X)","type":"ColorDef"},{"name":"blue","id":"I58J+!-+QVTu~MizIAU}","type":"ColorDef"},{"name":"violet","id":"#LzVGF1b#:;4hBB-/v4r","type":"ColorDef"},{"name":"magenta","id":"9^[?1rfIo[~_]o$llD[k","type":"ColorDef"},{"name":"white","id":"=/%lJ!Mz!AgiLjL.MAd+","type":"ColorDef"},{"name":"none","id":"7i+7j.aT!Z?S_EkNaXaf","type":"ColorDef"},{"name":"ev3","id":"a0B[/xs+8f_6[l:$=E.{","type":"EV3Brick"},{"name":"line_init_port_multitask","id":"IH6e;v:?oHC*NkAD$z$6","type":"FunctionImported"},{"name":"line_ir_ch","id":"l0`*4V8f_r:pnE?A90L:","type":"FunctionImported"},{"name":"line_pos16","id":"x,b$,T;pYpO1Q]4J$~8S","type":"FunctionImported"},{"name":"line_pos100","id":"zyp_.XC:W.rt:M-9]G6O","type":"FunctionImported"},{"name":"line_width","id":"y0f0J=IdG3M`aJRyK[%~","type":"FunctionImported"},{"name":"line_edge_l","id":"(7ve.fZ|KUDeR+naw8G/","type":"FunctionImported"},{"name":"line_edge_r","id":"zKI{ESfwXAip(vj7xSt+","type":"FunctionImported"},{"name":"motorL","id":"DL5Mw1^g`(jq?/#fWe^;","type":"Motor"},{"name":"motorR","id":"91*s/gQ5Ze8H@+.HR-yz","type":"Motor"},{"name":"PID","id":"A/7yV~NVrBOKs_a?@l]d","type":"Any"},{"name":"posLast","id":"90$8dS8S|Eoa^jA]/%#)","type":"Any"},{"name":"data","id":"Ji.~_x2BD8x-FfJD{%hF","type":"Any"}],"info":{"type":"pybricks","version":"2.0.0"},"workspaceOptions":{"scrollX":278.31109619140625,"scrollY":-12.003847122192411,"scale":0.30250000000000005}}
from pybricks.ev3devices import Motor
from pybricks.hubs import EV3Brick
from pybricks.parameters import Direction, Port
from pybricks.tools import wait

from MBC_line16_EV3_Lib import (
    line_edge_l,
    line_edge_r,
    line_init_port_multitask,
    line_ir_ch,
    line_pos100,
    line_pos16,
    line_width,
)

# Set up.
ev3 = EV3Brick()
motorL = Motor(Port.B, Direction.CLOCKWISE)
motorR = Motor(Port.C, Direction.CLOCKWISE)
PID = 0
posLast = 0


# The main program starts here.
line_init_port_multitask(4, False)
while True:
    print(line_pos100(), line_width())
    if line_width() > 10:
        motorL.dc(0)
        motorR.dc(0)
    else:
        PID = line_pos100() * 1.2 + (line_pos100() - posLast) * 3.6
        posLast = line_pos100()
        motorL.dc(75 + PID)
        motorR.dc(75 - PID)
    wait(10)
