const int outputPins[] = {2, 4, 16, 17}; // Pin output untuk menghasilkan pulsa
const int numPins = 4; // Jumlah pin output
int pulseCount = 0; // Jumlah pulsa yang akan dihasilkan
bool isRunning = false; // Status apakah pulsa sedang dihasilkan
void setup() {
Serial.begin(115200); // Inisialisasi Serial Monitor
for (int i = 0; i < numPins; i++) {
pinMode(outputPins[i], OUTPUT); // Set pin output sebagai OUTPUT
digitalWrite(outputPins[i], LOW); // Pastikan pin output LOW saat awal
}
}
void loop() {
// Baca input dari Serial Monitor
if (Serial.available() > 0) {
String input = Serial.readStringUntil('\n'); // Baca input sebagai string
pulseCount = input.toInt(); // Konversi input ke integer
if (pulseCount > 0) {
Serial.print("Menghasilkan ");
Serial.print(pulseCount);
Serial.println(" pulsa per detik pada setiap pin...");
isRunning = true;
} else {
Serial.println("Input tidak valid. Masukkan bilangan bulat positif.");
}
}
// Jika pulsa sedang dihasilkan
if (isRunning) {
generatePulses(pulseCount); // Panggil fungsi untuk menghasilkan pulsa
isRunning = false; // Setelah selesai, hentikan pulsa
Serial.println("Selesai menghasilkan pulsa.");
}
}
// Fungsi untuk menghasilkan pulsa pada 4 pin secara bergantian
void generatePulses(int count) {
unsigned long interval = 1000000 / count; // Interval waktu dalam mikrodetik
for (int i = 0; i < count; i++) {
for (int pin = 0; pin < numPins; pin++) {
digitalWrite(outputPins[pin], HIGH); // Set pin HIGH
delayMicroseconds(interval / (2 * numPins)); // Tunggu setengah interval dibagi jumlah pin
digitalWrite(outputPins[pin], LOW); // Set pin LOW
delayMicroseconds(interval / (2 * numPins)); // Tunggu setengah interval dibagi jumlah pin
}
}
}