From 78a409cf44b3cf5080cd2686ea65dd462f6a9495 Mon Sep 17 00:00:00 2001
From: Ethan Walters <WaltersE6@cardiff.ac.uk>
Date: Wed, 23 Apr 2025 03:23:33 +0100
Subject: [PATCH] Added minor comments to Arduino sketches

---
 .../arduino0_motor_button.ino                 | 49 +++++++++----------
 .../arduino1_motor_motionsensor.ino           | 46 +++++++++++------
 2 files changed, 52 insertions(+), 43 deletions(-)

diff --git a/physical/arduino/arduino0_motor_button/arduino0_motor_button.ino b/physical/arduino/arduino0_motor_button/arduino0_motor_button.ino
index e0e38e5..e8c7de4 100644
--- a/physical/arduino/arduino0_motor_button/arduino0_motor_button.ino
+++ b/physical/arduino/arduino0_motor_button/arduino0_motor_button.ino
@@ -1,31 +1,23 @@
-/***************************************************************************
-* Sketch Name: arduino_usb_servo_buttons
-*
-* Updated Version: 01/04/2025
-*
-* Description:
-*   - USB-controlled servo motor.
-*   - Receives "SERVO X" to control a servo at any angle (0-180).
-*   - Includes two Grove LED buttons that send serial messages when pressed.
-***************************************************************************/
-
+// Include the Servo library
 #include <Servo.h>
 
 // Define pin for Servo
-#define SERVO_PIN 5  // 🔌 Grove PWM D5 (Servo motor)
+#define SERVO_PIN 5  // Grove Servo (D5)
 
 // Define pins for Grove LED Buttons
+// The grove buttons must be connected to the pin below the Arduino pin number
+// They are unique in this case, and don't work like other Grove modules
+// For example, if the button is connected to D3, the pin number is 4:
 #define BUTTON1_PIN 4  // Grove Button 1 (D3)
 #define BUTTON2_PIN 7  // Grove Button 2 (D6)
 
 // Create Servo object
 Servo myservo;
 
-void setup()
-{
-  Serial.begin(9600);      // Debugging serial monitor
-  myservo.attach(SERVO_PIN);  // Attach servo motor to pin 5
-  myservo.write(90);  // Set initial position to 90 degrees
+void setup() {
+  Serial.begin(9600); // Start serial communication at 9600 baud
+  myservo.attach(SERVO_PIN); // Attach servo motor to the specified pin
+  myservo.write(90); // Set initial position to 90 degrees, the middle position
 
   // Initialize button pins as input
   pinMode(BUTTON1_PIN, INPUT_PULLUP);
@@ -35,7 +27,8 @@ void setup()
   pinMode(LED1_PIN, OUTPUT);
   pinMode(LED2_PIN, OUTPUT);
   
-  digitalWrite(LED1_PIN, LOW); // Ensure LEDs start off
+  // Ensure LEDs start in an off state (LOW)
+  digitalWrite(LED1_PIN, LOW); 
   digitalWrite(LED2_PIN, LOW);
   
   Serial.println("System Ready");
@@ -43,36 +36,38 @@ void setup()
 
 void loop()
 {
-  // **Check for USB serial commands from Node-RED**
+  // Check for USB serial commands from Node-RED (or any other source)
   if (Serial.available()) {
-    String command = Serial.readStringUntil('\n'); // Read full command
+    String command = Serial.readStringUntil('\n'); // Read full command (commands end with '\n' by default)
     command.trim(); // Remove whitespace
 
-    Serial.println("Received: " + command); // Debugging
+    Serial.println("Received: " + command); // Serial output for debugging
 
-    // **Check if the command starts with "SERVO "** (e.g., "SERVO 90")
+    // Check if the command starts with "SERVO " (e.g., "SERVO 90")
+    // This is the expected format for controlling the servo
     if (command.startsWith("SERVO ")) {
       int angle = command.substring(6).toInt(); // Extract angle value
 
-      // **Ensure the angle is between 0 and 180**
+      // Ensure the angle is between 0 and 180
       if (angle >= 0 && angle <= 180) {
-        myservo.write(angle);  // Move servo to specified angle
+        myservo.write(angle); // Move servo to specified angle
         Serial.print("Servo moved to: ");
         Serial.println(angle);
       } else {
+        // Return an error message if the angle is invalid, this will be sent to Node-RED
         Serial.println("Invalid angle! Must be 0-180.");
       }
     }
   }
 
-  // **Check button presses and send messages**
+  // Check button presses and send messages
   if (digitalRead(BUTTON1_PIN) == HIGH) {
     Serial.println("BUTTON1 PRESSED");
-    delay(300); // Debounce delay
+    delay(300); // Debounce delay to prevent multiple readings
   }
 
   if (digitalRead(BUTTON2_PIN) == HIGH) {
     Serial.println("BUTTON2 PRESSED");
-    delay(300); // Debounce delay
+    delay(300); // Debounce delay to prevent multiple readings
   }
 }
diff --git a/physical/arduino/arduino1_motor_motionsensor/arduino1_motor_motionsensor.ino b/physical/arduino/arduino1_motor_motionsensor/arduino1_motor_motionsensor.ino
index a2b86a5..ced251f 100644
--- a/physical/arduino/arduino1_motor_motionsensor/arduino1_motor_motionsensor.ino
+++ b/physical/arduino/arduino1_motor_motionsensor/arduino1_motor_motionsensor.ino
@@ -1,49 +1,63 @@
+
+// Include the Servo library
 #include <Servo.h>
 
 // Define pins
 #define PIR_MOTION_SENSOR 2
 #define SERVO_PIN 5
 
+// Create Servo object
 Servo myservo;
 
 // Motion sensing control flag
 bool motionSensingEnabled = true;
 
-void setup()
-{
-  Serial.begin(9600);
-  pinMode(PIR_MOTION_SENSOR, INPUT);
-  myservo.attach(SERVO_PIN);
-  myservo.write(90);
+void setup() {
+  Serial.begin(9600); // Start serial communication at 9600 baud
+  pinMode(PIR_MOTION_SENSOR, INPUT); // Attach PIR motion sensor to specified pin
+  myservo.attach(SERVO_PIN); // Attach servo motor to the specified pin
+  myservo.write(90); // Set initial position to 90 degrees, the middle position
 }
 
-void loop()
-{
-  // Check for USB commands
+void loop() {
+  // Check for USB commands from Node-RED (or any other source)
   if (Serial.available()) {
-    String command = Serial.readStringUntil('\n');
-    command.trim();
+    String command = Serial.readStringUntil('\n'); // Read full command (commands end with '\n' by default)
+    command.trim(); // Remove whitespace
 
-    // Handle servo command
+    // Check if the command starts with "SERVO " (e.g., "SERVO 90")
+    // This is the expected format for controlling the servo
     if (command.startsWith("SERVO ")) {
-      int angle = command.substring(6).toInt();
+      int angle = command.substring(6).toInt(); // Extract angle value
+
+      // Ensure the angle is between 0 and 180
       if (angle >= 0 && angle <= 180) {
-        myservo.write(angle);
+        myservo.write(angle); // Move servo to specified angle
+        Serial.print("Servo moved to: ");
+        Serial.println(angle);
+      } else {
+        // Return an error message if the angle is invalid, this will be sent to Node-RED
+        Serial.println("Invalid angle! Must be 0-180.");
       }
     }
 
-    // Handle motion sensing control
+    // Handle motion sensing control commands
+    // Check if the command is "STOP SENSING" or "START SENSING"
+    // Then enable or disable motion sensing accordingly
+    // This allows motion sensing to be turned off from Node-Red
     else if (command == "STOP SENSING") {
       motionSensingEnabled = false;
+      Seial.println("Motion sensing disabled.");
     }
     else if (command == "START SENSING") {
       motionSensingEnabled = true;
+      Serial.println("Motion sensing enabled.");
     }
   }
 
   // Check PIR only if sensing is enabled
   if (motionSensingEnabled && digitalRead(PIR_MOTION_SENSOR)) {
     Serial.println("Movement");
-    delay(1000); // Simple debounce
+    delay(1000); // Debounce delay to prevent multiple readings
   }
 }
-- 
GitLab