Intégration de code dans un autre

J'ai une carte Arduino UNO monter dessus un Grove Shield et encore monter dessus Un Velleman KA02 tout ca sur deux étage. Sur mon Shield j'ai de brancher un détecteur de mouvement avec un vibration motor, deux leds et un capteur de lumière tout ca chez Grove. Tout c'est composant font un détecteur de mouvement.
J'ai réussi a faire mon code pour le détecteur tout les composants marche ensemble mais une dernière choses me pose problème.
J'ai le code d'exemple du Velleman KA02 et mon soucis et que je n'arrive pas ajouter le code a l'autre code du détecteur pour que quand le détecteur de mouvement détecte un mouvement le son se déclenche. Tout marche sauf le lancer du son au moment de la détection.
Voici le code du détecteur :

//Déclaration des pins utilisés
int ledPin = 4; //Broche pour la LED
int ledPin2 = 3; //Broche pour la LED
int pirPin = 2; //Broche pour le capteur de mouvement
int lightPin = A0; //Broche pour le capteur de lumière
int motorPin = 6; //Broche pour le moteur

//Déclaration des variables
int pirState = LOW; //Etat du capteur de mouvement
int lightLevel = 0; //Niveau de lumière ambiant
unsigned long movementStartTime = 0; //Temps de début de détection de mouvement
const unsigned long movementDuration = 5000; //Durée de détection de mouvement en millisecondes (ici 5 secondes)
const unsigned long detectionCooldown = 5000; //Temps de refroidissement entre les détections en millisecondes (ici 10 secondes)
bool lightOn = false; //Indicateur pour savoir si la lumière est allumée ou éteinte
unsigned long lightOnTime = 0; //Temps d'allumage de la lumière en millisecondes
const unsigned long lightDuration = 1000; //Durée d'allumage de la lumière en millisecondes (ici 1 seconde)

void setup() {
  pinMode(ledPin, OUTPUT); //Déclare la broche de la LED comme une sortie
  pinMode(ledPin2, OUTPUT); //Déclare la broche de la LED comme une sortie
  pinMode(pirPin, INPUT); //Déclare la broche du capteur de mouvement comme une entrée
  pinMode(lightPin, INPUT); //Déclare la broche du capteur de lumière comme une entrée
  pinMode(motorPin, OUTPUT); //Déclare la broche du moteur comme une sortie
  Serial.begin(9600); //Initialise la communication série à 9600 bauds
}

void loop(){
  lightLevel = analogRead(lightPin); //Lit le niveau de lumière ambiant
  pirState = digitalRead(pirPin); //Lit l'état du capteur de mouvement

  //Si le niveau de lumière est bas et que le capteur de mouvement détecte un mouvement pendant la durée de détection de mouvement
  if (lightLevel < 200 && pirState == HIGH && (millis() - movementStartTime) >= detectionCooldown) {
    //Allume la LED et le moteur
    digitalWrite(ledPin, HIGH);
    digitalWrite(ledPin2, HIGH);
    digitalWrite(motorPin, HIGH);
    lightOn = true;
    lightOnTime = millis();
    movementStartTime = millis();
  }

  //Eteint la LED et le moteur si la durée d'allumage de la lumière est écoulée
  if (lightOn && (millis() - lightOnTime) >= lightDuration) {
    digitalWrite(ledPin, LOW);
    digitalWrite(ledPin2, LOW);
    digitalWrite(motorPin, LOW);
    lightOn = false;
  }
}

Et voici l'autre code du Velleman KA02 :

#include <ISD1700.h>
ISD1700 chip(10); // Initialize chipcorder with
   // SS at Arduino's digital pin 10
                   
int apc=0;
                     int vol=0; //volume 0=MAX, 7=min
int startAddr=0x10;
                     int endAddr =0x2DF;
                     int inInt=0;
                     void setup()
                     {
   apc = apc | vol; //D0, D1, D2
   
   //apc = apc | 0x8; //D3 comment to disable output monitor during record
   
   apc = apc | 0x50; // D4& D6 select MIC REC
   //apc = apc | 0x00; // D4& D6 select AnaIn REC
   //apc = apc | 0x10; // D4& D6 select MIC + AnaIn REC
   
   apc = apc | 0x80; // D7 AUX ON, comment enable AUD
   
   apc = apc | 0x100; // D8 SPK OFF, comment enable SPK
   
   //apc = apc | 0x200; // D9 Analog OUT OFF, comment enable Analog OUT
   
   //apc = apc | 0x400; // D10 vAlert OFF, comment enable vAlert
   
   apc = apc | 0x800; // D11 EOM ON, comment disable EOM
   
   
   
   Serial.begin(9600);
   Serial.println("Sketch is starting up");
   }
void loop()
                     {
   char c;
   
   if(Serial.available())
   {
   /* Power Up */
   chip.pu();
   c = Serial.read();
   switch(c)
   {
   case 'A':
   Serial.println(chip.rd_apc(), BIN);
   break; 
   case 'Y':
   chip.play();
   break;
   case 'P':
   chip.stop();
   delay(500);
   break;
   case 'E':
   chip.erase();
   delay(500);
   break;
   case 'R':
   chip.rec();
   break;
   case 'F':
   chip.fwd();
   delay(500);
   break;
   case 'Z':
   chip.g_erase();
   delay(500);
   break;
   case 'I':
   Serial.println(chip.devid(), BIN); 
   break;
   case 'W': 
   Serial.println(apc, BIN);
   chip.wr_apc2(apc); //
   break;
   case 'S': 
   Serial.println(chip.rd_status(), BIN);
   break;
   case '>': 
   startAddr=SerialIn(); 
   Serial.print("startAddr: ");
   Serial.println(startAddr);
   break; 
   case '<': 
   endAddr=SerialIn(); 
   Serial.print("endAddr: ");
   Serial.println(endAddr);
   break; 
   case 'y':
   chip.set_play(startAddr,endAddr);
   break;
   case 'r':
   //chip.set_erase(startAddr,endAddr);
   //delay(500);
   chip.set_rec(startAddr,endAddr);
   break;
   case 'e':
   chip.set_erase(startAddr,endAddr);
   delay(500);
   break;
   
   }
   Serial.print("Status---> ");
   Serial.print(chip.CMD_ERR()? "CMD_ERR ": "OK ");
   Serial.print(chip.PU()? "PU ": "NO PU ");
   Serial.print(chip.RDY()? "RDY ": "Not_RDY ");
   Serial.print(chip.rd_status(), BIN);
   Serial.println();
   delay(1000);
   }
   }
int SerialIn(){
   inInt=0;
   
   while (Serial.available() <= 0) 
   {
   delay(300);
   }
   while (Serial.available()) {
   // get the new byte:
   char c = Serial.read(); 
   // add it to the inputString:
   inInt = (inInt*10) + (c-48);
   // if the incoming character is a newline, set a flag
   // so the main loop can do something about it:
   if (c == '\n') {
   //stringComplete = true;
   Serial.print("stringComplete ");
   } 
   }
   //c = Serial.read()-48; 
   //mess(c);
 return (inInt);
                       
                       }
                       /*
                       void mess(int num){
   Serial.print("num: ");
   Serial.println(num);
   startAddr=(0x50*num)+0x10;
   endAddr=(startAddr+0x50)-1;
   Serial.print("startAddr: ");
   Serial.print(startAddr, HEX);
   Serial.print(" - endAddr: ");
   Serial.println(endAddr, HEX);
   
   }
   */     

Si vous auriez la solution ou pourrez m'aiguiller je vous en serais très reconnaissant.

As-tu fais tourner le code de démonstration?
As-tu compris le fonctionnement de ce shield?
Parce que la doc semble inexistante. Donc c'est un jouant avec le programme de démo que tu pourras comprendre comment l'utiliser.

J’ai tout retourner et c’est comment utiliser la carte son mais niveaux code aussi j’ai tout retourner dans tout les sens mais sans succès

Bonjour watcher123

Je n'ai pas ce matériel, malheureusement :woozy_face:.

Tu peux essayer ceci:

A mettre dans le programme du détecteur, en entête:
#include <ISD1700.h>
ISD1700 chip(10); // Initialize chipcorder with
// SS at Arduino's digital pin 10

Et dans la première condition:

if (lightLevel < 200 && pirState == HIGH.....
chip.rec();

Et dans la 2ème condition:

if (lightOn && (millis() - lightOnTime)...
chip.stop();

J'ai trouvé de la doc ici et .

Cordialement
jpbbricole

Tu ne réponds pas vraiment à la question.

  • Est-ce que le code de démonstration fonctionne avec la UNO et le shield Velleman seul?
  • Arrives-tu à enregistrer et rejouer des sons avec le code de démonstration?
  • Est-ce que le code de démonstration fonctionne avec la UNO, le shield Velleman et le Grove shield?

J'avoue que je n'ai pas lu ton code d'en l'intégralité, mais as tu essayé:

  • d'initialiser la variable c à 0
  • de séparer la lecture du port série de ton switch pour affecter la variable c, si il y a un caractère à lire.
  • d'insérer le code de ton détecteur avant le switch
  • d'affecter à la variable c la valeur Y, lorsque le détecteur à détecté quelque chose?

Bonjour terwal

Je pense que tu aurais dû.

Tu aurais vu que la partie principale est le détecteur (le premier programme) et qu'il "suffit" d'y mettre l'initialisation de la carte son:

#include <ISD1700.h>
ISD1700 chip(10); // Initialize chipcorder with
   // SS at Arduino's digital pin 10

et d'utiliser les fonctions de cette carte son comme chip.rec(); ou chip.stop();.

Alors que tu proposes:

Alors que dans ce programme (le 2ème), 95% ne servent à rien pour ce que @watcher123 a à faire et que ça fait un sacré bricolage.

Cordialement
jpbbricole

Bonjour @jpbbricole oui, j'ai supposé qu'il voulait garder la possibilité du pilotage à distance.
Tu notera que finalement ne n'est pas son code que j'aurais du bien lire, mais son introduction :slight_smile:

Et bien en fait le second code

  1. il permet de vérifier que le shield Velleman fonctionne correctement.
  2. il permet de d'appréhender son fonctionnement et si on prend la peine de jouer avec on comprend ce qu'il faut extraire du code de démo pour faire jouer un son dans le premier code.

En bref, si on prend la peine d'essayer le code de démo on peut être autonome sur la question.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.