1
1
#include < Wire.h>
2
2
#include < Adafruit_PWMServoDriver.h>
3
3
4
+ // Initialize the PCA9685 servo driver
4
5
Adafruit_PWMServoDriver pca9685 = Adafruit_PWMServoDriver();
5
6
7
+ // Standard positions for the servos when the robot is in a neutral position
6
8
#define STANDARD_y 325
7
9
#define STANDARD_xA 315
8
10
#define STANDARD_xB 295
9
11
#define STANDARD_xC 305
10
12
#define STANDARD_xD 345
11
13
14
+ // Servo pin assignments
12
15
#define SERVO_yD 12
13
16
#define SERVO_yC 13
14
17
#define SERVO_yB 14
@@ -18,12 +21,14 @@ Adafruit_PWMServoDriver pca9685 = Adafruit_PWMServoDriver();
18
21
#define SERVO_xB 6
19
22
#define SERVO_xD 7
20
23
24
+ // Struct to define servo configurations
21
25
struct ServoConfig {
22
- uint8_t pin;
23
- int standard;
24
- bool increasesUp;
26
+ uint8_t pin; // Servo pin number
27
+ int standard; // Standard (neutral) position
28
+ bool increasesUp; // Defines whether an increase in value moves the servo up or down
25
29
};
26
30
31
+ // Array storing the configurations for each servo
27
32
ServoConfig servos[] = {
28
33
{SERVO_yA, STANDARD_y, true },
29
34
{SERVO_yB, STANDARD_y, false },
@@ -35,6 +40,7 @@ ServoConfig servos[] = {
35
40
{SERVO_xD, STANDARD_xD, false }
36
41
};
37
42
43
+ // Function to move a specific servo with an offset from its standard position
38
44
void moveServo (uint8_t servoPin, int offset) {
39
45
for (ServoConfig &s : servos) {
40
46
if (s.pin == servoPin) {
@@ -51,82 +57,75 @@ void setup() {
51
57
pca9685.setPWMFreq (50 );
52
58
delay (1000 );
53
59
54
- sit ();
60
+ sit (); // Start in the sitting position
55
61
delay (3000 );
56
- stand ();
62
+ stand (); // Move to the standing position
57
63
delay (3000 );
58
- sit ();
59
- delay (3000 );
60
- stand ();
61
- delay (3000 );
62
- sit ();
63
- delay (3000 );
64
- stand ();
65
- delay (1500 );
66
-
67
64
}
68
65
69
66
void loop () {
70
- // walk();
67
+ // walk(); // Uncomment to enable walking in the main loop
71
68
}
72
69
70
+ // Function to move the robot into a sitting position
73
71
void sit () {
74
72
for (ServoConfig &s : servos) {
75
73
moveServo (s.pin , 0 );
76
74
}
77
75
}
78
76
77
+ // Function to make the robot stand up
79
78
void stand () {
80
79
moveServo (SERVO_yA, -120 );
81
80
moveServo (SERVO_yB, -120 );
82
81
moveServo (SERVO_yC, -120 );
83
82
moveServo (SERVO_yD, -120 );
84
83
}
85
84
85
+ // Function to move all legs forward in the x-axis
86
86
void forward_x () {
87
87
moveServo (SERVO_xA, 40 );
88
88
moveServo (SERVO_xB, 40 );
89
89
moveServo (SERVO_xC, 40 );
90
90
moveServo (SERVO_xD, 40 );
91
91
}
92
-
92
+
93
+ // Function to simulate walking movement
93
94
void walk (){
94
- // fase 1
95
- // B e C si abbassano mentre A e D si alzano
96
- // B e C si abbassano
95
+ // Phase 1
96
+ // B and C lower while A and D lift
97
+ // B and C lower
97
98
moveServo (SERVO_yB, -120 );
98
99
moveServo (SERVO_yC, -120 );
99
- // forse inserire delay qua
100
- // A e D si alzano
100
+ // A and D lift
101
101
moveServo (SERVO_yA, -85 );
102
102
moveServo (SERVO_yD, -85 );
103
103
delay (250 );
104
- // B e C spingono indietro mentre A e D vanno avanti
105
- // B e C spingono indietro
104
+ // B and C push backward while A and D move forward
105
+ // B and C push backward
106
106
moveServo (SERVO_xB, -50 );
107
107
moveServo (SERVO_xC, -50 );
108
- // A e D vanno avanti
108
+ // A and D move forward
109
109
moveServo (SERVO_xA, 50 );
110
110
moveServo (SERVO_xD, 50 );
111
111
delay (500 );
112
- // fase 2
113
- // A e D si abbassano mentre B e C si alzano
114
- // A e D si abbassano
112
+
113
+ // Phase 2
114
+ // A and D lower while B and C lift
115
+ // A and D lower
115
116
moveServo (SERVO_yA, -120 );
116
117
moveServo (SERVO_yD, -120 );
117
- // forse inserire delay qua
118
- // B e C si alzano
118
+ // B and C lift
119
119
moveServo (SERVO_yB, -85 );
120
120
moveServo (SERVO_yC, -85 );
121
121
delay (250 );
122
- // B e C vanno avanti mentre A e D spingono indietro
123
- // A e D spingono indietro
122
+ // B and C move forward while A and D push backward
123
+ // A and D push backward
124
124
moveServo (SERVO_xA, -50 );
125
125
moveServo (SERVO_xD, -50 );
126
- // B e C vanno avanti
126
+ // B and C move forward
127
127
moveServo (SERVO_xB, 50 );
128
128
moveServo (SERVO_xC, 50 );
129
-
130
129
delay (500 );
131
-
132
- }
130
+
131
+ }
0 commit comments