IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Faire clignoter deux LED à la fois avec une fréquence sinusoïdale


Sujet :

Arduino

  1. #1
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2019
    Messages : 8
    Par défaut Faire clignoter deux LED à la fois avec une fréquence sinusoïdale
    bonjour et t'il possible que vous m'aider faire clignoter deux led a la fois avec une fréquence sinusoïdale parfaite on ma dit que l'arduino fessait pas bien les sinusoïdale
    je vous explique mon projet
    j'ai 7 led une rouge,jaune,bleu turquoise,rose,orange,vert,bleu foncé
    je voudrai que les led rouge et la led jaune s'allume en même temps avec c'est fréquence
    led rouge en 256.87hz
    led jaune en 323.63hz
    puis la led bleu turquoise et rose aussi en même temps avec une fréquence
    led turquoise en 384.87hz
    led rose en 484.90hz
    puis la led orange et verte en même temps avec une fréquence
    led orange 288.33hz
    led vert en 342.88hz
    et puis ma led bleu foncé toute seul en une fréquence de
    led bleu foncé 432hz
    par contre je ne veux pas de potentiomètre pour faire varié la fréquence juste rentré sa dans l'arduino et plus toucher
    et si possible d'avoir un temps d'attendre que je puisse moduler via l’Arduino entre les 4 cycle exemple quand la led rouge et jaune s'allume et qu'elle passe a la led turquoise et rose avoir un temps un delay de 1195 entre chaque cycle merci a tous

  2. #2
    Membre expérimenté Avatar de cedd70
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Mars 2012
    Messages
    154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 154
    Par défaut
    Bonjour,

    Pour nous éclairer qu'entends-tu par sinusoïdale ?
    Quels sont les LEDs utilisé ? N'a pas tu peur de dépasser le courant max de l'arduino ?

  3. #3
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2019
    Messages : 8
    Par défaut
    Bais dans l'arduino en sortie j'ai un signal carré mais
    moi je voudrai faire clignoter la led avec un signal sinusoïdale comme sur cette video :

    Alors pour les led c'est
    Led turquoise : 3.1v
    Led rouge : 2v
    Led vert : 3.1v
    Led orange : 2v
    Led jaune : 2v
    Led bleu foncé : 3.2v
    Led rose : 3.2v
    Normalement je depasse pas les 5 volt pour chacun donc sa doit passer

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 277
    Par défaut
    Bonsoir

    Effectivement l'Arduino ne sait faire que du PWM, donc pas de belles sinusoïdes à espérer.
    Pour de l'affichage à destination d'un oeil humain, on peut faire varier le PWM selon une sinusoïdes, mais avec les fréquences que tu indiques j'ai comme l'impression que ce n'est pas ce qui est recherché.

    Pour faire exatement ce que tu souhaites (des quasi sinusoïdale entre 250 et 500Hz) il faudrait :
    - des circuits analogiques, par exemple des oscillateurs à pont de Wien dont l'activation seront contrôlé par l'Arduino. (mais c'est plutôt vielle école)
    - l'utilisation de convertisseur numérique - analogique (DAC), pour générer un signal analogique qui sera configuré en sinusoidale, mais pour avoir une bonne qualité il faut travailler à fréquence bien supérieur à celle du signal souhaité (à minima 100x, souvent 256x). Cela veut dire que dans ton cas l'Arduino risque d'être limite en vitesse, et surtout il faudra des DAC rapides ce qui ne court pas les rues dans le genre Shield Arduino.

    Edit: répondu sans avoir vu ton dernier message, ni la vidéo!
    Edit2: la fréquence sur la vidéo ce n'est pas en centaines de Hz comme dans le 1er message, mais autour du Hz, réalisable avec les PWM (6 canaux sur un Arduino, et possible par code sur les autres sorties).

    Bonne suite

    Delias

  5. #5
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2019
    Messages : 8
    Par défaut
    D'accord et si je prend un signal carré c'est moins compliquée a réalisé alors

  6. #6
    Membre Expert
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 017
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2013
    Messages : 1 017
    Par défaut
    Bonsoir benoit31986
    Citation Envoyé par benoit31986 Voir le message
    D'accord et si je prend un signal carré c'est moins compliquée a réalisé alors
    Voilà ce que l'on peut faire avec du carré (PWM)



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #define periodeTime 10                 // Temps d'une periode en millisecondes
    #define ledPinA 5                      // Connexion des la LED, pin PWM 3,5,6,9,10,11 (UNO)
    #define ledPinB 6                   
     
    void setup() {
    	pinMode(ledPinA, OUTPUT);
    	pinMode(ledPinB, OUTPUT);
    }
     
    void loop() {
    	for (int i = 0; i <= 255; i++)
    	{
    		analogWrite(ledPinA, i);
    		analogWrite(ledPinB, 255-i);
    		delay(periodeTime);
    	}
     
    	for (int i = 255; i >= 0; i--)
    	{
    		analogWrite(ledPinA, i);
    		analogWrite(ledPinB, 255-i);
    		delay(periodeTime);
    	}
     
    }
    Cordialement
    jpbbricole

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 277
    Par défaut
    Bonsoir à tous

    La solution de jpbbricole, c'est ce que j'indique dans mes précédents messages comme étant du PWM modulé en sinusoïde, sauf que cela n'est valable que pour un ordre de grandeur du hertz, et non pour des fréquences de 256.87 à 432 Hz comme demandé. Le PWM de l'Arduino c'est environ 500Hz, et pour avoir quelque chose de propre la modulation doit être au moins 100 fois inférieure...

    Je ne comprends pas pourquoi vouloir faire cela, et donc je ne connais pas les contraires de précision qui sont nécessaires, d'autant avec des fréquences données à 5 chiffres significatifs (donc à priori demandant une grande précision).
    Programmer l'Arduino en langage Arduino cela restera difficile, mais programmer l'Arduino en C sans la surcouche comme dans cette série de tuto: Arduino et le langage C cela devient faisable à condition de ne pas débuter en programmation et en microcontrôleurs...

    Une des solutions pour un signal carré, c'est d'utiliser un des timers pour obtenir une tempo régulière et de courte durée, dans la routine d’interruption liée au timer, compter les interruptions et basculer les sorties au bon moment (toute les demi-période de la fréquence souhaitée).
    Une autre, c'est de reconfigurer à chaque phase la valeur maximale des timers, et dans l’interruption déclenchée par l'overflow faire basculer la sortie en question. Avec les deux timers à 16bits on peut gérer deux leds facilement en simultanéité (une sur chaque timer) et avec encore une bonne précision, bon il y aura un petit retard sur l'une des commutations si deux interruptions arrivent quasi en même temps.
    Une autre encore, c'est proche de la précédente sauf que l'on utilise les trois timers et la génération de PWM matériel, il faut configurer la période en fonction de la fréquence souhaitée et un taux de 50%. Cela ira pour 6 des 7 leds et pour la dernière il faudra faire comme la seconde variante.

    Maitre mot pour ces trois variantes, lire et comprendre la doc de l'ATMega328 si sur Uno!

    Bonne suite

    Delias

  8. #8
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    Bonjour,

    dans la vidéo, l'effet est obtenu en modifiant le rapport cyclique du signal PWM. Voir l'exemple Fade que l'on peut également obtenir via le menu de l'IDE Arduino : Fichier->Exemples->Basics->Fade

    Citation Envoyé par benoit31986
    Alors pour les led c'est
    Led turquoise : 3.1v
    Led rouge : 2v
    Led vert : 3.1v
    Led orange : 2v
    Led jaune : 2v
    Led bleu foncé : 3.2v
    Led rose : 3.2v
    Normalement je depasse pas les 5 volt pour chacun donc sa doit passer
    ne confonds pas courant et tension. Tu dois brancher chaque LED sur une sortie de ton Arduino avec une résistance (voir le schéma de l'exemple "Fade" avec 1 LED) puis piloter chaque port (et donc chaque LED) séparément avec ton code.

    Citation Envoyé par benoit31986
    j'ai 7 led une rouge,jaune,bleu turquoise,rose,orange,vert,bleu foncé
    je voudrai que les led rouge et la led jaune s'allume en même temps avec c'est fréquence
    led rouge en 256.87hz
    led jaune en 323.63hz
    puis la led bleu turquoise et rose aussi en même temps avec une fréquence
    led turquoise en 384.87hz
    led rose en 484.90hz
    puis la led orange et verte en même temps avec une fréquence
    led orange 288.33hz
    led vert en 342.88hz
    et puis ma led bleu foncé toute seul en une fréquence de
    led bleu foncé 432hz
    j'aimerais bien comprendre d'où viennent les valeurs des fréquences que tu nous donnes. Pourquoi 256,87Hz ? 323,63Hz ? etc. Ces valeurs sont bien étranges pour un exercice avec des LED.

  9. #9
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 242
    Par défaut
    Salut,
    Juste pour le fun... tu pourrais essayer la solution du DAC que propose Delias.

    Il faudrait charger dans le Arduino une table sinusoïdale composée d'octets (8 bits) de 256 valeurs différentes par exemple (tu peux chercher des générateurs Sine look up table generator.) Voici par exemple, une table sinus de résolution 8 bits et de 256 valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,
    0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
    0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,
    0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
    0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,
    0xea,0xeb,0xed,0xef,0xf0,0xf2,0xf3,0xf4,
    0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfb,0xfc,
    0xfd,0xfd,0xfe,0xfe,0xfe,0xff,0xff,0xff,
    0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfd,
    0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,
    0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xeb,
    0xe9,0xe7,0xe5,0xe3,0xe1,0xdf,0xdd,0xdb,
    0xd9,0xd7,0xd4,0xd2,0xcf,0xcd,0xca,0xc8,
    0xc5,0xc3,0xc0,0xbd,0xba,0xb8,0xb5,0xb2,
    0xaf,0xac,0xa9,0xa6,0xa3,0xa0,0x9d,0x9a,
    0x97,0x94,0x91,0x8e,0x8a,0x87,0x84,0x81,
    0x7e,0x7b,0x78,0x75,0x71,0x6e,0x6b,0x68,
    0x65,0x62,0x5f,0x5c,0x59,0x56,0x53,0x50,
    0x4d,0x4a,0x47,0x45,0x42,0x3f,0x3c,0x3a,
    0x37,0x35,0x32,0x30,0x2d,0x2b,0x28,0x26,
    0x24,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,
    0x14,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,
    0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,
    0x02,0x02,0x01,0x01,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x01,0x01,0x01,0x02,0x02,
    0x03,0x04,0x04,0x05,0x06,0x07,0x08,0x09,
    0x0b,0x0c,0x0d,0x0f,0x10,0x12,0x14,0x15,
    0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23,0x25,
    0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x38,
    0x3b,0x3e,0x40,0x43,0x46,0x49,0x4c,0x4f,
    0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x67,
    0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c,0x80,
    Ensuite, créer un petit DAC R2R comme ci dessous, les broches BIT0 à BIT7 vont sur un port du Arduino et sur le quel tu appliques une à une les valeurs contenues dans la table sinus. La tension de sortie étant a prendre entre le BIT7 et le 0V

    Nom : R-2R-DAC-circuit.png
Affichages : 3983
Taille : 45,9 Ko

    Suivant la rapidité avec la quelle tu déroules la table sur le port du Arduino, tu feras évoluer la fréquence du sinus (les prémices d'un Direct Digital Synthesys )

  10. #10
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2019
    Messages : 8
    Par défaut
    Alors les valeur que je donne c'est des fréquences de musique que je voudrai mettre sur led
    D'accord bon je vois que sa a l'air compliqué avec une sinusoïdale alors je vais modifier mon projet
    Alors ma carte n'est pas un Arduino Uno mais une Arduino MEGA 2560
    Donc avec une signal carré avec les fréquence 256hz 288hz 323hz 342hz 384hz 432hz 484hz
    Vous pensez que c'est réalisable sa ?

  11. #11
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2019
    Messages : 8
    Par défaut
    J'ai trouvé sa pour la fréquence en 432hz
    Sur un site mais après je c'est pas si c'est bon ou pas je suis débutants donc je comprends pas trop se qui la fait j'ai fait sont branchement mais le problème c'est que la led reste trop longtemps allumer j'aurais aimé avoir un delay de 1195 pour moi
    Nom : IMG_20150525_190458 (4).jpg
Affichages : 3794
Taille : 67,4 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    /**
    * Joe Cell seeding control program for the Arduino
    * Loads the cell with a 432 A tone frequency (3 x 144)
    *
    * For more information goto <a href="http://www.hydrogen2oxygen.net/en" target="_blank">http://www.hydrogen2oxygen.net/en</a>
    */
     
    int loadPin = 13;
    int redPin = 12; // Let's add some light to the show
    int greenPin = 11; // The waiting LED
    int cycle = 0;
    int maxCycle = 12000;
    int minutes = 25000;
    boolean wait = false;
     
    void setup() {
      pinMode(loadPin, OUTPUT);
      pinMode(redPin, OUTPUT);
      pinMode(greenPin, OUTPUT);
     
      //Test the LEDs
      digitalWrite(greenPin, HIGH);
      delay(1000);
      digitalWrite(redPin, HIGH);
      delay(1000);
      digitalWrite(greenPin, LOW);
      delay(1000);
      digitalWrite(redPin, LOW);
    }
     
    void loop() {
     
      // Here and there wait a little bit, let the cell do it's own work
      if (wait) {
        digitalWrite(greenPin, HIGH);
        delay(minutes);
        digitalWrite(greenPin, LOW);
     
        wait = false;
      } else {
     
     
        // Load the cell with 432 Hz ... 
        // Be aware that I have adjusted the frequency for my own Arduino model (a UNO) with the oscilloscope 
        for (cycle = 0; cycle < maxCycle; cycle++) {
          digitalWrite(loadPin, HIGH);
          digitalWrite(redPin, HIGH);
          delayMicroseconds(1138);
          digitalWrite(loadPin, LOW);
          digitalWrite(redPin, LOW);
          delayMicroseconds(1137);
        }
     
     
        wait = true;
      }
     
    }

  12. #12
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 277
    Par défaut
    Bonsoir

    Alors tu n'as pas assimilé la Persistance rétinienne.
    Au delà de 20Hz environ l’œil humain ne perçoit plus le clignotement, donc avec 432Hz c'est peine perdue...

    Et on peut enfin comprendre que tu veux attendre 1195 microsecondes (parce que avant fallait être devin pour le comprendre..)

    Bonne soirée

    Delias

  13. #13
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2019
    Messages : 8
    Par défaut
    Désoler comme je les indiqué je suis débutant en gros je veux faire la même chose que celui qui a fait sa après j'ai l'impression que c'est un signal carré qui et en sortie mais c'est pas du pwm c'est juste un signal de sortie au pin 11;12;13
    Après j'ai vu qu'on pouvait utiliser un ne555 pour être précis
    En faite c'est de la luminothérapie se que je veux faire même si je la vois pas clignoter a l'oeil nu c'est pas grave je veux juste qu'elle a cette fréquence et qu'elle a un delay de 1195 entre chaque led exemple : la première led et a la fréquence de 256hz et après je veux un temps attente de 1195 puis qu'elle s'éteint puis que j'ai une autre led qui s'allume a une fréquence de 288hz et insi desuite

  14. #14
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2019
    Messages : 8
    Par défaut
    Bonjour les amis donc j'ai fait se que vous m'avez dit avec un duty de 50% j'ai pas put faire mieux avec la fréquence que je voulais
    Par contre le problème c'est que le programme qui la marquer le Monsieur il me mais a chaque fois une led en attente la greenpin
    Et t'il possible de m'aider a écrire le code merci a vous et a supprimé la greenpin y'a aucun fréquence sur cette led merci
    Nom : IMG_20190405_044220.jpg
Affichages : 3871
Taille : 695,0 Ko



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    /** Joe Cell seeding control program for the Arduino
    * Loads the cell with a 432 A tone frequency (3 x 144)
    *
    * For more information goto <a href="http://www.hydrogen2oxygen.net/en" target="_blank">http://www.hydrogen2oxygen.net/en</a>
    */
     
    int loadPin = 13;
    int redPin = 12; // Let's add some light to the show
    int greenPin = 11; // The waiting LED
    int cycle = 0;
    int maxCycle = 1195;
    int minutes = 1195;
    boolean wait = false;
     
    void setup() {
      pinMode(loadPin, OUTPUT);
      pinMode(redPin, OUTPUT);
      pinMode(greenPin, OUTPUT);
     
      //Test the LEDs
      digitalWrite(greenPin, HIGH);
      delay(1000);
      digitalWrite(redPin, HIGH);
      delay(1000);
      digitalWrite(greenPin, LOW);
      delay(1000);
      digitalWrite(redPin, LOW);
    }
     
    void loop() {
     
      // Here and there wait a little bit, let the cell do it's own work
      if (wait) {
        digitalWrite(greenPin, HIGH);
        delay(minutes);
        digitalWrite(greenPin, LOW);
     
        wait = false;
      } else {
     
     
        // Load the cell with 432 Hz ... 
        // Be aware that I have adjusted the frequency for my own Arduino model (a UNO) with the oscilloscope 
        for (cycle = 0; cycle < maxCycle; cycle++) {
          digitalWrite(loadPin, HIGH);
          digitalWrite(redPin, HIGH);
          delayMicroseconds(1144);
          digitalWrite(loadPin, LOW);
          digitalWrite(redPin, LOW);
          delayMicroseconds(1142);
        }
     
     
        wait = true;
      }

  15. #15
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 277
    Par défaut
    Bonjour Benoit

    La méthode avec delay (ou delayMicroseconds) n'est pas adaptée à du fonctionnement en pseudo parallèle comme cela est nécessaire pour faire clignoter deux leds indépendamment. Car ces méthodes sont bloquantes, le micro ne peut rien faire d'autre pendant la durée d'attente.
    La méthode alternative c'est avec millis() comme dans l'exemple BlinkWithoutDelay inclus dans l’environnement Arduino.
    Et là tu auras de suite le problème suivant: la précision, avec l'écosystème Arduino, n'est pas suffisante pour ton projet.

    Donc je t'invite à relire ma première réponse, il y a les trois possibilités que je connais pour être à la fois précis et dans la plage de fréquence que tu souhaites. Mes trois solutions se basent sur la génération d'un signal carré comme celui que tu as en deuxième option. On utilise le module hardware de génération PWM de manière détournée, on ne fait pas de PWM au sens strict.

    Faire du "vrai" PWM voudrait dire générer du PWM à fréquence bien plus élevée (50kHz à 100kHz) et de moduler la sinusoïdale. C'est à la limite supérieure de ce que peut faire l'ATMega de l'Arduino Mega (62.5kHz en configuration PWM rapide à 256 niveaux.) L'ATMega2560 c'est la même famille que le 328, ma réponse s'applique aux deux.

    Bonne suite

    Delias

  16. #16
    Membre régulier
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2019
    Messages : 8
    Par défaut
    Oki c'est quand tu a dit sa en faite la solution 1 a l'air mieux que la 3 par contre je vais pas les faire allumer part deux par se que il me faut une 8eme led

    Je voudrai en premier une par une
    1 led rouge fréquence 256.87hz.
    2 led orange 288.33hz
    3 led jaune 323.63hz
    4 led vert. 342.88hz
    5 led bleu 384.87hz
    6 led bleu foncé 432.00hz
    Et les deux dernière en même temps
    7 led rose fréquence 484.90hz
    8 led rose. 484.90hz

    Je voudrai un signal carré alors avec c'est fréquence et si les dizaine et unité dérange
    Bais on les enlève on fait
    256hz
    288hz
    323hz
    342hz
    384hz
    432hz
    484hz
    484hz


    Une des solutions pour un signal carré, c'est d'utiliser un des timers pour obtenir une tempo régulière et de courte durée, dans la routine d’interruption liée au timer, compter les interruptions et basculer les sorties au bon moment (toute les demi-période de la fréquence souhaitée).
    Une autre, c'est de reconfigurer à chaque phase la valeur maximale des timers, et dans l’interruption déclenchée par l'overflow faire basculer la sortie en question. Avec les deux timers à 16bits on peut gérer deux leds facilement en simultanéité (une sur chaque timer) et avec encore une bonne précision, bon il y aura un petit retard sur l'une des commutations si deux interruptions arrivent quasi en même temps.
    Une autre encore, c'est proche de la précédente sauf que l'on utilise les trois timers et la génération de PWM matériel, il faut configurer la période en fonction de la fréquence souhaitée et un taux de 50%. Cela ira pour 6 des 7 leds et pour la dernière il faudra faire comme la seconde variante.

Discussions similaires

  1. Jointure de deux tables de faits avec une dimension
    Par waloo5 dans le forum Débuter
    Réponses: 6
    Dernier message: 18/04/2012, 00h23
  2. Faire apparaitre les différences de tables avec une jointure
    Par Nitromard dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 11/05/2011, 11h02
  3. [Débutant] Faire appel à un programme plusieurs fois dans une boucle for
    Par hibouchka dans le forum MATLAB
    Réponses: 9
    Dernier message: 01/03/2011, 17h09
  4. Pb d'insertion deux fois avec une query d'un dataAdapter
    Par Contact2012 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 02/09/2008, 14h48
  5. Réponses: 24
    Dernier message: 08/05/2008, 17h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo