const int R=3; int alpha=0,rouge; 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"); /* Timer 2 patte 3 et 11 PWM = 6 broches OC0A(PD6 - 6), OC0B(PD5 - 5 ), 0C1A(PB1 - 9), OC1B(PB3 - 11), OC2A(PB3 - 11),OC2B(PD3 - 3) WaveGenerationMode = 7 = Fast PWM top OCR2A = WGM22 WGM21 WGM20 (WGM22 sur TCCR2B et WGM21 WGM20 sur TCCR2A) Fast-PWM mode Compare Output Mode = Basule OC2A (PB3 - 11) on Compare Match = COM2A0 en mode CTC pas de Fast PWM Fast-PWM mode Compare Output Mode = Basule OC2B (PD3 - 3) on Compare Match = COM2B1 http://garretlab.web.fc2.com/en/arduino/inside/arduino/wiring_analog.c/analogWrite.html */ TCCR2A = _BV(COM2A0) | _BV(COM2B1)| _BV(WGM21) | _BV(WGM20); // Mode 7 Fast-PWM top OCR2A TCCR2B = _BV(WGM22) | _BV(CS22); // Prescaler 64 (CS22, Clock/64) => 250 kHz OCR2A = 249; //Registre de comparaison A = 249 => Fréquence de la PWM : 250kHz/(249+1)= 1 KHZ sur la patte 3 // Par défaut OCR2A=255 => Fréq. PWM = 250kHz/(255+1) = 976.5 Hz OCR2B = 49; // Registre de comparaison B = 49 => rapport cyclique 49+1/(249+1) = 50 / 250 = 20 % } 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.49*alpha; 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 OCR2B=rouge; // pour remplacer analogWrite(R,rouge); 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()) }