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 :

Améliorer mon capacitif sensor


Sujet :

Arduino

  1. #1
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Avril 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 13
    Points : 4
    Points
    4
    Par défaut Améliorer mon capacitif sensor
    Bonjour à tous. J'espère que vous allez bien.

    Voilà je suis en train de faire un capacitif sensor en utilisant de l'aluminium qui entoure du carton qui fonctionne au toucher. Ce que je voudrais faire est une pyramide à 5 faces. Les 4 faces auront un sensor différent qui fonctionne aussi sur le principe du toucher. J'aimerais faire en sorte quand je touche l'une des faces en aluminium (le code du sensor dans le programme arduino), un son s'enclenche dans processing. Je suis un peu bloqué au niveau du code.


    Actuellement, j'arrive à enclencher un seul son avec un sensor.

    Je voudrais avoir vos avis et conseille sur mon code actuel.

    Merci d'avance


    Voici mon code arduino:



    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
     
     
    #include <CapacitiveSensor.h>
     
    #define  Pin 12                                         // LED port  
    CapacitiveSensor   cs_4_2 = CapacitiveSensor(4, 2);
     
     
     
    void setup() {
     
       Serial.begin(115200);
      //pinMode(ledPin, OUTPUT);
      //digitalWrite(ledPin, LOW);
     
    }
     
    void loop() {
     
     long total1 =  cs_4_2.capacitiveSensor(30);  //sensor numero 1
     
     long total2 =  cs_4_2.capacitiveSensor(30);  //sensor numero 2
     
     long total3 =  cs_4_2.capacitiveSensor(30);  //sensor numero 3
     
     long total4 =  cs_4_2.capacitiveSensor(30);   //sensor numero 4
     
     
     
     
     if (total1 > 500)                            // Donc on touche le sensor numero 1
      {
        Serial.write(1);            // le sons numero 1 ce declenche
      } 
      else
      {
       Serial.write(0);               // Autrement, pas de sons
      }
     
     
     
      if (total2 > 500)                            // Donc on touche le sensor numero 2
      {
        Serial.write(1);                           // le sons numero 2 ce declenche
      } 
      else
      {
       Serial.write(0);              
      }
     
     
     
      if (total3 > 500)                            // Donc on touche le sensor numero 3
      {
        Serial.write(1);                          // le sons numero 3 ce declenche
      } 
      else
      {
       Serial.write(0);               
      }
     
     
     
      if (total4 > 500)                            // Donc on touche le sensor numero 4
      {
        Serial.write(1);                          // le sons numero 4 ce declenche
      } 
      else
      {
       Serial.write(0);              
      }
     
     
     
     
      delay(33);
     
    }







    et voici mon code processing:


    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
     
    import processing.sound.*;
    SoundFile file;
     
     
    import processing.serial.*;
     
    Serial monArduino;
     
    void setup() {
     
      size(640, 360);
      background(255);
     
     
      file = new SoundFile(this, "testSon.mp3");
      file2 = new SoundFile(this, "TestSon2.mp3");
      file3 = new SoundFile(this, "testSon3.mp3");
      file3 = new SoundFile(this, "testSon4.mp3");
     
     
     
      printArray(Serial.list());
      monArduino = new Serial(this, Serial.list()[0], 115200); 
    }
     
    void draw() {
     
      while(monArduino.available() > 0){
        int octetLu = monArduino.read();
        if(octetLu == 0){
          println ("pas de son");
        }else if (octetLu ==1){
          println ("activer le son");
          if (!file.isPlaying());
              file.play();
         }
     
     
     
          while(monArduino.available() > 0){
        int octetLu = monArduino.read();
        if(octetLu == 0){
          println ("pas de son");
        }else if (octetLu ==1){
          println ("activer le son");
          if (!file.isPlaying());
              file2.play();
         }
     
     
     
          while(monArduino.available() > 0){
        int octetLu = monArduino.read();
        if(octetLu == 0){
          println ("pas de son");
        }else if (octetLu ==1){
          println ("activer le son");
          if (!file.isPlaying());
              file3.play();
         }
     
     
     
     
          while(monArduino.available() > 0){
        int octetLu = monArduino.read();
        if(octetLu == 0){
          println ("pas de son");
        }else if (octetLu ==1){
          println ("activer le son");
          if (!file.isPlaying());
              file4.play();
         }
     
     
      }
     
    }

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 714
    Points : 5 393
    Points
    5 393
    Par défaut
    vous aviez déjà une discussion en cours sur ce sujet et j'avais répondu mais sans suite de votre part... Avouez que ça n'encourage pas à vous répondre...

    pourquoi re-créer un nouveau post ?

  3. #3
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 012
    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 012
    Points : 2 341
    Points
    2 341
    Par défaut
    Bonjour KyloRen11

    Première problème, tu ne déclares qu'une touche sensor!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CapacitiveSensor   cs_4_2 = CapacitiveSensor(4, 2);
    De par là en fausant ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     long total1 =  cs_4_2.capacitiveSensor(30);  //sensor numero 1
     long total2 =  cs_4_2.capacitiveSensor(30);  //sensor numero 2
     long total3 =  cs_4_2.capacitiveSensor(30);  //sensor numero 3
     long total4 =  cs_4_2.capacitiveSensor(30);   //sensor numero 4
    Toutes les variables totaln lisent la même touche.

    Tu dois déclarer 4 sensors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CapacitiveSensor   cs_4_2 = CapacitiveSensor(4, 2);
    CapacitiveSensor   cs_4_3 = CapacitiveSensor(4, 3);
    CapacitiveSensor   cs_4_5 = CapacitiveSensor(4, 5);
    CapacitiveSensor   cs_4_6 = CapacitiveSensor(4, 6);
    Câblés respectivement sur les pin 2, 3, 5, 6 avec la pin 4 en commun.
    Et lire les 4 ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     long total1 =  cs_4_2.capacitiveSensor(30);  //sensor numero 1
     long total2 =  cs_4_3.capacitiveSensor(30);  //sensor numero 2
     long total3 =  cs_4_5.capacitiveSensor(30);  //sensor numero 3
     long total4 =  cs_4_6.capacitiveSensor(30);   //sensor numero 4
    La prochaine étape serait d'optimiser ton programme en utilisant des tableaux.
    Au besoin, fais-moi un schéma du câblage de tes sensor.

    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  4. #4
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 714
    Points : 5 393
    Points
    5 393
    Par défaut
    Effectivement JP a raison ! (comme souvent )

    Si je peux me permettre, au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CapacitiveSensor   cs_4_2 = CapacitiveSensor(4, 2);
    CapacitiveSensor   cs_4_3 = CapacitiveSensor(4, 3);
    CapacitiveSensor   cs_4_5 = CapacitiveSensor(4, 5);
    CapacitiveSensor   cs_4_6 = CapacitiveSensor(4, 6);
    on gagnera en lisibilité si on écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // définition des pins
    const uint8_t pinPartageeEnvoi = 4;
    const uint8_t pinFaceA = 2;
    const uint8_t pinFaceB = 3;
    const uint8_t pinFaceC = 5;
    const uint8_t pinFaceD = 6;
     
    // définition des capteurs capacitifs
    // CapacitiveSensor CapacitiveSensor(byte sendPin, byte receivePin)
    CapacitiveSensor   face_A = CapacitiveSensor(pinPartageeEnvoi, pinFaceA);
    CapacitiveSensor   face_B = CapacitiveSensor(pinPartageeEnvoi, pinFaceB);
    CapacitiveSensor   face_C = CapacitiveSensor(pinPartageeEnvoi, pinFaceC);
    CapacitiveSensor   face_D = CapacitiveSensor(pinPartageeEnvoi, pinFaceD);
    et effectivement ça simplifiera le code de passer avec des tableaux

    (le code d'exemple fourni sur le site arduino gère 3 capteurs capacitifs)

  5. #5
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Avril 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Jay M Voir le message


    Oui pardon je m'excuse de ne vous pas avoir répondu. C'est malpoli de ma part.

    C'est vrai qu'il y avait déjà un post pour ça. Mais comme j'avais avancer sur mon projet et comme il est différent de la dernière fois, je pensais que je devrais écrire un nouveau post.

    Je comprend tout-à fais que vous ne voudriez pas me répondre. Encore une fois je m'en excuse et je vous remercie pour votre aide et réponse.

    C'est la moindre des choses que je puisse faire.

    Citation Envoyé par Jay M Voir le message




    Pardon si je répond assez tard à vous tous. Je m'en excuse. Et je vous remercie de me répondre.

    Pour le code je vais tester tout ça. Je vous tiendrais au courant pour l'avancement sur ce post.

    Encore merci

    Citation Envoyé par jpbbricole Voir le message


    Ok je vais aussi voir pour le changement de codes. Merci beaucoup. Je teste tout ça. Je vous tiendrais au courant très vite si il y aurait un futur problème (sur ce même post).

  6. #6
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Avril 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par jpbbricole Voir le message
    Bonjour KyloRen11

    Première problème, tu ne déclares qu'une touche sensor!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CapacitiveSensor   cs_4_2 = CapacitiveSensor(4, 2);
    De par là en fausant ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     long total1 =  cs_4_2.capacitiveSensor(30);  //sensor numero 1
     long total2 =  cs_4_2.capacitiveSensor(30);  //sensor numero 2
     long total3 =  cs_4_2.capacitiveSensor(30);  //sensor numero 3
     long total4 =  cs_4_2.capacitiveSensor(30);   //sensor numero 4
    Toutes les variables totaln lisent la même touche.

    Tu dois déclarer 4 sensors:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CapacitiveSensor   cs_4_2 = CapacitiveSensor(4, 2);
    CapacitiveSensor   cs_4_3 = CapacitiveSensor(4, 3);
    CapacitiveSensor   cs_4_5 = CapacitiveSensor(4, 5);
    CapacitiveSensor   cs_4_6 = CapacitiveSensor(4, 6);
    Câblés respectivement sur les pin 2, 3, 5, 6 avec la pin 4 en commun.
    Et lire les 4 ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     long total1 =  cs_4_2.capacitiveSensor(30);  //sensor numero 1
     long total2 =  cs_4_3.capacitiveSensor(30);  //sensor numero 2
     long total3 =  cs_4_5.capacitiveSensor(30);  //sensor numero 3
     long total4 =  cs_4_6.capacitiveSensor(30);   //sensor numero 4
    La prochaine étape serait d'optimiser ton programme en utilisant des tableaux.
    Au besoin, fais-moi un schéma du câblage de tes sensor.

    Cordialement
    jpbbricole





    Voici le montage pour juste un seul de mes sensor. Les 3 autres seront exactement sur le même principe

    Nom : photoDevelopper.jpg
Affichages : 167
Taille : 290,1 Ko

  7. #7
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 012
    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 012
    Points : 2 341
    Points
    2 341
    Par défaut
    Bonjour KyloRen11

    Voilà à quoi doit ressembler le câblage de tes touches:
    Nom : ARDDEV_KyloRen11 _Sensors.png
Affichages : 157
Taille : 23,8 Ko

    Arduino Playground.

    Essaies ce petit bout de programme pour essayer:
    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
     #include <CapacitiveSensor.h>
     
    enum facesIndex {faceA, faceB, faceC, faceD, facesNombre};
    char* facesNom[] = {"Face A", "Face B", "Face C", "Face D"};
     
    #define sensorEmetteurPin 4                                                    // Pin commune (emetteur)
    byte sensorsPin[] = {2, 3, 5, 6};                                              // Pin des touches                                   
    CapacitiveSensor* sensorFace[facesNombre]; 
     
     
     void setup() {
     
    	 Serial.begin(115200);
     
    	 for (byte f = 0; f < facesNombre; f++)
    	 {
    		sensorFace[f]= new CapacitiveSensor(sensorEmetteurPin, sensorsPin[f]); // "Creation des touches sensor
    	 }
     }
     
     void loop() {
     
    	 for (byte f = 0; f < facesNombre; f++)                                    // Lecture des touches
    	 {
    		 long sensorActivite = sensorFace[f]->capacitiveSensor(30);
    		 if (sensorActivite > 500)
    		 {
    			 Serial.println((String)facesNom[f] + "\t" + String(sensorActivite));
    		 }
    	 }
    	 delay(250);
     }
    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  8. #8
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Avril 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Il y a certain point du code que je comprend pas trop.

    Le "char" il sert à quoi au juste?


    Donc du coup avec le code arduino il va enclencher le son dans processing alors?

    Là actuellement je pense qu'il faudrait aussi un tableau pour les sources audio. Mais du coup je fais un tableau avec ma liste de son. Comment faire si quand je veux toucher mon sensorA, le "TestSOn1" s'active du coup? Je dois avoir plusieurs boucle "While" non?



    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
     
     
    import processing.sound.*;
    SoundFile file;
     
     
    import processing.serial.*;
     
    Serial monArduino;
     
     
     
    void setup() {
     
      size(640, 360);
      background(255);
     
     
      file = new SoundFile(this, "testSon1.mp3");
      file = new SoundFile(this, "TestSon2.mp3");
      file = new SoundFile(this, "testSon3.mp3");
      file = new SoundFile(this, "testSon4.mp3");
     
      printArray(Serial.list());
      monArduino = new Serial(this, Serial.list()[0], 115200); 
     
    }
     
    void draw() {
     
      while(monArduino.available() > 0){
        int octetLu = monArduino.read();
        if(octetLu == 0){
          println ("pas de son");
        }else if (octetLu ==1){
          println ("activer le son");
          if (!file.isPlaying());
              file.play();
         }
      }
     
    }


    Cordialement

  9. #9
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 012
    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 012
    Points : 2 341
    Points
    2 341
    Par défaut
    Bonjour KyloRen11

    Citation Envoyé par KyloRen11 Voir le message
    Le "char" il sert à quoi au juste?
    C'est un format de variables, voire ici.

    Citation Envoyé par KyloRen11 Voir le message
    Donc du coup avec le code arduino il va enclencher le son dans processing alors?
    Non, pas encore, ce code sert à tester ton montage, il doit s'afficher, lorsque tu touches un sensor:

    Face C 667
    Face C 817
    Face B 812
    Face B 629
    Face A 746

    L'as-tu essayé?

    L'envoi à processing est la prochaine étape ou il suffira de remplacer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    			 Serial.println((String)facesNom[f] + "\t" + String(sensorActivite));
    // Par
    			 Serial.write(f);
    A+
    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  10. #10
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 714
    Points : 5 393
    Points
    5 393
    Par défaut
    Côté processing c'est la même chose que côté arduino, si vous voulez avoir des références sur 4 éléments il vous faudra garder 4 variables différentes (ou un tableau à 4 entrées)

    vous ne pouvez donc pas écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import processing.sound.*;
    SoundFile file;
    ...
     
      file = new SoundFile(this, "testSon1.mp3");
      file = new SoundFile(this, "TestSon2.mp3");
      file = new SoundFile(this, "testSon3.mp3");
      file = new SoundFile(this, "testSon4.mp3");
    car ça vous met les 4 fichiers son dans la même variable 'file'.

    il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     import processing.sound.*;
    SoundFile fichierFaceA, fichierFaceB, fichierFaceC, fichierFaceD;
    ...
     
      // on désigne les fichiers sons qui sont dans le répertoire /data du sketch
      fichierFaceA = new SoundFile(this, "testSon1.mp3");
      fichierFaceB = new SoundFile(this, "TestSon2.mp3");
      fichierFaceC = new SoundFile(this, "testSon3.mp3");
      fichierFaceD = new SoundFile(this, "testSon4.mp3");
    ensuite lors de la réception d'un octet qui représentera la face (0,1,2 ou 3) il faudra décider quel fichier jouer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if (monArduino.available() > 0){
        int octetLu = monArduino.read();
        if (octetLu == 0)
           if (! fichierFaceA.isPlaying()) fichierFaceA.play();
         else if (octetLu ==1){
           if (! fichierFaceB.isPlaying()) fichierFaceB.play();
         else if (octetLu ==2){
           if (! fichierFaceC.isPlaying()) fichierFaceC.play();
         else if (octetLu ==3){
           if (! fichierFaceD.isPlaying()) fichierFaceD.play();
    }
    on voit que le code se répète beaucoup et que ce serait plus simple si on avait un tableau pour les sons. Je vous laisse plancher sur le passage à une version à base de tableau, il faudra juste vérifier si l'octet reçu et admissible, c'est à dire qu'il représente bien un indice dans le tableau.



    Côté Arduino, il conviendra de rajouter un petit test temporel pour ne pas bombarder le PC avec la même requête trop souvent, donc effectuer le Serial.write(f) que si un certain temps s'est écoulé depuis la dernière fois ou si f a changé.

  11. #11
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Avril 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Je vois un peu mieux.

    En faite au début je pensais que je devrait mettre genre "file1", puis "file2" et que je les appel quand je touche "toucheA" par exemple. C'était dans ma logique (je sais c'est pas terrible). En y réfléchissant en voyant tous vos codes, je me doutais bien

    utiliser les tableaux dans processing à ce moment là.

    Le problème que j'avais eu avec le son, c'est quand je touche mon sensor, dans processing le lancement met du temps. Ca m'affiche qu'il y a de la latence. Et quand le son est lancé, c'était inaudible et il y avait des grésillements. Je ne sais pas c'est dû à quoi à ce moment là. Je précise que c'était sur mes précédent code.

  12. #12
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 714
    Points : 5 393
    Points
    5 393
    Par défaut
    Le problème que j'avais eu avec le son, c'est quand je touche mon sensor, dans processing le lancement met du temps. Ca m'affiche qu'il y a de la latence. Et quand le son est lancé, c'était inaudible et il y avait des grésillements. Je ne sais pas c'est dû à quoi à ce moment là.
    vous pouvez passer le port série à 1 million bauds (des 2 côtés) pour limiter la latence, mais 1 octet se transmet quand même super vite...

    Ensuite lancer la lecture audio est quasiment indépendant de ce qu'il se passe sur l'arduino (sauf si votre Arduino bombarde comme un malade le port série, c'est pour cela que je disais de rajouter un petit test temporel)

    Pour le grésillement ? avez vous essayé sans Arduino de voir si les fichiers se lancent correctement et rapidement (pas de silence en début de fichier ?)

    testez cela avec vos fichiers:
    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
    import processing.sound.*;
    SoundFile fichierAudio;
     
    void setup() 
    {
      size(300, 300);
      background(255);
     
      println("etape 1:", millis());
      fichierAudio = new SoundFile(this, "testSon1.mp3");
      println("etape 2:", millis());
      fichierAudio.play();
      println("etape 3:", millis());
    }      
     
    void draw() {}
     
    void mousePressed()
    {
      if (fichierAudio.isPlaying()) {
        fichierAudio.stop();
        println("STOP");
      } else {
        println("PLAY");
        println("etape 2:", millis());
        fichierAudio.play();
        println("etape 3:", millis());
      }
    }
    Regardez ce qui s'affiche dans la console.
    -> le chargement initial du fichier est long - d'autant plus long que votre MP3 va contenir des metadata. un format WAV non compressé sera sans doute plus rapide à charger.

    -> vous pouvez arrêter le son en appuyant sur la souris dans la fenêtre ou le relancer depuis le début s'il n'y a pas de lecture. Dans ce second cas vous verrez que c'est quasi instantané car les sons ont été chargés en mémoire vive. (si vous en avez bcp, ça charge la mémoire du PC)

  13. #13
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 012
    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 012
    Points : 2 341
    Points
    2 341
    Par défaut
    Bonjour Jay M

    Citation Envoyé par Jay M Voir le message
    ...sauf si votre Arduino bombarde comme un malade le port série, c'est pour cela que je disais de rajouter un petit test temporel...
    L'Arduino ne bombarde pas!, si aucun sensor n'est touché, il ne se passe rien au niveau du port série. Si l'on touche "normalement", seul une information part sur le port série. Si on laisse le doigt sur un sensor, l'information part toutes les 250 millisecondes.
    Maintenant, si nécessaire, on peut change la loop() ainsi, afin d’attendre le relâchement de la pression
    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
     
     void loop() {
     
    	 for (byte f = 0; f < facesNombre; f++)                                         // Lecture des touches
    	 {
    		 long sensorActivite = sensorFace[f]->capacitiveSensor(30);
    		 if (sensorActivite > 500)
    		 {
    			 //Serial.println((String)facesNom[f] + "\t" + String(sensorActivite));  // Enlever la remarque pour voire le trafic dans le moniteur
    			 Serial.write(f);
    			 while(sensorFace[f]->capacitiveSensor(30) > 500)                       // Attente du relachement de la touche
    			 {}
    		 }
    	 }
     }
    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  14. #14
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 012
    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 012
    Points : 2 341
    Points
    2 341
    Par défaut
    Bonjour KyloRen11

    Citation Envoyé par KyloRen11 Voir le message
    ...Le problème que j'avais eu avec le son, c'est quand je touche mon sensor, dans processing le lancement met du temps.....
    Atention! avec l'usage de la bibliothèque CapacitiveSensor.h, si un ou des sensors sont configurés et que un ou des sensor est pas ou mal câblé(s) sur l'Arduino, cela ralenti énormément le programme.

    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  15. #15
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Avril 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par jpbbricole Voir le message




    J'ai tester le code avec le branchement en suivant le schéma sur la photo que vous m'avez envoyé. Quand je touche le sensor, il m'affiche pas des chiffre mais une série de "p" et autre symbole. Ce n'est pas trop grave? Peut-être que j'ai rater les branchements.

    Là je modifie le code pour l'acceder à processing.

    Citation Envoyé par jpbbricole Voir le message
    Atention! avec l'usage de la bibliothèque CapacitiveSensor.h, si un ou des sensors sont configurés et que un ou des sensor est pas ou mal câblé(s) sur l'Arduino, cela ralenti énormément le programme.


    OK je savais pas. Je pensais que mes câble étaient bien branché.

    Citation Envoyé par Jay M Voir le message



    En faite les sons je les ai télécharger des vidéo youtube que j'ai convertie en mp3. En faite au début du code processing, il y avait de temps en temps de la latence. Mais il y avait aussi des sons auquel il y en avait pas.

    Oui j'avais tester sans arduino. J'ai utilisé le lancement de son quand je lance le programme. Le code venait du site processing

  16. #16
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 714
    Points : 5 393
    Points
    5 393
    Par défaut
    Citation Envoyé par KyloRen11 Voir le message
    En fait au début du code processing, il y avait de temps en temps de la latence. Mais il y avait aussi des sons auquel il y en avait pas.
    C’est le temps de mise en mémoire et décodage mp3, mais si vous avez testé mon code, une fois chargés les fichiers devraient démarrer instantanément

  17. #17
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Avril 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Le code pour le son en pressant la souris ça fonctionne. Merci


    pour le code processing, il y a une erreur avec le SoundFile (je vous montre la capture d'écran et le code). Il est écrit en erreur "Missing left curly bracket "{" ". Est ce que c'est à cause du faite que je n'ai pas encore créer de tableau pour les sons?

    peut-être que j'ai mal compris le code et que j'ai mal positionné certain éléments.


    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
     
     
    import processing.serial.*;
     
    import processing.sound.*;
     
    Serial monArduino;
     
     
     
    SoundFile fichierFaceA, fichierFaceB, fichierFaceC, fichierFaceD;
     
      // on désigne les fichiers sons qui sont dans le répertoire /data du sketch
      fichierFaceA = new SoundFile(this, "testSon1.mp3");
      fichierFaceB = new SoundFile(this, "TestSon2.mp3");
      fichierFaceC = new SoundFile(this, "testSon3.mp3");
      fichierFaceD = new SoundFile(this, "testSon4.mp3");
     
     
     
    void setup() {
     
     
     
        size(640, 360);
        background(255);
     
     
     
      printArray(Serial.list()); // affichage de tous les ports pour voir le N° de l'Arduino
      monArduino = new Serial(this, Serial.list()[0], 115200); // changer le [0] pour le bon index [1], [2], ... du port de votre Arduino
    }
     
    void draw() {
     
      if (monArduino.available() > 0){
          int octetLu = monArduino.read();
          if (octetLu == 0)
             if (! fichierFaceA.isPlaying()) fichierFaceA.play();
           else if (octetLu ==1){
             if (! fichierFaceB.isPlaying()) fichierFaceB.play();
           else if (octetLu ==2){
             if (! fichierFaceC.isPlaying()) fichierFaceC.play();
           else if (octetLu ==3){
             if (! fichierFaceD.isPlaying()) fichierFaceD.play();
      }
     
    }


    Nom : processing probleme code.PNG
Affichages : 125
Taille : 57,4 Ko

  18. #18
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 714
    Points : 5 393
    Points
    5 393
    Par défaut
    Citation Envoyé par KyloRen11 Voir le message
    peut-être que j'ai mal compris le code et que j'ai mal positionné certain éléments.
    appuyez sur ctrl-t dans l'outil Processing, vous verrez qu'il vous manque plein d'accolades dans draw().

    Ensuite, vous ne pouvez pas déclarer en deux fois vos variables en global car pour charger le fichier il faut que le setup() ait fini de s'exécuter pour que le chemin de l'application soit connu.
    donc il faudrait mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fichierFaceA = new SoundFile(this, "testSon1.mp3");
    fichierFaceB = new SoundFile(this, "TestSon2.mp3");
    fichierFaceC = new SoundFile(this, "testSon3.mp3");
    fichierFaceD = new SoundFile(this, "testSon4.mp3");
    dans le setup() et juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SoundFile  fichierFaceA, fichierFaceB, fichierFaceC, fichierFaceD;
    en en-tête, mais ça ne fait pas un tableau.

    Voici un exemple de code pour une approche par tableau
    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
    import processing.sound.*;
     
    int nombreDeSons=4;
    int sonEnCours;
    SoundFile[] lesSons = new SoundFile[nombreDeSons] ;
     
    void setup() {
      size(640, 360);
      background(255);
      for (int i=0; i<nombreDeSons; i++) {
        println("Chargement de ", "testSon" + (i+1) + ".mp3");
        lesSons[i] = new SoundFile(this, "testSon" + (i+1) + ".mp3");
      }
     
      sonEnCours = -1;
    }
     
     
    void mousePressed()
    {
      if ((sonEnCours >= 0) && (lesSons[sonEnCours].isPlaying())) lesSons[sonEnCours].stop();
      sonEnCours = (sonEnCours + 1) % nombreDeSons;
      println("Ecoute de ", "testSon" + (sonEnCours+1) + ".mp3");
      lesSons[sonEnCours].play();
    }
     
    void draw() {}
    En cliquant avec la souris dans la fenêtre vous allez faire défiler vos sons l'un après l'autre (et reboucler après le 4ème)

    Attention, comme mentionné précédemment la classe Sound va décoder et charger le fichier mp3 en mémoire et suivant la taille de vos fichiers vous risquez de déborder la mémoire et Java va planter en disant problème d'index dans le tableau ou un truc du genre. (vous pouvez essayer d'augmenter la taille de la mémoire vive allouée dans les préférence)

  19. #19
    Candidat au Club
    Homme Profil pro
    étudiant
    Inscrit en
    Avril 2020
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Belgique

    Informations professionnelles :
    Activité : étudiant

    Informations forums :
    Inscription : Avril 2020
    Messages : 13
    Points : 4
    Points
    4
    Par défaut
    Re

    Pardon de répondre que maintenant. J'ai bosser et tester le code et j'ai encore un problème que j'ai dû mal à résoudre. En faite quand je lance processing il me dit ça "expecting EOF, sound 'ficherFaceA'" je ne sais pas à quoi est dû cette erreur.

    Ensuite il y a la ligne du " Serial MonArduino" qui dit qu'il manque une {. Hors je vois pas où j'ai mal fais les choses.


    Je renvoie toujours le code.



    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
    59
    60
    61
    62
    63
     
     
    import processing.serial.*;
     
    import processing.sound.*;
     
    Serial monArduino ;
     
     
     
     
     
      // on désigne les fichiers sons qui sont dans le répertoire /data du sketch
      fichierFaceA = new SoundFile(this, "testSon1.mp3");
      fichierFaceB = new SoundFile(this, "TestSon2.mp3");
      fichierFaceC = new SoundFile(this, "testSon3.mp3");
      fichierFaceD = new SoundFile(this, "testSon4.mp3");
     
     
     
    void setup() {
     
      SoundFile fichierFaceA, fichierFaceB, fichierFaceC, fichierFaceD;
     
     
      size(640, 360);
      background(255);
     
     
     
      printArray(Serial.list()); // affichage de tous les ports pour voir le N° de l'Arduino
      monArduino = new Serial(this, Serial.list()[0], 115200); // changer le [0] pour le bon index [1], [2], ... du port de votre Arduino
    }
     
    void draw() {
     
         if (monArduino.available() > 0){
           int octetLu = monArduino.read();
            if (octetLu == 0){
             if (! fichierFaceA.isPlaying()){
             fichierFaceA.play();
              else if (octetLu ==1){
               if (! fichierFaceB.isPlaying()) {
               fichierFaceB.play();
                else if (octetLu ==2){
                  if (! fichierFaceC.isPlaying()){
                  fichierFaceC.play();
                   else if (octetLu ==3){
                    if (! fichierFaceD.isPlaying()) {
                    fichierFaceD.play() ;   
                    }
                   }
                  }
                }
               }
              }
             }
            }
         }
    }
     
     
    }

  20. #20
    Membre émérite
    Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    Février 2013
    Messages
    1 012
    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 012
    Points : 2 341
    Points
    2 341
    Par défaut
    Bonsoir KyloRen11
    Citation Envoyé par KyloRen11 Voir le message
    Ensuite il y a la ligne du " Serial MonArduino" qui dit qu'il manque une {. Hors je vois pas où j'ai mal fais les choses.
    Il faut dire que ta suite de if else etc... était un peu b.........e!!! et y retrouver une erreur de { devient un vrai casse tête.
    J'ai réécri toute ta procédure Processing (une première pour moi!) et l'ai essayé avec le programme du post #7
    et cette modification:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    			 Serial.println((String)facesNom[f] + "\t" + String(sensorActivite));
    // Par
    			 Serial.write(f);
    Pour autant que les fichiers MP3 testSon1.mp3, testSon2.mp3, testSon3.mp3, testSon4.mp3 soient dans le même répertoire que le sketch Processing, ça fonctionne impeccable.

    Le sketch Processing:
    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
     
     
    import processing.serial.*;
     
    import processing.sound.*;
     
    Serial monArduino ;
     
    SoundFile fichierFaceA, fichierFaceB, fichierFaceC, fichierFaceD;
     
    void setup() {
     
      // on désigne les fichiers sons qui sont dans le répertoire /data du sketch
        fichierFaceA = new SoundFile(this, "testSon1.mp3");
        fichierFaceB = new SoundFile(this, "testSon2.mp3");
        fichierFaceC = new SoundFile(this, "testSon3.mp3");
        fichierFaceD = new SoundFile(this, "testSon4.mp3");
     
        size(640, 360);
        background(255);
     
        printArray(Serial.list()); // affichage de tous les ports pour voir le N° de l'Arduino
        monArduino = new Serial(this, Serial.list()[1], 115200); // changer le [0] pour le bon index [1], [2], ... du port de votre Arduino
    }
     
    void draw() 
    { 
         if (monArduino.available() > 0)
         {
           int octetLu = monArduino.read();
     
           if (octetLu == 0 && ! fichierFaceA.isPlaying())
           {
             fichierFaceA.play();
           }
           else if (octetLu == 1 && ! fichierFaceB.isPlaying())
           {
             fichierFaceB.play();
           }
           else if (octetLu == 2 && ! fichierFaceC.isPlaying())
           {
             fichierFaceC.play();
           }
           else if (octetLu == 3 && ! fichierFaceD.isPlaying())
           {
             fichierFaceD.play();
           }
         }
    }
    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

Discussions similaires

  1. [CV] Avis pour améliorer mon cv
    Par lapanne dans le forum CV
    Réponses: 7
    Dernier message: 17/10/2007, 15h04
  2. améliorer Mon Menu
    Par amazircool dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 08/03/2007, 07h57
  3. Réponses: 2
    Dernier message: 27/12/2006, 13h31
  4. Améliorer mon contraste
    Par progfou dans le forum Traitement d'images
    Réponses: 11
    Dernier message: 06/11/2006, 11h01
  5. [Sécurité] Comment amélioré mon code ?
    Par Nadd dans le forum Langage
    Réponses: 14
    Dernier message: 03/03/2006, 20h13

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