I am looking for a Sketch that will allow me to exercise servos as I set them up. I have new servos, and I want to find the New Min & Max and make sure it works the way I think it does before I assemble and code the Major projects.
I just want to be able to set/test the Min, Max, Speed (acceleration?) and position from the Consoe... Multiple channels would be nice, But I can work with one channel at a time.
My Servo routines work fine, I just need something to help tune with new servos....
i include a customized version pcRead(), included in the following, in almost all my projects to support testing of various aspects of the code as it developes and to support diagnostics. I'll add commands for functions specific to the application i'm working on
shouldn't the "tool" your searching for be part of your code?
// pcRead - debugging using serial monitor
const char version [] = "PcRead 240209a";
int debug = 0;
// -----------------------------------------------------------------------------
// process single character commands from the PC
#define MAX_CHAR 10
char s [MAX_CHAR] = {};
int analogPin = 0;
void
pcRead (void)
{
static int val = 0;
if (Serial.available()) {
int c = Serial.read ();
switch (c) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
val = c - '0' + (10 * val);
break;
case 'A':
analogPin = val;
Serial.print ("analogPin = ");
Serial.println (val);
val = 0;
break;
case 'D':
debug ^= 1;
break;
case 'I':
pinMode (val, INPUT);
Serial.print ("pinMode ");
Serial.print (val);
Serial.println (" INPUT");
val = 0;
break;
case 'O':
pinMode (val, OUTPUT);
Serial.print ("pinMode ");
Serial.print (val);
Serial.println (" OUTPUT");
val = 0;
break;
case 'P':
pinMode (val, INPUT_PULLUP);
Serial.print ("pinMode ");
Serial.print (val);
Serial.println (" INPUT_PULLUP");
val = 0;
break;
case 'a':
Serial.print ("analogRead: ");
Serial.println (analogRead (val));
val = 0;
break;
case 'c':
digitalWrite (val, LOW);
Serial.print ("digitalWrite: LOW ");
Serial.println (val);
val = 0;
break;
case 'p':
#if !defined(ARDUINO_ARCH_ESP32)
analogWrite (analogPin, val);
Serial.print ("analogWrite: pin ");
Serial.print (analogPin);
Serial.print (", ");
Serial.println (val);
val = 0;
#endif
break;
case 'r':
Serial.print ("digitalRead: pin ");
Serial.print (val);
Serial.print (", ");
Serial.println (digitalRead (val));
val = 0;
break;
case 's':
digitalWrite (val, HIGH);
Serial.print ("digitalWrite: HIGH ");
Serial.println (val);
val = 0;
break;
case 't':
Serial.print ("pinToggle ");
Serial.println (val);
digitalWrite (val, ! digitalRead (val));
val = 0;
break;
case 'v':
Serial.print ("\nversion: ");
Serial.println (version);
break;
case '\n': // ignore
break;
case '?':
Serial.println ("\npcRead:\n");
Serial.println (" [0-9] append to #");
Serial.println (" # A - set analog pin #");
Serial.println (" # D - set debug to #");
Serial.println (" # I - set pin # to INPUT");
Serial.println (" # O - set pin # to OUTPUT");
Serial.println (" # P - set pin # to INPUT_PULLUP");
Serial.println (" # a - analogRead (pin #)");
Serial.println (" # c - digitalWrite (pin #, LOW)");
Serial.println (" # p - analogWrite (analogPin, #)");
Serial.println (" # r - digitalRead (pin #)");
Serial.println (" # s - digitalWrite (pin #, HIGH)");
Serial.println (" t - toggle pin output");
Serial.println (" v - print version");
Serial.println (" ? - list of commands");
break;
default:
Serial.print ("unknown char ");
Serial.println (c,HEX);
break;
}
}
}
// -----------------------------------------------------------------------------
void
loop (void)
{
pcRead ();
}
// -----------------------------------------------------------------------------
void
setup (void)
{
Serial.begin(9600);
Serial.println (version);
#if defined(ARDUINO_ARCH_ESP32)
Serial.println ("esp32");
#endif
}
I did build a routine in (sorry) ChatGPT that uses both Arduino code and Python to build a usable tool. For each channel it has a min, max and speed along with a position slider and a Sweep command. It is modular so the utility can deal with 1-12 servos.
The Code ChatGpt built still had omissions, but it is cleaner, more straight forward and definitely better documented than I would have written.
The big effort was to correct the description, which has taken as long to write as the first pass on any project. Now I am at the "Add a button that does..." stage...
Should be a nice utility when it is finished/polished. I will post the code when it is done done...