I got all parts of my PICAR-4WD working EXCEPT the speed sensor. When I try reading from it (while wheels are spinning) I get zeros only. I tried swapping for another board - to no avail. I tried flipping the white and yellow wire - no difference (and in my understanding flipping these two should only swap left and right sensor, correct?). I’ll be attaching a picture in a moment.
The code I am using to read from the speed interruptor is
from speed import Speed
from filedb import FileDB
from motor import Motor
from pwm import PWM
from pin import Pin
import time
# Config File:
config = FileDB("config")
left_front_reverse = config.get('left_front_reverse', default_value = False)
right_front_reverse = config.get('right_front_reverse', default_value = False)
left_rear_reverse = config.get('left_rear_reverse', default_value = False)
right_rear_reverse = config.get('right_rear_reverse', default_value = False)
# Init motors
left_front = Motor(PWM("P13"), Pin("D4"), is_reversed=left_front_reverse) # motor 1
right_front = Motor(PWM("P12"), Pin("D5"), is_reversed=right_front_reverse) # motor 2
left_rear = Motor(PWM("P8"), Pin("D11"), is_reversed=left_rear_reverse) # motor 3
right_rear = Motor(PWM("P9"), Pin("D15"), is_reversed=right_rear_reverse) # motor 4
left_rear_speed = Speed(25)
right_rear_speed = Speed(4)
def set_motor_power(motor, power):
if motor == 1:
left_front.set_power(power)
elif motor == 2:
right_front.set_power(power)
elif motor == 3:
left_rear.set_power(power)
elif motor == 4:
right_rear.set_power(power)
def start_speed_thread():
left_rear_speed.start()
right_rear_speed.start()
def speed_val():
return (left_rear_speed() + right_rear_speed()) / 2.0
def forward(power):
left_front.set_power(power)
left_rear.set_power(power)
right_front.set_power(power)
right_rear.set_power(power)
def full_stop():
left_front.set_power(0)
left_rear.set_power(0)
right_front.set_power(0)
right_rear.set_power(0)
########################################################
if __name__ == '__main__':
start_speed_thread()
try:
while 1:
forward(1)
time.sleep(0.1)
print(speed_val())
finally:
full_stop()
What other ideas do you have what might be going wrong?