/*
Réaliser un générateur de signaux rectangulaires, de fréquence 1 kHz, de rapport cyclique réglable 
entre 10% (par valeur supérieure) et 90% (par valeur inférieure). Tolérance 5%
Transmission par liaison série du rapport cyclique
Format de transmission retenu : "alpha" exemple : 50+LF (code ascii 10)
*/

/* 1) Zone 1 : les déclarations */

// 1.b) Les Constantes 
const int R=5;                // la fréquence PWM est de 976 Hz pour les pattes 5 et 6 (timer 0) contre 488 Hz pour 3,11 (timer 2) , 9 et 10 (timer 1)
// 1 kHz à 5 % -> 950 < f < 1050 Hz : la PWM associée au timer 0 convient.
// 1.c) Les variables globales
int alpha=0,rouge;

/* 2) Zone 2 : Initialisation (le setup) */
void setup()
{
  pinMode(R, OUTPUT); // affecter la patte R en sortie pour alimenter la LED R
  Serial.begin(9600); // Initialiser la liaison série Serial à 9600 bauds
  Serial.println("Format de transmission retenu pour un rapport cyclique de 25 % : 25");
}

/* 3) Zone 3 : le Programme Principal */
void loop()
{
   if (Serial.available()) {   // Si le buffer série reçoit des données : on lit le buffer série                             
     delay(10);                // Attendre 10 ms la fin de transmission 
     
     alpha=Serial.parseInt(); // lire alpha rapport cyclique
     if (alpha<10) alpha=10; // Borne inférieure 10%
     if (alpha>90) alpha=90; // Borne supérieure 90%
     rouge = 2.55*alpha;     //  Règle de trois pour la PWM : 100 % -> 255   alpha -> rouge 
     
     while (Serial.available()) Serial.read();  // Vider le buffer Serial s'il reste des caractères... 
     
     analogWrite(R,rouge);   // écrire la valeur rouge pour la LED R 
     
     Serial.print("alpha = "); Serial.print(alpha);  // Afficher le résultat sur le moniteur série
     Serial.print("\t Rouge = "); Serial.println(rouge);
                             }   // fin de  if (Serial.available())
}