from machine import Pin, I2C, ADC,PWM
import ssd1306
import time
import math
sg90 = PWM(Pin(4, mode=Pin.OUT))
sg90.freq(50)
sg90_1 = PWM(Pin(16, mode=Pin.OUT))
sg90_1.freq(50)
sg90_2 = PWM(Pin(17, mode=Pin.OUT))
sg90_2.freq(50)
# Initialize I2C for OLED
i2c = I2C(scl=Pin(22), sda=Pin(21))
# Initialize OLED display
oled_width = 128
oled_height = 64
oled = ssd1306.SSD1306_I2C(oled_width, oled_height, i2c)
# Initialize ADC (Analog to Digital Converter)
adc = ADC(Pin(34)) # GPIO 34, ADC1 channel 6
adc1 = ADC(Pin(35))
adc2 = ADC(Pin(33))
adc.atten(ADC.ATTN_11DB) # Full range: 3.3v
adc1.atten(ADC.ATTN_11DB) # Full range: 3.3v
adc2.atten(ADC.ATTN_11DB) # Full range: 3.3v
while True:
# Read ADC value
adc_value = adc.read()
adc_value1 = adc1.read()
adc_value2 = adc2.read()
# Clear the display
oled.fill(0)
# Display ADC value
oled.text("Analog ", 20,0 )
oled.text("ADC Value:", 0,10 )
oled.text(str(adc_value),90 , 10)
oled.text("ADC1 Value:", 0,30 )
oled.text(str(adc_value1),90 , 30)
oled.text("ADC2 Value:", 0,50 )
oled.text(str(adc_value2),90,50)
if adc_value == 0:
for x in range(6):
sg90.duty(26)
time.sleep(1)
sg90.duty(75)
time.sleep(1)
elif adc_value == 4095:
for x in range(6):
sg90.duty(123)
time.sleep(1)
sg90.duty(75)
time.sleep(1)
else :
sg90.duty(75)
time.sleep(1)
if adc_value1 == 0:
for x in range(6):
sg90_1.duty(26)
time.sleep(1)
sg90_1.duty(75)
time.sleep(1)
elif adc_value1 == 4095:
for x in range(6):
sg90_1.duty(123)
time.sleep(1)
sg90_1.duty(75)
time.sleep(1)
else :
sg90_1.duty(75)
time.sleep(1)
if adc_value2 <= 2048:
for x in range(2):
sg90_2.duty(26)
time.sleep(1)
sg90_2.duty(75)
time.sleep(1)
elif adc_value2 > 2048:
for x in range(2):
sg90_2.duty(123)
time.sleep(1)
sg90_2.duty(75)
time.sleep(1)
elif adc_value2 == 0:
sg90_2.duty(75)
time.sleep(1)
# Update the display
oled.show()
# Delay before the next read