Adafruit_CircuitPython_seesaw/examples/seesaw_crickit_test.py

180 lines
4.9 KiB
Python

# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
# SPDX-License-Identifier: MIT
import board
from adafruit_motor import servo
from adafruit_seesaw.seesaw import Seesaw
from adafruit_seesaw.pwmout import PWMOut
# from analogio import AnalogOut
# import board
i2c_bus = board.I2C()
ss = Seesaw(i2c_bus)
pwm1 = PWMOut(ss, 17)
pwm2 = PWMOut(ss, 16)
pwm3 = PWMOut(ss, 15)
pwm4 = PWMOut(ss, 14)
pwm1.frequency = 50
pwm2.frequency = 50
pwm3.frequency = 50
pwm4.frequency = 50
S1 = servo.Servo(pwm1)
S2 = servo.Servo(pwm2)
S3 = servo.Servo(pwm3)
S4 = servo.Servo(pwm4)
servos = (S1, S2, S3, S4)
CRCKIT_NUM_ADC = 8
CRCKit_adc = (2, 3, 40, 41, 11, 10, 9, 8)
CRCKIT_NUM_DRIVE = 4
CRCKit_drive = (42, 43, 12, 13)
CAPTOUCH_THRESH = 500
_CRCKIT_M1_A1 = 18
_CRCKIT_M1_A2 = 19
_CRCKIT_M1_B1 = 22
_CRCKIT_M1_B2 = 23
cap_state = [False, False, False, False]
cap_justtouched = [False, False, False, False]
cap_justreleased = [False, False, False, False]
motor1_dir = False
motor2_dir = True
test_servos = False
test_motors = False
test_drives = False
test_speaker = False
counter = 0
# analog_out = AnalogOut(board.A0)
# analog_out.value = 512
while True:
counter = (counter + 1) % 256
if counter % 32 == 0:
print("-------------------- analog -----------------------")
str_out = ""
for i in range(8):
val = ss.analog_read(CRCKit_adc[i]) * 3.3 / 1024
str_out = str_out + str(round(val, 2)) + "\t"
print(str_out + "\n")
for i in range(4):
val = ss.touch_read(i)
cap_justtouched[i] = False
cap_justreleased[i] = False
if val > CAPTOUCH_THRESH:
print("CT" + str(i + 1) + " touched! value: " + str(val))
if not cap_state[i]:
cap_justtouched[i] = True
cap_state[i] = True
else:
if cap_state[i]:
cap_justreleased[i] = True
cap_state[i] = False
if cap_justtouched[0]:
test_servos = not test_servos
if test_servos:
print("Testing servos")
else:
print("Stopping servos")
if cap_justtouched[1]:
test_drives = not test_drives
if test_drives:
print("Testing drives")
else:
print("Stopping drives")
if cap_justtouched[2]:
test_motors = not test_motors
if test_motors:
print("Testing motors")
else:
print("Stopping motors")
if cap_justtouched[3]:
test_speaker = not test_speaker
if test_speaker:
print("Testing speaker")
else:
print("Stopping speaker")
if test_servos:
if counter % 32 == 0:
print("-------------------- servos -----------------------")
servonum = int(counter / 32) % 4
if counter < 128:
print("SER" + str(servonum) + " LEFT")
servos[servonum].angle = 0
else:
print("SER" + str(servonum) + " RIGHT")
servos[servonum].angle = 180
if test_drives:
if counter % 32 == 0:
print("-------------------- drives -----------------------")
drivenum = int(counter / 64) % 4
if counter % 64 == 0:
print("DRIVE" + str(drivenum) + " ON")
ss.analog_write(CRCKit_drive[drivenum], 65535)
else:
print("DRIVE" + str(drivenum) + " OFF")
ss.analog_write(CRCKit_drive[drivenum], 0)
if test_motors:
if counter < 128:
if motor1_dir:
ss.analog_write(_CRCKIT_M1_A1, 0)
ss.analog_write(_CRCKIT_M1_A2, counter * 512)
else:
ss.analog_write(_CRCKIT_M1_A2, 0)
ss.analog_write(_CRCKIT_M1_A1, counter * 512)
else:
if motor1_dir:
ss.analog_write(_CRCKIT_M1_A1, 0)
ss.analog_write(_CRCKIT_M1_A2, (255 - counter) * 512)
else:
ss.analog_write(_CRCKIT_M1_A2, 0)
ss.analog_write(_CRCKIT_M1_A1, (255 - counter) * 512)
if counter == 255:
print("-------------------- motor 1 -----------------------")
motor1_dir = not motor1_dir
if counter < 128:
if motor2_dir:
ss.analog_write(_CRCKIT_M1_B1, 0)
ss.analog_write(_CRCKIT_M1_B2, counter * 512)
else:
ss.analog_write(_CRCKIT_M1_B2, 0)
ss.analog_write(_CRCKIT_M1_B1, counter * 512)
else:
if motor2_dir:
ss.analog_write(_CRCKIT_M1_B1, 0)
ss.analog_write(_CRCKIT_M1_B2, (255 - counter) * 512)
else:
ss.analog_write(_CRCKIT_M1_B2, 0)
ss.analog_write(_CRCKIT_M1_B1, (255 - counter) * 512)
if counter == 255:
print("-------------------- motor 2 -----------------------")
motor2_dir = not motor2_dir