import sys
import select
from machine import Pin
import time

step_pin = Pin(2, Pin.OUT)
dir_pin = Pin(1, Pin.OUT)
en_pin = Pin(28, Pin.OUT)
en_pin.value(0)

current_pos = 0
target_x_camara = 320

def map_valor(x, in_min, in_max, out_min, out_max):
    x = max(min(x, in_max), in_min)
    return (x - in_min) * (out_max - out_min) // (in_max - in_min) + out_min

poll_obj = select.poll()
poll_obj.register(sys.stdin, select.POLLIN)

def main():
    global current_pos, target_x_camara
    
    while True:
        poll_results = poll_obj.poll(0)
        if poll_results:
            linea = sys.stdin.readline().strip()
            if linea.isdigit(): 
                target_x_camara = int(linea)

        target_steps = map_valor(target_x_camara, 0, 640, 0, 100)
        
        if target_steps > current_pos:
            dir_pin.value(1)
            step_pin.value(1)
            time.sleep_us(800) 
            step_pin.value(0)
            time.sleep_us(800)
            current_pos += 1
            
        elif target_steps < current_pos:
            dir_pin.value(0)
            step_pin.value(1)
            time.sleep_us(800)
            step_pin.value(0)
            time.sleep_us(800)
            current_pos -= 1

if __name__ == "__main__":
    main()