gs1=0 gs2=0 function FollowBlackLine(mx,mi) styrsort2(3,0,0,0,99,mx,mi) end function korrstyr(xa,xb,di) return (((di^xa) * (100 - xb)) / (100^xa)) + ((di * xb) / 100) end function motorstyrsort(v1,v2,speed,korr) local s1,s2,r1,r2 if korr ~= 0 then korrsp = (korr * 2 * speed) / 100 if korrsp > (speed*2) then korrsp = speed end else korrsp = 0 end if v1 < v2 then s1 = speed s2 = speed - korrsp elseif v1 > v2 then s1 = speed - korrsp s2 = speed else s1 = speed s2 = speed end if s1 ~= gs1 or s2 ~= gs2 then if s1 < 0 then r1 = 0 else r1 = 1 end if s2 < 0 then r2 = 0 else r2 = 1 end motor(r2,abs(floor(s2)),r1,abs(floor(s1))) gs1 = s1 gs2 = s2 end end function styrsort2(a,b,c,d,NoLine,maxspeed,minspeed) local xspeed=30 local x={} local diff local speed=4 local korr= 0 local glkorr = 0 local korrsp local wcount,i local dcount = 0 local dmax,dmin local v1,v2 local sharp = {} local DriveBy = 0 dmax=100 dmin=0 gs1 = 0 gs2 = 0 repeat x[1],x[2],x[3],x[4],x[5] = snabel() x[1] = ((x[1] - cs1) * 100) / (ch1-cs1) x[2] = ((x[2] - cs2) * 100) / (ch2-cs2) x[3] = ((x[3] - cs3) * 100) / (ch3-cs3) x[4] = ((x[4] - cs4) * 100) / (ch4-cs4) x[5] = ((x[5] - cs5) * 100) / (ch5-cs5) dmax = max(x[1],x[2],x[3],x[4],x[5]) dmin = min(x[1],x[2],x[3],x[4],x[5]) if x[5] > 70 or x[4] > 70 then DriveBy = DriveBy + 1 if DriveBy > 2 then motor(0,0,0,0) return end else if DriveBy > 0 then DriveBy = DriveBy - 1 end end x[1] = ((x[1] - dmin) * 100) / (dmax-dmin) x[2] = ((x[2] - dmin) * 100) / (dmax-dmin) x[3] = ((x[3] - dmin) * 100) / (dmax-dmin) x[4] = ((x[4] - dmin) * 100) / (dmax-dmin) x[5] = ((x[5] - dmin) * 100) / (dmax-dmin) v1 = abs(x[3]) v2 = abs(x[1]) diff = abs(v1 - v2) korr = korrstyr(a,b,diff) if korr ~= glkorr then glkorr = korr xspeed=xspeed-5 if xspeed < minspeed then xspeed=minspeed end speed=xspeed/100 motorstyrsort(v1,v2,speed,korr) else xspeed=xspeed+3 if xspeed > maxspeed then xspeed = maxspeed else speed=xspeed/100 motorstyrsort(v1,v2,speed,korr) end end dcount = dcount + 1 until ccheck() motor(0,0,0,0) end function FindBlack(mx,mi) styrx2(3,0,60,99,0,mx,mi) end function motorstyrx(v1,v2,speed,korr) local s1,s2,r1,r2 if korr ~= 0 then korrsp = (korr * 2 * speed) / 100 if korrsp > (speed*2) then korrsp = speed end else korrsp = 0 end if v1 < v2 then s1 = speed s2 = speed - korrsp elseif v1 > v2 then s1 = speed - korrsp s2 = speed else s1 = speed s2 = speed end if s1 ~= gs1 or s2 ~= gs2 then if s1 < 0 then r1 = 0 else r1 = 1 end if s2 < 0 then r2 = 0 else r2 = 1 end motor(r1,abs(floor(s1)),r2,abs(floor(s2))) gs1 = s1 gs2 = s2 end end function styrx2(a,b,c,d,NoLine,maxspeed,minspeed) local xspeed=30 local x={} local diff local speed=4 local korr= 0 local glkorr = 0 local korrsp local wcount,i local dcount = 0 local dmax,dmin local v1,v2 local sharp = {} local DriveBy = 0 local Stat = 0 local Gulv = 0 local GulvCount = 0 local GulvAv dmax=100 dmin=0 gs1 = 0 gs2 = 0 repeat x[1],x[2],x[3],x[4],x[5] = snabel() x[1] = ((x[1] - cs1) * 100) / (ch1-cs1) x[2] = ((x[2] - cs2) * 100) / (ch2-cs2) x[3] = ((x[3] - cs3) * 100) / (ch3-cs3) x[4] = ((x[4] - cs4) * 100) / (ch4-cs4) x[5] = ((x[5] - cs5) * 100) / (ch5-cs5) dmax = max(x[1],x[2],x[3],x[4],x[5]) dmin = min(x[1],x[2],x[3],x[4],x[5]) Gulv = Gulv + x[5] GulvCount = GulvCount + 1 if GulvCount > 500 then GulvAv = Gulv / GulvCount if x[5] < (GulvAv - 5) then Stat = Stat + 1 if Stat > 5 then print("Snit "..GulvAv.." over "..GulvCount.." samples") motor(0,0,0,0) return end else if Stat > 0 then print("Sort Stat "..Stat) Stat = Stat - 1 end end end x[1] = ((x[1] - dmin) * 100) / (dmax-dmin) x[2] = ((x[2] - dmin) * 100) / (dmax-dmin) x[3] = ((x[3] - dmin) * 100) / (dmax-dmin) x[4] = ((x[4] - dmin) * 100) / (dmax-dmin) x[5] = ((x[5] - dmin) * 100) / (dmax-dmin) v1 = abs(x[3]) v2 = abs(x[1]) diff = abs(v1 - v2) korr = korrstyr(a,b,diff) if korr ~= glkorr then glkorr = korr xspeed=xspeed-5 if xspeed < minspeed then xspeed=minspeed end speed=xspeed/100 motorstyrx(v1,v2,speed,korr) else xspeed=xspeed+3 if xspeed > maxspeed then xspeed = maxspeed else speed=xspeed/100 motorstyrx(v1,v2,speed,korr) end end dcount = dcount + 1 until ccheck() motor(0,0,0,0) end function BlackNoek() motor(1,2,1,6) delay(17000) motor(0,0,0,0) end