Controlar frecuencias al mismo tiempo por pines distintos

Hola, buenas.

Alguien sabe como poder controlar 3 frecuencias al mismo tiempo por canales distintos? Estoy usando la función "Millis" y "Tone", pero no logro hacerlas funcionar al mismo tiempo...

hernanvt:
Alguien sabe como poder controlar 3 frecuencias al mismo tiempo por canales distintos? Estoy usando la función “Millis” y “Tone”, pero no logro hacerlas funcionar al mismo tiempo…

Con tone no hay de otra que turnar los canales muy rápidamente.

La otra sería generar tantos canales como timers tenga el microcontrolador. En los basados en Atmega328P, hay hasta tres.

Ya lo logré. Colocaré el código por si a alguien le sirve.

// -------------------------------> Intervalo de envio de señal al Serial ----------------------------------------------- unsigned long previousMicros = 0; const long interval = 25;

unsigned long previousMicrosHz1 = 0; unsigned long previousMicrosHz2 = 0; unsigned long previousMicrosHz3 = 0;

long intervalHz1 = 166; // 3000 Hertz long intervalHz2 = 500; // 1000 Hertz long intervalHz3 = 249; // 2000 Hertz

long Hz1; long Hz2; long Hz3;

const int frecuencia1 = 9; // 3000 Hertz. const int frecuencia2 = 6; // 1000 Hertz. const int frecuencia3 = 5; // 2000 Hertz.

int frecuencia1State = HIGH; int frecuencia2State = HIGH; int frecuencia3State = HIGH;

void setup() { Serial.begin(115200);

pinMode(frecuencia1, OUTPUT); // Configuración de salidas. pinMode(frecuencia2, OUTPUT); // Configuración de salidas. pinMode(frecuencia3, OUTPUT); // Configuración de salidas.

digitalWrite(frecuencia1, frecuencia1State); digitalWrite(frecuencia2, frecuencia2State); digitalWrite(frecuencia3, frecuencia3State);

}

void loop() {

//if (enable==HIGH) { if (Serial.available() > 0) { int ch = Serial.parseInt(); int ch2 = Serial.parseInt(); int ch3 = Serial.parseInt(); if (ch == 0 || ch2 == 0 || ch3==0) {} else { Hz1 = ch; Hz2 = ch2; Hz3 = ch3;

} // Se muestra el byte en el monitor serie. intervalHz1 = frequency(Hz1); intervalHz2 = frequency(Hz2); intervalHz3 = frequency(Hz3); Serial.print(intervalHz1); Serial.print(F(" ")); Serial.println(intervalHz2); Serial.print(F(" ")); Serial.println(intervalHz3);

}

unsigned currentMicros = micros();

if (currentMicros - previousMicrosHz1 >= intervalHz1) { previousMicrosHz1 = currentMicros;

if (frecuencia1State == HIGH) frecuencia1State = LOW; else frecuencia1State = HIGH;

digitalWrite(frecuencia1, frecuencia1State);

}

if (currentMicros - previousMicrosHz2 >= intervalHz2) { previousMicrosHz2 = currentMicros;

if (frecuencia2State == HIGH) frecuencia2State = LOW; else frecuencia2State = HIGH;

digitalWrite(frecuencia2, frecuencia2State);

} if (currentMicros - previousMicrosHz3 >= intervalHz3) { previousMicrosHz3 = currentMicros;

if (frecuencia3State == HIGH) frecuencia3State = LOW; else frecuencia3State = HIGH;

digitalWrite(frecuencia3, frecuencia3State); } /*} else { digitalWrite(frecuencia1, LOW); digitalWrite(frecuencia2, LOW); digitalWrite(frecuencia3, LOW); } */ } }