Codigo Base para el seguidor de linea usando RP Pico
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.5 KiB

from machine import Pin,ADC
from time import sleep
class Barra16:
#CONSTRUCTOR
def __init__(self,s0,s1,s2,s3,out):
self.__s0=Pin(s0,Pin.OUT)
self.__s1=Pin(s1,Pin.OUT)
self.__s2=Pin(s2,Pin.OUT)
self.__s3=Pin(s3,Pin.OUT)
self.__out=ADC(Pin(out))
self.__umbral=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
#METODOS PRIVADOS
def __read(self,x):
bits=bin(x)
bits=bits.split("b")[1]
for i in range (len(bits),4):
bits="0"+bits
self.__s0.value(bits[3]=='1')
self.__s1.value(bits[2]=='1')
self.__s2.value(bits[1]=='1')
self.__s3.value(bits[0]=='1')
return self.__out.read_u16()
#METODOS PUBLICOS
def getPos(self):
pos=0
sen=0
for x in range(16):
v=self.__read(x)
sen+=1 if v>self.__umbral[x] else 0
pos+=500*(x+1) if v>self.__umbral[x] else 0
return -1 if sen==0 else (pos/sen)-4250
def calibrar(self, veces=10000):
max = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
min = [65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,65535,]
for v in range(veces):
for x in range(16):
val=self.__read(x)
if min[x]>val:
min[x]=val
if max[x]<val:
max[x]=val
##sleep(.00001)
for x in range(16):
self.__umbral[x]=int((max[x]+min[x])/2)