I am not sure where to place my interrupt handler function so that I don't have to write 4 separate functions - outside of the main loop? Inside of the class? Sorry if this sounds confusing or is a downright dumb questions, the examples I can find for ISRs are very simple and don't deal with classes and several interrupts.
Boot file:
Code: Select all
from motor import *
from machine import I2C, Pin
from mp_i2c_lcd1602 import LCD1602
from time import sleep_ms
# Pin numbers for solar tracker components
LDR1 = 36
LDR2 = 39
LDR3 = 34
LDR4 = 35
END1 = 4
END2 = 2
END3 = 15
END4 = 0
REL1 = 32
REL2 = 33
REL3 = 25
REL4 = 26
REL5 = 27
REL6 = 14
LCD_SCL = 22
LCD_SDA = 21
TEMP_CLK = 18
TEMP_MOSI = 23
TEMP_MISO = 19
TEMP_CS1 = 5
#Timer settings and tolerances
DURATION = 250
TOLERANCE = 15
#Component groups for motors
m1_d_in = (END1, END2)
m1_d_out = (REL1, REL2, REL3)
m1_a_in = (LDR1, LDR2)
m2_d_in = (END3, END4)
m2_d_out = (REL4, REL5, REL6)
m2_a_in = (LDR3, LDR4)
#LCD setup
i2c = I2C(1, sda=Pin(21), scl=Pin(22))
LCD = LCD1602(i2c, 0x27)
#initialization of motors
m1 = motor(m1_d_in, m1_d_out, m1_a_in)
m2 = motor(m2_d_in, m2_d_out, m2_a_in)
#Loop
while True:
LCD.puts(m1.sensorread(), 0, 1)
LCD.puts(m2.sensorread(), 9, 1)
m1.move(DURATION, TOLERANCE)
m2.move(DURATION, TOLERANCE)
Code: Select all
from machine import Pin, ADC
from time import sleep_ms
class motor:
def __init__(self, digital_in, digital_out, analog_in):
self.digital_in = digital_in
self.endstop = []
for i in self.digital_in:
self.endstop[i] = Pin(digital_in[i], Pin.IN)
self.digital_out = digital_out
self.relay = []
for i in self.digital_out:
self.relay[i] = Pin(digital_out[i], Pin.OUT)
self.analog_in = analog_in
self.ldr = []
for i in self.analog_in:
self.ldr[i] = ADC(Pin(self.analog_in[i]))
self.ldr[i].atten(ADC.ATTN_11DB)
def move(self, duration, tolerance):
self.duration = duration
self.tolerance = tolerance
if self.ldr[0].read() - self.ldr[1].read() > self.tolerance:
self.relay[0].on()
self.relay[1].on()
self.relay[2].off()
elif self.ldr[1].read() - self.ldr[0].read() > self.tolerance:
self.relay[0].on()
self.relay[1].off()
self.relay[2].on()
sleep_ms(duration)
#Read sensors for display
def sensorread(self):
result = str(self.ldr[0].read()) + (" ") + str(self.ldr[1].read())
return result