Start adding esp32 sketch
This commit is contained in:
23
esp32/README.md
Normal file
23
esp32/README.md
Normal file
@@ -0,0 +1,23 @@
|
||||
This module includes an arduino sketch designed to run on the ESP32.
|
||||
|
||||
The sketch takes simple input from serial (ESP32 microusb port), and converts the input to a duty cycle that can be used on servos.
|
||||
|
||||
The protocol specification is as follows, assuming an array of bytes:
|
||||
|
||||
|
||||
| Byte Number | Value Description |
|
||||
| :---------- | ----------: |
|
||||
| 0 | 0 if Calibrating a servo. Higher values indicates channel number to set duty cycle on. |
|
||||
| 1 | If byte 0 = 0: number of servos to calibrate. Else, the new duty cycle value for the channel specified in byte 0. |
|
||||
|
||||
The table below describes the byte format for calibrating a servo. This array of bytes can be repeated for the given number of servos in byte 1:
|
||||
|
||||
| Byte Number | Value Description |
|
||||
| :---------- | ----------: |
|
||||
| 0 | Servo channel to set (this will be byte 0 when setting duty cycle, so don't use 0). |
|
||||
| 1 | The pin number to setup |
|
||||
| 2 | The frequency for the pin |
|
||||
|
||||
The min/max pulse widths are hardcoded to 1000us/2000us respectively.
|
||||
|
||||
At the end of each loop, the entire array will be read, to flush any data that may cause issues later.
|
||||
37
esp32/esp.ino
Normal file
37
esp32/esp.ino
Normal file
@@ -0,0 +1,37 @@
|
||||
#include <map>
|
||||
#include "Servo.h"
|
||||
|
||||
std::map<uint8_t, Servo> servos;
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
}
|
||||
|
||||
void setupServos(uint8_t *calibrationValues, uint8_t size)
|
||||
{
|
||||
// We assume there are 3 bytes per servo. Ignore if there aren't.
|
||||
if (size % 3 == 0)
|
||||
{
|
||||
for (int i = 0; i < size; i += 3)
|
||||
{
|
||||
servos.insert(std::make_pair(calibrationValues[i], new Servo()))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
uint8_t *header = new uint8_t[2];
|
||||
Serial.readBytes(header, 2);
|
||||
|
||||
if (header[0] == 0)
|
||||
{
|
||||
uint8_t *calibration = new uint8_t[3 * header[1]];
|
||||
Serial.readBytes(calibration, header[1]);
|
||||
setupServos();
|
||||
delete calibration;
|
||||
}
|
||||
|
||||
delete header;
|
||||
}
|
||||
Reference in New Issue
Block a user