diff --git a/.idea/misc.xml b/.idea/misc.xml
index 13fecf3..22fb1e8 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,4 @@
-
+
\ No newline at end of file
diff --git a/.idea/pythonProject.iml b/.idea/pythonProject.iml
index 97538d9..415dc9c 100644
--- a/.idea/pythonProject.iml
+++ b/.idea/pythonProject.iml
@@ -12,7 +12,7 @@
-
+
diff --git a/README.md b/README.md
index 02c013d..f619257 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,15 @@
# SunFollower
+## How to Upload to Pi
+1. Go to the [Thonny](https://thonny.org/) website
+2. Hover over "Windows" option in the Download Options box
+3. Click the download for "Installer with 64-bit Python 3.10"
+4. Run the installer when the download finishes
+5. Select "Install for me only"
+6. Click "Next" through all the options
+7. Click "Install", then "Finish"
+8. Run Thonny (Click "Lets go" on first run)
+9. Plug in the Raspberry Pi Pico if you haven't already
+10. Click in the bottom right, a menu should pop up. Select "MicroPython (Raspberry Pi Pico)"
+11. Copy and paste the whole code snippet from [main.py](./main.py) into the Thonny IDE
+12. Press the Green play button to upload the code to the Pi
\ No newline at end of file
diff --git a/main.py b/main.py
index 9d37b8e..74753ad 100644
--- a/main.py
+++ b/main.py
@@ -9,10 +9,12 @@ cur_deg = 90
reset_button = Pin(14, Pin.IN)
calibrate_button = Pin(15, Pin.IN)
cal_threshold = 0
-led = Pin('WL_GPIO0', Pin.OUT)
+led = Pin(0, Pin.OUT)
led.high()
run_avg = [0, 0, 0, 0, 0]
+sensitivity = 10
+
def servo(degrees):
if degrees > 180:
@@ -36,10 +38,10 @@ def move_to_light():
is_facing_light = False
while not is_facing_light:
offset = light_sensor_1.read_u16() - light_sensor_2.read_u16()
- if offset > 50 and cur_deg > 0:
+ if offset > (sensitivity - 5) and cur_deg > 0:
cur_deg = cur_deg - 1
servo(cur_deg - 5)
- elif offset < -50 and cur_deg < 180:
+ elif offset < -(sensitivity - 5) and cur_deg < 180:
cur_deg = cur_deg + 1
servo(cur_deg)
else:
@@ -72,7 +74,7 @@ while True:
sign = True
for i in run_avg:
cur_num = i
- if abs(cur_num) > 75:
+ if abs(cur_num) > sensitivity:
if first_iter:
if cur_num >= 0:
sign = True
diff --git a/main.py.temp b/main.py.temp
new file mode 100644
index 0000000..aeee24d
--- /dev/null
+++ b/main.py.temp
@@ -0,0 +1,101 @@
+import time
+from machine import Pin, ADC, PWM
+
+light_sensor_1 = ADC(26)
+light_sensor_2 = ADC(27)
+servo_pwm = PWM(Pin(28, Pin.OUT))
+servo_pwm.freq(50)
+cur_deg = 90
+reset_button = Pin(14, Pin.IN)
+calibrate_button = Pin(15, Pin.IN)
+led = Pin(25, Pin.OUT)
+led.high()
+run_avg = [0, 0, 0, 0, 0]
+
+light_1_offset = 0
+light_2_offset = 0
+
+
+def servo(degrees):
+ if degrees > 180:
+ degrees = 180
+ if degrees < 0:
+ degrees = 0
+ max_duty = 2500000
+ min_duty = 500000
+ new_duty = min_duty + (max_duty - min_duty) * (degrees / 180)
+ servo_pwm.duty_ns(int(new_duty))
+
+
+def shift_array(arr, num_to_add):
+ arr.pop(0)
+ arr.append(num_to_add)
+ return arr
+
+
+def move_to_light():
+ print("Moving to light...")
+ global cur_deg
+ is_facing_light = False
+ while not is_facing_light:
+ offset = light_sensor_1.read_u16() - light_sensor_2.read_u16()
+ if offset > 75 and cur_deg > 0:
+ cur_deg = cur_deg - 1
+ servo(cur_deg)
+ elif offset < -75 and cur_deg < 180:
+ cur_deg = cur_deg + 1
+ servo(cur_deg)
+ else:
+ is_facing_light = True
+ time.sleep(.01)
+ print("Moved to light!")
+
+
+servo(90)
+while True:
+ if reset_button.value() == 1:
+ led.low()
+ cur_deg = 90
+ servo(90)
+ cal_threshold = 0
+ run_avg = [0, 0, 0, 0, 0]
+ while reset_button.value() == 1:
+ time.sleep(.1)
+ led.high()
+ print("Reset")
+ continue
+ if calibrate_button.value() == 1:
+ sens_1 = light_sensor_1.read_u16()
+ sens_2 = light_sensor_2.read_u16()
+ if sens_1 > sens_2:
+ light_1_offset = sens_1 - sens_2
+ elif sens_1 < sens_2:
+ light_2_offset = sens_2 - sens_1
+ while calibrate_button.value() == 1:
+ time.sleep(.1)
+ diff = light_sensor_1.read_u16() - light_sensor_2.read_u16() - (light_1_offset - light_2_offset)
+ run_avg = shift_array(run_avg, diff)
+ num_over = 0
+ first_iter = True
+ sign = True
+ for cur_num in run_avg:
+ if abs(cur_num) > 90:
+ if first_iter:
+ print("First iter")
+ if cur_num >= 0:
+ sign = True
+ else:
+ sign = False
+ first_iter = False
+ if (cur_num >= 0 and not sign) or (cur_num < 0 and sign):
+ print("Reset")
+ num_over = 0
+ first_iter = True
+ break
+ elif (cur_num >= 0 and sign) or (cur_num < 0 and not sign):
+ print("+1")
+ num_over += 1
+ if num_over == 5:
+ print("Try move")
+ move_to_light()
+ run_avg = [0, 0, 0, 0, 0]