import RPi.GPIO as GPIO
import time
 
class HCSR04:
    def __init__(self, pinTrigger, pinEcho):
        #GPIO Mode (BOARD / BCM)
        GPIO.setmode(GPIO.BCM)
        self.GPIO_TRIGGER = pinTrigger
        self.GPIO_ECHO = pinEcho
 
        #set GPIO direction (IN / OUT)
        GPIO.setup(self.GPIO_TRIGGER, GPIO.OUT)
        GPIO.setup(self.GPIO_ECHO, GPIO.IN)

    def __iter__(self):
        while True:
            yield self.llegeix()

    def llegeix(self):
        GPIO.output(self.GPIO_TRIGGER, True)
        
        # set Trigger after 0.01ms to LOW
        time.sleep(0.00001)
        GPIO.output(self.GPIO_TRIGGER, False)
        
        StartTime = time.time()
        StopTime = time.time()
 
        # save StartTime
        while GPIO.input(self.GPIO_ECHO) == 0:
            StartTime = time.time()

        # save time of arrival
        while GPIO.input(self.GPIO_ECHO) == 1:
            StopTime = time.time()
            
        # time difference between start and arrival
        TimeElapsed = StopTime - StartTime
        # multiply with the sonic speed (34300 cm/s)
        # and divide by 2, because there and back
        distance = (TimeElapsed * 34300) / 2
        return distance

    def tanca(self):
        GPIO.cleanup()

