Ejemplo n.º 1
0
class RCCar(object):

    def __init__(self):
        GPIO.setmode(GPIO.BCM)

        self.direction = Servo(27, (-45, 45), (72.5, 162.5))  # board pin: 13
        self.direction.trim = -1
        self.front_motor = DCMotor(20, 6, 13)  # board pin: 38, 31, 33
        self.rear_motor = DCMotor(21, 19, 26)  # board pin: 40, 35, 37

        self.speed = 0
        self.w_angle = self.direction.angle
        self.mov = 'quieto'

        """
        self.rear_sensor = BatSensor(17, 27, rango=(10, 80), continuous=0.2)  # board pin: 11, 13
        self.front_left_sensor = BatSensor(22, 10, rango=(10, 80), continuous=0.2)  # board pin: 15, 19
        self.front_right_sensor = BatSensor(9, 11, rango=(10, 80), continuous=0.2)  # board pin: 21, 23
        """

    def stop(self):
        self.in_use = False

        # dejar el coche frenando

    def turn_left(self):
        if self.survival_instinct():
            return -self.direction.angle

        print("Izquierda:", self.direction.angle)
        return -self.direction.update(-5)

    def turn_right(self):
        if self.survival_instinct():
            return -self.direction.angle

        print("Derecha:", self.direction.angle)
        return -self.direction.update(5)

    def forward(self):
        self.mov = 'adelante'
        if self.survival_instinct():
            return self.speed

        if self.speed != 1:
            self.speed = 1
        
        self.front_motor.forward()
        self.rear_motor.forward()
        print("Acelero hacia delante")
        return self.speed

    def backward(self):
        self.mov = 'atras'
        if self.survival_instinct():
            return self.speed

        if self.speed != -1:
            self.speed = -1
        
        self.front_motor.backward()
        self.rear_motor.backward()
        print("Acelero hacia atras")
        return self.speed

    def decelerate(self):
        if self.mov != 'quieto':
            print("Desacelero")
            #self.mov = 'quieto'
            self.front_motor.release()
            self.rear_motor.release()

    def survival_instinct(self):
        return False
    
    def survival_instinct_not_in_use(self):
        """ esta funcion no es ta en uso """
        limit = 0.8 * max(self.front_left_sensor._rango)
        
        rear = self.rear_sensor.avg
        left = self.front_left_sensor.avg
        right = self.front_right_sensor.avg

        print("sensores R({}), FL({}), FR({})".format(rear, left, right))
        
        if self.mov == 'atras' and rear < limit:
            self.brake()
            return True

        elif self.mov == 'adelante':
            if right < limit and left < limit:
                self.brake()
                return True
            elif right < limit:
                self.brake()
                return True
            elif left < limit:
                self.brake()
                return True

        return False

    def straight(self):
        if self.survival_instinct():
            return -self.direction.angle

        self.direction.update(-self.direction.angle)
        return -self.direction.angle

    def brake(self):
        print("Freno")
        self.mov = 'quieto'
        self.front_motor.brake()
        self.rear_motor.brake()