variation intensité en clignotement led en meme temps.

Portrait de NorinRad

Bonjour, 

j'essaie de m'initier a la programmation d'un arduino pour des effets de lumières dans un 1er temps.

J'aimerais faire clignoter une led et faire varier sont intensité en même temps.

J'ai donc trouver un programme de variation de l'intensité et j'ai essayé de lui coller le fameux "blink" pour avoir le clignotement. Le programme fonctionne mais les opérations sont réalisées l'une après l'autre et pas en même temps...

J'aimerais comprendre pourquoi.

Voila le code :

// --- Programme Arduino ---
// par X. HINAULT - 01/2010 

// --- Que fait ce programme ? ---
/* Fait varier la luminosité d'une LED connectée sur la broche 3*/

// --- Fonctionnalités utilisées ---

// --- Circuit à réaliser ---
// Connecter une LED et sa résistance sur la broche 3 (configurée en sortie)

//**************** Entête déclarative *******
// A ce niveau sont déclarées les librairies, les constantes, les variables...

// --- Inclusion des librairies utilisées ---

// --- Déclaration des constantes ---

// --- constantes des broches ---

const int LED=3; //declaration constante de broche 

// --- Déclaration des variables globales ---
int i=0; // variable de boucle

// --- Initialisation des fonctionnalités utilisées ---

//**************** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup()   { // debut de la fonction setup()

// --- ici instructions à exécuter au démarrage --- 

pinMode(LED, OUTPUT); //met la broche en sortie 

} // fin de la fonction setup()
// ********************************************************************************

//*************** FONCTION LOOP = Boucle sans fin = coeur du programme *************
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop(){ // debut de la fonction loop()

for (i=0; i<=255;i++){ // boucle for compte de 0 à 255

analogWrite(LED,i); // génère une impulsion sur la broche de largeur i = la luminosité augmente

delay(10); // pause de 10 ms entre chaque "cran"

} // fin de la boucle for

for (i=0; i<=255;i++){ // boucle for compte de 0 à 255

analogWrite(LED,255-i); // génère une impulsion sur la broche de largeur 255-i 
                        // = la luminosité baisse

delay(10); // pause de 10 ms entre chaque "cran"

} // fin de la boucle for

// --- ici instructions à exécuter par le programme principal --- 

{
  digitalWrite(LED, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

} // fin de la fonction loop() - le programme recommence au début de la fonction loop sans fin
// ********************************************************************************

// --- Fin programme ---

Portrait de hercule124

bonjour,

normal que les opérations s'executent l'une après l'autre

tu utilises uniquement des boucles ,mais aucune conditions .

tu restes dans ta boucle.

Portrait de Walter

Comme le dit Hercule tes trois boucles sont exécutées sequentiellements, donc logiquement tu devrait avoir:

ta première boucle qui allume progressivement ta LED en 2550 ms
ta deuxième boucle qui éteint ta LED en 2550 ms
ton groupe de code entre accolade fait clignoter une fois ta led.

Et ta fonction "loop" est appeler en boucle par le "system" arduino  

Comme le dit Hercule, il faut que tu utilise une structure conditionnelle (un if ... else)
qui ferra ton clignotement, par exemple ton bloque "if" allumera progressivement ta LED et ton bloque "else" éteindra progressivement ta LED.

Essaye de changer ton code pour corresponde à ce que l'on t'a décrit et on pourra te le corriger si nécessaires