# pybricks blocks file:{"blocks":{"languageVersion":0,"blocks":[{"type":"blockGlobalSetup","id":"bjK,wS1MYO7aiYkFSwd{","x":615,"y":-132,"deletable":false,"next":{"block":{"type":"variables_setup_imported_function","id":"jxs8-3a9w]LQMdKMjMbo","fields":{"FROM_MODULE":{"id":"2XIM[=#}_],1][fv,l%h"},"VAR":{"id":"Ra|Lcv)4z:by%1R]{VoC"}},"next":{"block":{"type":"variables_setup_imported_function","id":"`wFO;iG?[dJ!ZN_%tP*~","fields":{"FROM_MODULE":{"id":"2XIM[=#}_],1][fv,l%h"},"VAR":{"id":"@b~jYPeBY7@!%zYcw@$|"}},"next":{"block":{"type":"variables_setup_imported_function","id":"C7O2_vGi@)aJxTQ|jM-6","fields":{"FROM_MODULE":{"id":"2XIM[=#}_],1][fv,l%h"},"VAR":{"id":"*/:dtB1R.1;7K?#w_7Qe"}},"next":{"block":{"type":"variables_setup_imported_function","id":"=Oc,97NJ95dMPb|a!yLv","fields":{"FROM_MODULE":{"id":"2XIM[=#}_],1][fv,l%h"},"VAR":{"id":"iSP@OpPoT_#PK9y~TV82"}},"next":{"block":{"type":"variables_setup_imported_function","id":".ky-E8TK8A*Nmx,2+3ff","fields":{"FROM_MODULE":{"id":"2XIM[=#}_],1][fv,l%h"},"VAR":{"id":"aZGA;0g8xJHfA:|rRl+)"}},"next":{"block":{"type":"variables_setup_imported_function","id":"TV{3_P_%1)?X[V:Wu~yU","fields":{"FROM_MODULE":{"id":"2XIM[=#}_],1][fv,l%h"},"VAR":{"id":"p$NR*:Tfez$?|VMOg660"}},"next":{"block":{"type":"variables_setup_imported_function","id":"7(^,5rf~+nD0KZ;*S8L#","fields":{"FROM_MODULE":{"id":"2XIM[=#}_],1][fv,l%h"},"VAR":{"id":"4m6BD86X}*^^pJL#4HvM"}},"next":{"block":{"type":"variables_setup_imported_function","id":"lp#Dkz{NP;c-L;OsCa-z","fields":{"FROM_MODULE":{"id":"2XIM[=#}_],1][fv,l%h"},"VAR":{"id":"O,:0Jq=:z@#Qc?7#!=4e"}},"next":{"block":{"type":"variables_setup_imported_function","id":",_S!5a}o-b54-/xyJQ=v","fields":{"FROM_MODULE":{"id":"2XIM[=#}_],1][fv,l%h"},"VAR":{"id":"AnM/h.=9VtPBoav/,b(x"}},"next":{"block":{"type":"variables_setup_imported_function","id":"#FNg@m%@5;QjW3Neq_W_","fields":{"FROM_MODULE":{"id":"2XIM[=#}_],1][fv,l%h"},"VAR":{"id":"_o=lh4%71tk{I*0nI]/G"}},"next":{"block":{"type":"variables_setup_imported_function","id":"nJt`;K9|`|gDqU4xK$,s","fields":{"FROM_MODULE":{"id":"2XIM[=#}_],1][fv,l%h"},"VAR":{"id":"=E*6}rM/?itGGdX9e2fy"}},"next":{"block":{"type":"variables_set_prime_hub","id":"UAvXx-XsiDl:((iQHiRr","extraState":{"optionLevel":0},"fields":{"VAR":{"id":"LJr+Yjj8]kWSKh_}IE!}"}},"next":{"block":{"type":"variables_set_motor","id":"mEt/K#@-ESznFQWVEwS#","fields":{"VAR":{"id":"!_%XO!G$qCK@5OrgYufu"}},"inputs":{"PORT":{"shadow":{"type":"blockParametersPort","id":"v!t*.H~)uTb8p@z23!BM","fields":{"NAME":"E"}}},"POSITIVE_DIRECTION":{"shadow":{"type":"blockParametersDirection","id":"!T~yCN8!eq=]*:9#N0`d","fields":{"SELECTION":"Direction.COUNTERCLOCKWISE"}}}},"next":{"block":{"type":"variables_set_motor","id":"+ACI%-g.h^Rw4b?83:,V","fields":{"VAR":{"id":"];nxhj8P=OW1npolvN`q"}},"inputs":{"PORT":{"shadow":{"type":"blockParametersPort","id":"%D~BLG]3}])ff~ae()jv","fields":{"NAME":"F"}}},"POSITIVE_DIRECTION":{"shadow":{"type":"blockParametersDirection","id":"|S{,X|ct-Xup_acc_X]{","fields":{"SELECTION":"Direction.CLOCKWISE"}}}},"next":{"block":{"type":"variables_setup_any","id":"KdY9H@FM^TePD!@[F+Zk","fields":{"VAR":{"id":"n$vP48UgC6mt4_[umx1D"}},"inputs":{"VALUE0":{"shadow":{"type":"blockMathNumber","id":"cVzT:{@^BMxML@eB3b]r","fields":{"NUM":0}}}},"next":{"block":{"type":"variables_setup_any","id":"4FCJcIJ{3zM8?[(w`2HU","fields":{"VAR":{"id":"6s^+?@J+{Vw=8NVdB^1@"}},"inputs":{"VALUE0":{"shadow":{"type":"blockMathNumber","id":"l7@V:P?89AeWIwX_(h|J","fields":{"NUM":0}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},{"type":"blockGlobalStart","id":"3tJe|AWl0baN(wH9a$@.","x":1191,"y":-126,"deletable":false,"next":{"block":{"type":"blockComment","id":"O%gkd-0}g;LC2TFj:NSc","fields":{"FIELDNAME":"Connect Line16 sensor to port C (3) and enable multitasking (true)."},"next":{"block":{"type":"blockImportTaskCallStatement","id":"?ARTp,Qu0Q$As_y1||fR","extraState":{"optionLevel":2},"inputs":{"VAR":{"shadow":{"type":"variables_get_imported_function","id":"EDa*Sc$v@oQ{d3v(u@MK","fields":{"VAR":{"id":"Ra|Lcv)4z:by%1R]{VoC","name":"line_init_port_multitask","type":"FunctionImported"}}}},"ARG0":{"shadow":{"type":"blockMathNumber","id":"}fchEY{2~bY[)*x8QpDD","fields":{"NUM":3}}},"ARG1":{"shadow":{"type":"blockMathNumber","id":"cjs5^6+9~jzG-;X_@SWz","fields":{"NUM":0}},"block":{"type":"blockLogicTrueFalse","id":"3k(DM%O3$fUf0UgMnyB+","fields":{"BOOL":"TRUE"}}}},"next":{"block":{"type":"blockMultiTask","id":"Pt`ncAB6E^4wz*|coCjn","extraState":{"optionLevel":0},"fields":{"METHOD":"MULTITASK_ALL"},"inputs":{"TASK0":{"block":{"type":"blockFlowWhile","id":"EuhdwO7gOMMKrqhTXLi=","fields":{"MODE":"WHILE"},"inputs":{"BOOL":{"shadow":{"type":"blockLogicTrue","id":"LCbYd~1r=9,Q+v+{cY7R"}},"DO":{"block":{"type":"blockPrint","id":"j,,T}?rBkaW$1v?olp4p","extraState":{"optionLevel":2},"fields":{"SEP":"SEP_SPACE"},"inputs":{"TEXT0":{"shadow":{"type":"text","id":"!x5.0YiWya^`(y)yO5B8","fields":{"TEXT":"Hello, Pybricks!"}},"block":{"type":"blockImportTaskCallValue","id":"?C@SEs:iUk0s,m][j^s3","extraState":{"optionLevel":0},"inputs":{"VAR":{"shadow":{"type":"variables_get_imported_function","id":"sVNV)8tYV#rE;dE7uDxe","fields":{"VAR":{"id":"@b~jYPeBY7@!%zYcw@$|","name":"line_pos8","type":"FunctionImported"}}}}}}},"TEXT1":{"shadow":{"type":"text","id":"$I_p]o.ngfXRquF-.XA9","fields":{"TEXT":"abc"}},"block":{"type":"blockImportTaskCallValue","id":"_D:2.y8.j[+3fKPq]l]h","extraState":{"optionLevel":0},"inputs":{"VAR":{"shadow":{"type":"variables_get_imported_function","id":"z@[]Cmw:y`g2RrX]MLVj","fields":{"VAR":{"id":"*/:dtB1R.1;7K?#w_7Qe","name":"line_pos100","type":"FunctionImported"}}}}}}},"TEXT2":{"shadow":{"type":"text","id":"K;kdXj~whWtVQJ3jiqV8","fields":{"TEXT":"abc"}},"block":{"type":"blockImportTaskCallValue","id":";tC~jGv+YIhB*v-Y+UW#","extraState":{"optionLevel":1},"inputs":{"VAR":{"shadow":{"type":"variables_get_imported_function","id":"P;AXtKW#^MiofAXjJv6h","fields":{"VAR":{"id":"aZGA;0g8xJHfA:|rRl+)","name":"line_ir_ch","type":"FunctionImported"}}}},"ARG0":{"shadow":{"type":"blockMathNumber","id":",a.%X?Tol}gKpy${HHZU","fields":{"NUM":1}}}}}}},"next":{"block":{"type":"blockWaitTime","id":"ro9(|`i-5*`3MCxE1-o@","inputs":{"VALUE0":{"shadow":{"type":"unit_time","id":"Gb%?*K5fjk+)h-oByvWV","fields":{"VALUE0":10}}}}}}}}}}},"TASK1":{"block":{"type":"blockFlowWhile","id":"DSe?2VN;q,{.IiwVU6IZ","fields":{"MODE":"WHILE"},"inputs":{"BOOL":{"shadow":{"type":"blockLogicTrue","id":"mC,BdN]bB_Xd,s5fkBzP"}},"DO":{"block":{"type":"blockIfElse","id":"g8%-:/T8g0z2ThmygDW4","extraState":{"optionLevel":1},"inputs":{"IF0":{"shadow":{"type":"blockLogicTrue","id":"L2bV(s~(NEa5khzn*=q/"},"block":{"type":"blockLogicCompare","id":"rwvo(UeKi4Lp[k%0c1MT","fields":{"OP1":"GT"},"inputs":{"A":{"shadow":{"type":"blockMathNumber","id":";opIs]6Lqd-xc[]G`u,x","fields":{"NUM":3}},"block":{"type":"blockImportTaskCallValue","id":"FW^2%nTT0^7/=4opzj@,","extraState":{"optionLevel":0},"inputs":{"VAR":{"shadow":{"type":"variables_get_imported_function","id":"D3lBq}6|3B9#;)~?{Rax","fields":{"VAR":{"id":"iSP@OpPoT_#PK9y~TV82","name":"line_width","type":"FunctionImported"}}}}}}},"B":{"shadow":{"type":"blockMathNumber","id":"$ktzD~o-`f8_,7]q7WsW","fields":{"NUM":6}}}}}},"DO0":{"block":{"type":"blockMotorDuty","id":"`EV*shr@9e[]^N81g/4V","inputs":{"VAR":{"shadow":{"type":"variables_get_simple_motor_device","id":"x89LyALycF]5WV5Up5yu","fields":{"VAR":{"id":"!_%XO!G$qCK@5OrgYufu","name":"motorL","type":"Motor"}}}},"VALUE0":{"shadow":{"type":"unit_percent","id":"|RFi$O(tRVGVc=d5Qg-j","fields":{"VALUE0":0}}}},"next":{"block":{"type":"blockMotorDuty","id":"Ez-f0/WX{n3!$AlW[?;E","inputs":{"VAR":{"shadow":{"type":"variables_get_simple_motor_device","id":"-Fe1=iy/Y(+!#-Q-o#CX","fields":{"VAR":{"id":"];nxhj8P=OW1npolvN`q","name":"motorR","type":"Motor"}}}},"VALUE0":{"shadow":{"type":"unit_percent","id":"e|b%4Ng$iG.VA.wa$3;0","fields":{"VALUE0":0}}}}}}}},"ELSE":{"block":{"type":"blockVariableSetValue","id":"x(riMGIJy.u$0+0zdY:M","inputs":{"VAR":{"shadow":{"type":"variables_get_any","id":"cye.{};zPhr!T5S:5E(M","fields":{"VAR":{"id":"n$vP48UgC6mt4_[umx1D","name":"PD","type":"Any"}}}},"VALUE0":{"shadow":{"type":"blockMathNumber","id":"+fTvp3|hB.k]U:JG!h,j","fields":{"NUM":0}},"block":{"type":"blockMathArithmetic","id":"7KKXMiDW-As:vWvTMsJm","fields":{"OP":"ADD"},"inputs":{"A":{"shadow":{"type":"blockMathNumber","id":",L%*Q5rSm30RChJb#kTG","fields":{"NUM":1}},"block":{"type":"blockMathArithmetic","id":"(^M?Nj-MAd#N-V/~)g@a","fields":{"OP":"MULTIPLY"},"inputs":{"A":{"shadow":{"type":"blockMathNumber","id":"y.jf3:?|fv5n3?;%R_gJ","fields":{"NUM":1}},"block":{"type":"blockImportTaskCallValue","id":"HD~*a/1)[c~rBw~nhC,8","extraState":{"optionLevel":0},"inputs":{"VAR":{"shadow":{"type":"variables_get_imported_function","id":";OVyMlE=I}[NLKAZM3~L","fields":{"VAR":{"id":"*/:dtB1R.1;7K?#w_7Qe","name":"line_pos100","type":"FunctionImported"}}}}}}},"B":{"shadow":{"type":"blockMathNumber","id":"KBy~{pCJQqhQouMu{no;","fields":{"NUM":1.2}}}}}},"B":{"shadow":{"type":"blockMathNumber","id":"dl7Bd_or)]oj@AxiV%o4","fields":{"NUM":1}},"block":{"type":"blockMathArithmetic","id":"BomC,594A@nBRe1^0BT$","fields":{"OP":"MULTIPLY"},"inputs":{"A":{"shadow":{"type":"blockMathNumber","id":"QrO[}+C8+7lE6U?Y_kO_","fields":{"NUM":1}},"block":{"type":"blockMathArithmetic","id":"`5l2afgIS}uz}#hrFu5|","fields":{"OP":"MINUS"},"inputs":{"A":{"shadow":{"type":"blockMathNumber","id":"p7EYnycuL%N9lxs0M;l2","fields":{"NUM":1}},"block":{"type":"blockImportTaskCallValue","id":"bUMGMGQsCac?;u$-IJMp","extraState":{"optionLevel":0},"inputs":{"VAR":{"shadow":{"type":"variables_get_imported_function","id":"AIaklg0H8,Njx@bSZ|nZ","fields":{"VAR":{"id":"*/:dtB1R.1;7K?#w_7Qe","name":"line_pos100","type":"FunctionImported"}}}}}}},"B":{"shadow":{"type":"blockMathNumber","id":"~$X4+X,DKE-)l=L|i|+S","fields":{"NUM":1}},"block":{"type":"blockVariableGetValue","id":"_E5P[5q~2zGyAt|Tm:X=","inputs":{"VAR":{"shadow":{"type":"variables_get_any","id":"fqd@hd-OH1LY6u!ZmCX|","fields":{"VAR":{"id":"6s^+?@J+{Vw=8NVdB^1@","name":"posLast","type":"Any"}}}}}}}}}},"B":{"shadow":{"type":"blockMathNumber","id":"9|yWj7bs@AX{oaWx7rKZ","fields":{"NUM":3.6}}}}}}}}}},"next":{"block":{"type":"blockMotorDuty","id":"aJM{~dIz!(aG#?Ga!-=I","inputs":{"VAR":{"shadow":{"type":"variables_get_simple_motor_device","id":"v$TcJ-=3Y0F[7gsh0?0`","fields":{"VAR":{"id":"!_%XO!G$qCK@5OrgYufu","name":"motorL","type":"Motor"}}}},"VALUE0":{"shadow":{"type":"unit_percent","id":"SaNZEY*7mS3z4F;aUvn8","fields":{"VALUE0":50}},"block":{"type":"blockMathArithmetic","id":"G4:z8hm;8~kU/Zejfmr+","fields":{"OP":"ADD"},"inputs":{"A":{"shadow":{"type":"blockMathNumber","id":"m+Z9b$h!;5Q6|xzvKUOw","fields":{"NUM":75}}},"B":{"shadow":{"type":"blockMathNumber","id":"vXQLkYrAw47y$cZd]bwl","fields":{"NUM":1}},"block":{"type":"blockVariableGetValue","id":";%1fK)@`Ju`Egs4[@(8C","inputs":{"VAR":{"shadow":{"type":"variables_get_any","id":"{p_agwy(uC-F~}M;:D2H","fields":{"VAR":{"id":"n$vP48UgC6mt4_[umx1D","name":"PD","type":"Any"}}}}}}}}}}},"next":{"block":{"type":"blockMotorDuty","id":"[hQrDnI5.+lZ2*%DQ6lB","inputs":{"VAR":{"shadow":{"type":"variables_get_simple_motor_device","id":"#edoxI3/5gN99MryTJ3#","fields":{"VAR":{"id":"];nxhj8P=OW1npolvN`q","name":"motorR","type":"Motor"}}}},"VALUE0":{"shadow":{"type":"unit_percent","id":"~ho9S]trcRfJ.|j|U0Bz","fields":{"VALUE0":50}},"block":{"type":"blockMathArithmetic","id":"TVo;@F0G!YmJ1iOvIMdR","fields":{"OP":"MINUS"},"inputs":{"A":{"shadow":{"type":"blockMathNumber","id":"Tyov=swBQT!;gq!HW{G!","fields":{"NUM":75}}},"B":{"shadow":{"type":"blockMathNumber","id":"Np%@Xp6h,|j)PbHn1J)f","fields":{"NUM":1}},"block":{"type":"blockVariableGetValue","id":"4B_G8+7IHHE]9!75aSSs","inputs":{"VAR":{"shadow":{"type":"variables_get_any","id":"LhrGxufzy1.IqTJIzy_]","fields":{"VAR":{"id":"n$vP48UgC6mt4_[umx1D","name":"PD","type":"Any"}}}}}}}}}}},"next":{"block":{"type":"blockVariableSetValue","id":"=y^Y#iUVV%8QQfK)#u|N","inputs":{"VAR":{"shadow":{"type":"variables_get_any","id":"C:LMI9hJ-^[*kE8gnFGT","fields":{"VAR":{"id":"6s^+?@J+{Vw=8NVdB^1@","name":"posLast","type":"Any"}}}},"VALUE0":{"shadow":{"type":"blockMathNumber","id":"3*ZeO,@}CM0N$z7G3{.f","fields":{"NUM":0}},"block":{"type":"blockImportTaskCallValue","id":"X,Vs!f9L6F_GY;}7Wg,A","extraState":{"optionLevel":0},"inputs":{"VAR":{"shadow":{"type":"variables_get_imported_function","id":"D34dW3;cwn;XIMe.k;qk","fields":{"VAR":{"id":"*/:dtB1R.1;7K?#w_7Qe","name":"line_pos100","type":"FunctionImported"}}}}}}}},"next":{"block":{"type":"blockWaitTime","id":"fA3$Av_xQTW}jfbn6^9.","inputs":{"VALUE0":{"shadow":{"type":"unit_time","id":",`Cf5z}07I:CYZBz0%nT","fields":{"VALUE0":10}}}}}}}}}}}}}}}}}}}}}}}}}}}}]},"variables":[{"name":"red","id":"@1ZpoG9u]RXv=ZZ(j3E`","type":"ColorDef"},{"name":"orange","id":"xW3@2wx{?!Pum4uQfnc#","type":"ColorDef"},{"name":"yellow","id":"l+Mw7VnY8TJ@~:}`r[GR","type":"ColorDef"},{"name":"green","id":"+zMu[u39-oCfP#](Afa*","type":"ColorDef"},{"name":"cyan","id":"T[_:Ob-`j|hrp1I}P{G@","type":"ColorDef"},{"name":"blue","id":"HNc@pQ,;8lxoM+HBm6xU","type":"ColorDef"},{"name":"violet","id":"6ZA/3GT8xqY-pOvf-T-6","type":"ColorDef"},{"name":"magenta","id":"v[7nB26b=]6H?|KgP`rx","type":"ColorDef"},{"name":"white","id":"X0Ki[qknv#YsyGN?9|@d","type":"ColorDef"},{"name":"none","id":"2IYe@-8V.u][pLd1dW,n","type":"ColorDef"},{"name":"prime hub","id":"LJr+Yjj8]kWSKh_}IE!}","type":"PrimeHub"},{"name":"motorL","id":"!_%XO!G$qCK@5OrgYufu","type":"Motor"},{"name":"motorR","id":"];nxhj8P=OW1npolvN`q","type":"Motor"},{"name":"posLast","id":"6s^+?@J+{Vw=8NVdB^1@","type":"Any"},{"name":"PD","id":"n$vP48UgC6mt4_[umx1D","type":"Any"},{"name":"line_init_port_multitask","id":"Ra|Lcv)4z:by%1R]{VoC","type":"FunctionImported"},{"name":"line_ir_calibration","id":"p$NR*:Tfez$?|VMOg660","type":"FunctionImported"},{"name":"line_pos8","id":"@b~jYPeBY7@!%zYcw@$|","type":"FunctionImported"},{"name":"line_width","id":"iSP@OpPoT_#PK9y~TV82","type":"FunctionImported"},{"name":"line_pos100","id":"*/:dtB1R.1;7K?#w_7Qe","type":"FunctionImported"},{"name":"line_bin_raw","id":"4m6BD86X}*^^pJL#4HvM","type":"FunctionImported"},{"name":"line_on_sensors","id":"O,:0Jq=:z@#Qc?7#!=4e","type":"FunctionImported"},{"name":"line_junction","id":"AnM/h.=9VtPBoav/,b(x","type":"FunctionImported"},{"name":"line_junction_name","id":"_o=lh4%71tk{I*0nI]/G","type":"FunctionImported"},{"name":"line_read_all","id":"=E*6}rM/?itGGdX9e2fy","type":"FunctionImported"},{"name":"line_ir_ch","id":"aZGA;0g8xJHfA:|rRl+)","type":"FunctionImported"},{"name":"MBC_line8_Lib","id":"2XIM[=#}_],1][fv,l%h","type":"ModuleImported"}],"info":{"type":"pybricks","version":"1.3.2"}}
from pybricks.hubs import PrimeHub
from pybricks.parameters import Direction, Port
from pybricks.pupdevices import Motor
from pybricks.tools import multitask, run_task, wait

from MBC_line8_Lib import line_bin_raw, line_init_port_multitask, line_ir_calibration, line_ir_ch, line_junction, line_junction_name, line_on_sensors, line_pos100, line_pos8, line_read_all, line_width

# Set up all devices.
prime_hub = PrimeHub()
motorL = Motor(Port.E, Direction.COUNTERCLOCKWISE)
motorR = Motor(Port.F, Direction.CLOCKWISE)

# Initialize variables.
PD = 0
posLast = 0

async def subtask():
    while True:
        await wait(0)
        print(await line_pos8(), await line_pos100(), await line_ir_ch(1))
        await wait(10)

async def subtask2():
    global PD, posLast
    while True:
        await wait(0)
        if await line_width() > 6:
            motorL.dc(0)
            motorR.dc(0)
        else:
            PD = await line_pos100() * 1.2 + (await line_pos100() - posLast) * 3.6
            motorL.dc(75 + PD)
            motorR.dc(75 - PD)
            posLast = await line_pos100()
            await wait(10)

async def main():
    global PD, posLast
    # Connect Line16 sensor to port C (3) and enable multitasking (true).
    await line_init_port_multitask(3, True)
    await multitask(
        subtask(),
        subtask2(),
    )


run_task(main())