Generación de salidas de Pulsos especial

Hola a todos,ya modifique el código y mejore la explicación con respecto a la asesoría que necesito.

Necesito generar 4 pulsos, por las salidas digitales por ejemplo 8,9 y 10,11, en este momento estoy usando un Arduino Mega.
Los pulsos tienen estas características:

1)8 y 9 son los mismos pulsos, pero los necesito que estén saliendo cada uno por una salida digital. Del mismo modo 10 y 11 son otra pareja igual de pulsos pero diferentes de 8 y 9. Por lo tanto, son en total dos pulsos, solo que cada uno lo duplicare y lo enviare independientemente cada uno en una salida digital.

He aquí el grueso del asunto con el que necesito de sus experiencias:

2)Los pulsos que necesito generar son con el corte de una entrada análoga de un potenciometro que se produce con una onda trigonométrica que genero con un barrido en grados con la ayuda de un ciclo for.
Es decir que las señales Vc y Vd ( señales trigonométricas) las debo comparar con una señal de control (Potenciometro) llamada Vx. Es decir, que para cada señal Vc y Vd, tendría un par de pulsos asociados cada una de este modo, en 8,9 y 10,11.
Pienso que esta comparación de las señales con respecto al estado de la señal del potenciometro se puede hacer con un arreglo IF, por eso pido la ayuda de ustedes porque ya lo he intentado y no me ha funcionado correctamente.

  1. Algo importante es que solo necesito generar un flanco de subida que es con el primer corte con la onda cosenoidal, el segundo que seria el flanco de bajado no es importante, no se como podría limitar esto.

Muchas gracias a todos por su ayuda, espero que este nuevo post modificado y mejorado sea mas entendible.

float V1,V2,V4,V6,V7;
float Vc,Vd,Vcc;
float Vx;

void setup() {
  
  Serial.begin(19200);
  pinMode(A0,INPUT);
  
}

void loop() {

  Vx=2.0*analogRead(A0)/1023.0; //Lectura de un potenciometro, va estar en el rango de 0 a 2

//Vx=1.5; //Ingreso manual de datos

  for (float j = 0; j <= 360; j++) {
    V1=1.0*cos(j * (PI / 180.0));

//Genero las dos señales necesarias Vd y Vc
    
    Vd=V1+1.0;
    Vc=1.0-V1;

    if(Vc>=Vx){V6=1;}else{V6=0;}
    if(Vd>=Vx){V7=1;}else{V7=0;}

    
      Serial.print(V7-2.0);
      Serial.print(" ");
      Serial.print(V6-2.0);
      Serial.print(" ");
      Serial.print(Vx);
      Serial.print(" ");
      Serial.print(Vd);
      Serial.print(" ");
      Serial.println(Vc);      
     
    }
    
 }

Mi estimado Panda0618, lee tu post, y olvida que tu sabes del tema y dime si alguien leyendo lo que has posteado puede entender lo que pides o a donde apuntas?

Trata de mejorar la explicación, que quieres hacer, generador de pulsos si, pero de que tipo, esquema, gráfico, esfúerzate un poco mas!!

Ahora si!!!!
Es como que quires generar un Schmith trigger. Tienes un umbral dado por el potenciometro y cada Señal debe darte una respuesta determinada

Bueno quiero comentarte y guiarte que lo que debes buscar es como aprovechar el modo comparacion que tienen las entradas analogicas.
Las entradas analógicas tienen un modo comparación tal que disparan una interrupcion cuando el umbral indicado es alcanzado o bien las togglea (bascula).

/*
  AnalogComparator
  Testing the Atmega328 built-in analog comparator
  For info and circuit diagrams see https://github.com/tardate/LittleArduinoProjects/tree/master/playground/AnalogComparator
 */

#define INDICATOR_PIN 8

volatile boolean triggered;
volatile boolean rising;
volatile byte acsr_value;

ISR (ANALOG_COMP_vect) {
  if (triggered) return;           // For testing purposes, ignore the interrupt if we haven't reported the last one yet.
                                   // This also effects some crude debouncing.
  cli();
  acsr_value = ACSR;
  rising = (acsr_value & bit(ACO)) > 0;
  triggered = true;
  sei();
}

void setup() {
  Serial.begin (115200);
  Serial.println ("Started.");

  pinMode(INDICATOR_PIN, OUTPUT);
  digitalWrite(INDICATOR_PIN, LOW);

  ADCSRB = ADCSRB & ! bit(ACME);   // disable Analog Comparator Multiplexer Enable
  ACSR =  bit(ACI)                 // clear Analog Comparator Interrupt Flag
        | bit(ACIE)                // set Analog Comparator Interrupt Enable
        | bit(ACIS1) | bit(ACIS0)  // select rising edge: ACIS1/ACIS0 Analog Comparator Interrupt Mode Select
        ;
}

void loop() {
  if (triggered) show_what_happened();
}

// just give an indication via Serial and LED that we handled an interrupt...
void show_what_happened() {
  digitalWrite(INDICATOR_PIN, HIGH);

  Serial.print ("Disparo! ACSR=");
  Serial.print (acsr_value, BIN);
  if (rising)
    Serial.println (" Flanco ascendente ");
  else
    Serial.println (" Flanco descendente");

  triggered = false;

  delay(100);
  digitalWrite(INDICATOR_PIN, LOW);
}

Probalo y dale vuelta a lo que necesites.
EL divisor con la LDR reperesenta tu señal desplazada en 2.5V supongo y lo tor el potenciometro salvo que ahi esta fijo. La idea es la misma.

Gracias, que gran detalle esto.

Voy a revisarlo y implementar como dices.

Busca mejor teoría porque tendras que configurar tal vez un par de entradas Analogicas para lograr tu cometido.
De todas formas es fácil.

Resulta, que por el momento hice otra cosa, me resulto mas sencillo. Pero mas adelante intentaria lo que dices

Ya modifique el archivo el código en el post, mi otra pregunta, puedo limitar el tiempo en el que el pulso esta en alto? es como si utilizara un Monoestable físicamente (El monoestable es un circuito multivibrador que realiza una función secuencial consistente en que al recibir una excitación exterior, cambia de estado y se mantiene en él durante un periodo que viene determinado por una constante de tiempo)
Lo intente con un Delay dentro del if, pero se me vuelve demasiado lento, y deja de funcionar.

Nota: Para emular el potenciómetro, por ejemplo, puse como comentario la siguiente linea.
//Vx=1.5; //Ingreso manual de datos.

float V1,V2,V4,V6,V7;
float Vc,Vd,Vcc;
float Vx;

void setup() {
  
  Serial.begin(19200);
  pinMode(A0,INPUT);
  
}

void loop() {

  Vx=2.0*analogRead(A0)/1023.0; //Lectura de un potenciometro, va estar en el rango de 0 a 2

//Vx=1.5; //Ingreso manual de datos

  for (float j = 0; j <= 360; j++) {
    V1=1.0*cos(j * (PI / 180.0));

//Genero las dos señales necesarias Vd y Vc
    
    Vd=V1+1.0;
    Vc=1.0-V1;

//IF para generar los pulsos necesarios

    if(Vc<=Vx){V6=1;}else{V6=0;}
    if(Vd<=Vx){V7=1;}else{V7=0;}

    
      Serial.print(V7-2.0);
      Serial.print(" ");
      Serial.print(V6-4.0);
      Serial.print(" ");
      Serial.print(Vx);
      Serial.print(" ");
      Serial.print(Vd);
      Serial.print(" ");
      Serial.println(Vc);      
     
    }
    
 }

En este codigo siguiente intento hacerlo con millis(), pero me sale un error.

exit status 1
expected ')' before ';' token

Tomado del ejemplo 3 del siguiente link. http://www.arduinoparatodos.com/control-tiempo-millis/

float V1,V2,V4,V6,V7;
float Vc,Vd,Vcc;
float Vx;


float periodo = 5;  // tiempo que el pulso estará en alto
unsigned long tiempoAnterior = 0;  //guarda tiempo de referencia para comparar


void setup() {

    Serial.begin(19200);
    pinMode(A0,INPUT);
     
}
void loop() {

  Vx=2.0*analogRead(A0)/1023.0; //Lectura de un potenciometro, va estar en el rango de 0 a 2
for (float j = 0; j <= 360; j++) {
    V1=1.0*cos(j * (PI / 180.0));

  //  if(Vc<=Vx){V6=1;}else{V6=0;}
  //  if(Vd<=Vx){V7=1;}else{V7=0;}

          
    if(Vd<=Vx; millis()>tiempoAnterior+periodo)
    {V7=!V7; V7=1; tiempoAnterior=millis();} else {V7=0;}
    
   
    
     Serial.print(V7-2.0);
      Serial.print(" ");
      Serial.print(V6-4.0);
      Serial.print(" ");
      Serial.print(Vx);
      Serial.print(" ");
      Serial.print(Vd);
      Serial.print(" ");
      Serial.println(Vc);
    }
}

Gracias de nuevo.