Hey guys so this is my first big project and I need a lot of help.
I want to make a hand based on Youbionic’s servo hand which has a total of 11 servo motors(picture attached below).
I’m having some trouble getting my code to do what I want; I want to use my serial monitor to execute certain motions in the hand. My problem is that whenever I enter a command in the serial monitor, it doesn’t execute.
Is this a problem with my code and if so, how would I go about fixing it in this instance? and does using the PCA9685 library instead of adafruits PWM servo driver library affect this as well?
#include <Wire.h>
#include "PCA9685.h"
PCA9685 driver;
PCA9685_ServoEvaluator pwmServo(102, 470); // (-90deg, +90deg)
// Second Servo
// PCA9685_ServoEvaluator pwmServo2(102, 310, 505); // (0deg, 90deg, 180deg)
String command;
void setup() {
Wire.begin(); // Wire must be started first
Wire.setClock(400000); // Supported baud rates are 100kHz, 400kHz, and 1000kHz
driver.resetDevices(); // Software resets all PCA9685 devices on Wire line
driver.init(B000000); // Address pins A5-A0 set to B000000
driver.setPWMFrequency(50); // Set frequency to 50Hz
Serial.begin(9600);
}
void loop() {
driver.setChannelPWM(0, pwmServo.pwmForAngle(90)); //thumb
driver.setChannelPWM(1, pwmServo.pwmForAngle(90));
driver.setChannelPWM(2, pwmServo.pwmForAngle(90));
driver.setChannelPWM(3, pwmServo.pwmForAngle(90)); //index
driver.setChannelPWM(4, pwmServo.pwmForAngle(90));
driver.setChannelPWM(5, pwmServo.pwmForAngle(90)); //middle
driver.setChannelPWM(6, pwmServo.pwmForAngle(90));
driver.setChannelPWM(7, pwmServo.pwmForAngle(90)); //ring
driver.setChannelPWM(8, pwmServo.pwmForAngle(90));
driver.setChannelPWM(9, pwmServo.pwmForAngle(90)); //pinky
driver.setChannelPWM(10, pwmServo.pwmForAngle(90));
Serial.println("Type command as seen bellow");
Serial.println("commands to choose from: ");
Serial.println(" ");
Serial.println("test || one || two || three || four || five");
while(Serial.available() == 0) {
}
command = Serial.readString();
Serial.println(command);
Serial.print(" ");
if(command == "one") {
one();
}
}
void one() {
driver.setChannelPWM(0, pwmServo.pwmForAngle(-90));
driver.setChannelPWM(1, pwmServo.pwmForAngle(-90));
driver.setChannelPWM(2, pwmServo.pwmForAngle(-90));
driver.setChannelPWM(3, pwmServo.pwmForAngle(90));
driver.setChannelPWM(4, pwmServo.pwmForAngle(90));
driver.setChannelPWM(5, pwmServo.pwmForAngle(-90));
driver.setChannelPWM(6, pwmServo.pwmForAngle(-90));
driver.setChannelPWM(7, pwmServo.pwmForAngle(-90));
driver.setChannelPWM(8, pwmServo.pwmForAngle(-90));
driver.setChannelPWM(9, pwmServo.pwmForAngle(-90));
driver.setChannelPWM(10, pwmServo.pwmForAngle(-90));
delay(1000);
}