/* 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()) }