Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
/********* Pleasedontcode.com ********** Pleasedontcode thanks you for automatic code generation! Enjoy your code! - Terms and Conditions: You have a non-exclusive, revocable, worldwide, royalty-free license for personal and commercial use. Attribution is optional; modifications are allowed, but you're responsible for code maintenance. We're not liable for any loss or damage. For full terms, please visit pleasedontcode.com/termsandconditions. - Project: Simultaneous Pulses - Source Code compiled for: ESP32 DevKit V1 - Source Code created on: 2025-10-19 08:07:02 ********* Pleasedontcode.com **********/ /****** SYSTEM REQUIREMENTS *****/ /****** SYSTEM REQUIREMENT 1 *****/ /* provide five pulse outputs simultaneously of one */ /* millisecond at individual frequencies . The */ /* frequencies required are as follows : 10 Hz , 25 */ /* Hz , 50 Hz , 75 Hz , 100 Hz . */ /****** END SYSTEM REQUIREMENTS *****/ /* START CODE */ /****** DEFINITION OF LIBRARIES *****/ /****** FUNCTION PROTOTYPES *****/ void setup(void); void loop(void); // ESP32 Five-Channel Pulse Generator // Generates five simultaneous 1 ms pulses at frequencies: // 10 Hz, 25 Hz, 50 Hz, 75 Hz, 100 Hz on five separate GPIO pins. // Pin assignments for ESP32 DevKit V1 (adjust if needed): const uint8_t PULSE_PINS[5] = {16, 17, 18, 19, 21}; // Target frequencies in Hz const uint32_t PULSE_FREQS[5] = {10, 25, 50, 75, 100}; // Internal channel representation typedef struct { uint8_t pin; // GPIO pin for the channel uint64_t period_us; // Pulse period in microseconds uint64_t next_time; // Next scheduled pulse start time (microseconds) bool in_pulse; // Is the 1 ms pulse currently high? uint64_t pulse_end; // Time when current 1 ms pulse ends } PulseChannel; PulseChannel channels[5]; void setup(void) { // Initialize serial for debugging (optional) // Serial.begin(115200); // Configure pins as outputs and reset state for (int i = 0; i < 5; i++) { pinMode(PULSE_PINS[i], OUTPUT); digitalWrite(PULSE_PINS[i], LOW); } // Initialize channel parameters uint64_t now = (uint64_t)micros(); for (int i = 0; i < 5; i++) { channels[i].pin = PULSE_PINS[i]; // Use integer division for period; fractional remainder ignored per cycle channels[i].period_us = (uint64_t)(1000000ull / PULSE_FREQS[i]); channels[i].next_time = now; // start pulses immediately channels[i].in_pulse = false; channels[i].pulse_end = 0; } } void loop(void) { uint64_t now = (uint64_t)micros(); for (int i = 0; i < 5; i++) { // If not currently pulsing and it's time for the next pulse, start a 1 ms pulse if (!channels[i].in_pulse && now >= channels[i].next_time) { digitalWrite(channels[i].pin, HIGH); channels[i].in_pulse = true; channels[i].pulse_end = now + 1000ull; // 1 ms pulse width } // If currently pulsing and the 1 ms width has elapsed, end pulse and schedule next else if (channels[i].in_pulse && now >= channels[i].pulse_end) { digitalWrite(channels[i].pin, LOW); channels[i].in_pulse = false; // Schedule next pulse start time based on period channels[i].next_time += channels[i].period_us; // If we somehow fell behind, realign to now if (channels[i].next_time < now) { channels[i].next_time = now + channels[i].period_us; } } } // Small delay to prevent excessive CPU usage; keeps loop responsive delayMicroseconds(50); } /* END CODE */
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)