braille_xr/libs/ESP32Servo/examples/analogWriteExample/analogWriteExample.ino
2024-01-27 22:05:00 -05:00

87 lines
2.7 KiB
C++

/*
Mega analogWrite() test
This sketch fades LEDs up and down one at a time on digital pins 2 through 13.
This sketch was written for the Arduino Mega, and will not work on previous boards.
The circuit:
* LEDs attached from pins 2 through 13 to ground. or for ESP32-S2 pins 1-17,19-21,26,33-42
created 8 Feb 2009
by Tom Igoe
This example code is in the public domain.
*/
// These constants won't change. They're used to give names
// to the pins used:
#if defined(ARDUINO_ESP32S2_DEV) || defined(ARDUINO_ESP32S3_DEV)
const int lowestPin = 1;
const int highestPin = 42;
#elif defined(ARDUINO_ESP32C3_DEV)
const int lowestPin = 1;
const int highestPin = 19;
#else
const int lowestPin = 2;
const int highestPin = 33;
#endif
#include <ESP32Servo.h>
Servo myservo;
void setup() {
Serial.begin(115200);
// Allow allocation of all timers
ESP32PWM::allocateTimer(0);
ESP32PWM::allocateTimer(1);
ESP32PWM::allocateTimer(2);
ESP32PWM::allocateTimer(3);
}
void loop() {
if (!myservo.attached()) {
myservo.setPeriodHertz(50); // standard 50 hz servo
myservo.attach(33, 1000, 2000); // Attach the servo after it has been detatched
}
myservo.write(0);
// iterate over the pins:
for (int thisPin = lowestPin; thisPin <= highestPin; thisPin++) {
if (ESP32PWM::hasPwm(thisPin) && // Is it possible for this pin to PWM
(ESP32PWM::channelsRemaining() > 0 || // New channels availible to allocate
pwmFactory(thisPin) != NULL || // already allocated this pin in the factory
thisPin == 25 || // one of the 2 DAC outputs, no timer needed
thisPin == 26)) { // one of the 2 DAC outputs, no timer needed
if (pwmFactory(thisPin) == NULL) { // check if its the first time for the pin or its a DAC
#if defined(ARDUINO_ESP32S2_DEV)
if (thisPin == 17 || // one of the 2 DAC outputs, no timer needed
thisPin == 18)
#elif defined(ARDUINO_ESP32C3_DEV) || defined(ARDUINO_ESP32S3_DEV)
if (1 == 0) // no DAC outputs for these chips
#else
if (thisPin == 25 || // one of the 2 DAC outputs, no timer needed
thisPin == 26)
#endif
{
Serial.println("DAC to pin " + String(thisPin));
} else
Serial.println("Writing to pin " + String(thisPin));
pinMode(thisPin, OUTPUT);
}
// fade the LED on thisPin from off to brightest:
for (int brightness = 0; brightness < 255; brightness++) {
analogWrite(thisPin, brightness);
delay(1);
myservo.write(brightness);
}
// fade the LED on thisPin from brithstest to off:
for (int brightness = 255; brightness >= 0; brightness--) {
analogWrite(thisPin, brightness);
myservo.write(brightness);
delay(1);
}
}
}
myservo.detach(); // Turn the servo off for a while
delay(2000);
}