Bac-Ka-Poux-Bêle 2019-2020

Bien au contraire mais si ne te conformes pas aux règles du forum, aucune chance.

Commence déjà par ceci

Soit tu es un professionnel, auquel cas je veux bien entendre dire qu'il peut y avoir urgence et délais à respecter, mais dans ce cas tu ne poserais pas des questions aussi basiques. Soit tu es un particulier avec un petit projet personnel, et dans ce cas il n'y a pas d'urgence.

Effectivement non je ne suis pas professionnel, c'est pour un projet personnel mais je suis en retard niveau Timing.

je ne veux pas vous imposer mon retard, d'ailleurs je ne voulais pas déroger aux règles du Forum. Je ne voulais être méchant dans le terme Urgence :/

Je vous fait mes excuses

Bonjour melyqn,

Je ne peux pas t'aider pour la partie raspberry. Essaye d'utiliser les balises de code. Je ne connais pas non plus ton code mais je pense (dis-moi si je me trompe) que tous tes if sont les mêmes:

if (distance <= 50){

Serial.print (distance); // valeur mesurée par le capteur
Serial.println(« Cm »);// cm après la valeur
}

Est-ce que ça ne devrais pas être des if avec tes différentes variables distance:

int detectorPin = A2; // capteur 1 branché sur sortie analogique A1
int detector2Pin = A3; // capteur 2 branché sur sortie analogique A2
int detector3Pin = A4; // capteur 3 branché sur sortie analogique A3
int interval = 0;

void setup() {
Serial.begin(9600);
Serial.println(« les distances des capteurs vont etre envoyées »);

}

void loop() {

interval = analogRead(detectorPin); // lecture d'informations du capteur en analogique
float distance = (6787.0 /((float)interval - 3.0)) - 4.0; // transforme valeur reçu en cm
Serial.print(« distance capteur1 = »);// affiche distance capteur1= x
if (distance <= 50){

Serial.print (distance); // valeur mesurée par le capteur
Serial.println(« Cm »);// cm après la valeur
}

interval = analogRead(detector2Pin);
float distance2 = (6787.0 /((float)interval - 3.0)) - 4.0; // transforme valeur reçu en cm
Serial.print(« distance capteur2 = »);
if (distance2 <= 50){

Serial.print (distance2);
Serial.println(« Cm »);
}

interval = analogRead(detector3Pin);
float distance3 = (6787.0 /((float)interval - 3.0)) - 4.0; // transforme valeur reçu en cm
Serial.print(« distance capteur3 = »);
if (distance3 <= 50){
Serial.print (distance3);
Serial.println(« Cm »);
}

delay(1250);
Serial.println("----------------------------------------------------------------");

}

c'est pour un projet personnel mais je suis en retard niveau Timing.

Qui détermine le timing ? SI c'est réellement strictement personnel ça doit pouvoir se gérer pour apprendre à traiter sous Pyhon les lignes reçues et extraire l'info.

hello à tout hasard ICI

Bonjour, J ai un problème de commande d une sortie 13 du Arduino Mega en passant par mon tel android, l application Bluetooth Electronics et le module HC-05.

Le module HC-05 est bien appairé a l application ou j ai programmer un bouton pour envoi de la commande "a" ou "b"

Quelqu'un pourrait il m aider sur ce point?

Merci d'avance

#include 
#define rxPin 11 // Broche 11 en tant que RX, à raccorder sur TX du HC-05
#define txPin 10 // Broche 10 en tant que TX, à raccorder sur RX du HC-05

SoftwareSerial mySerial(rxPin, txPin);
char junk; 
String inputString="";


void setup()
{
   // define pin modes for tx, rx pins:
    pinMode(rxPin, INPUT);
    pinMode(txPin, OUTPUT);
    pinMode(13, OUTPUT);
    mySerial.begin(9600);
    Serial.begin(9600);
}

void loop()
{
  int i = 0;
  char someChar[32] = {0};
  // when characters arrive over the serial port...
  if(Serial.available()) {
    do{
      someChar[i++] = Serial.read();
     delay(3);
    }while (Serial.available() > 0);
    mySerial.println(someChar);
    Serial.println(someChar);
   }
   
   while(mySerial.available())
       Serial.print((char)mySerial.read());
       
//DECLARATION DE LA FONCTION SORTIE
  if(Serial.available()){
  while(Serial.available())
    { 
      char inChar = (char)Serial.read(); //Lire l'entrée
      inputString += inChar; //Construit une chaine de caractére a partir des caractére reçus
    } 
    Serial.println(inputString);
    while (Serial.available() > 0) 
    { junk = Serial.read() ; }
   if(inputString == "a"){ //Dans le cas ou l'entrée est 'a' la LED s'allume 
     digitalWrite(13, HIGH);
   }else if(inputString == "b"){ //Dans le cas ou l'entrée est 'b' la LED s'eteint 
     digitalWrite(13, LOW);
   } 
   inputString = "";
   }
}

:confused: :confused: Personne pour un petit coup de main MON PROJET = CABANE A POULE AUTOMATIQUE

J en suis loin pour le moment mais je compte bien au moins automatiser la trappe avec un calendrier des ephemeride si possible et la distribution d aliment.

Merci d avance a ceux qui pourrais lire ce POST

Bonjour

L'utilisation systématique des majuscules (= CRIER) fonctionne comme un repoussoir , sur ce forum comme sur de nombreux autres.

Bonjour,

Pour un projet, je dois utiliser différent capteur grove et un SD shield. Le problème c'est que pour chaque capteur il y a une librairie. Tous les capteurs fonctionnent individuellement parfaitement. Mais lorsque je les mets tous sous le même code je suis à plus de 100% de mémoire dynamique utilisé. Je voulais donc savoir si vous connaissez une solution pour récupérer seulement les fonctions qui me sont utile des librairie. Par exemple pour SD.h, j'ai seulement besoin des fonctions: - begin() - open() - close() - size() - et d'écrire dans un fichier txt sur la carte SD

Je voulais savoir comment faire pour enlever toutes les autres fonctions de la librairie que je n'utilise pas et qui prennent de la place. J'ai le même soucis avec l'accéléromètre: https://wiki.seeedstudio.com/Grove-3-Axis_Digital_Accelerometer-1.5g/ qui me prend beaucoup trop d'espace en mémoire dynamique.

Je suis preneur de toute solution merci d'avance.

  • Ajouter au lexique

  • Aucune liste de mots pourAnglais -> Français...

  • Créer une nouvelle liste de mots...

  • Copier

Lorsque ton code utilise une bibliothèque, il ne charge que les fonctions qu'il utilise, pas l'ensemble de la bibliothèque. Pour ton problème, il faut chercher une autre voie pour diminuer l'empreinte mémoire.

Vérifiez si VOTRE code n’est pas la partie gourmande.

Sinon Prenez un arduino avec plus de mémoire ou codez des bibliothèques plus optimisées...

Alors voici, le code pour juste écrire sur la carte SD:

#include 
#include 

File myFile;

void setup() {
  Serial.begin(9600);
  SD.begin(4)
}

void loop() {
  myFile = SD.open("test.txt", FILE_WRITE);

  if (myFile) {
    myFile.println("testing 1, 2, 3.");
    myFile.close();
  } else {
    Serial.println("error opening test.txt");
  }
}

Donc je suis sûr que ça vient de la librairie et l'option d'une carte arduino avec plus de mémoire n'est pas une solution pour moi, je ne peux pas changer de carte arduino pour mon projet :/ Pour ce qui est de coder une bibliothèque plus optimisé, pourquoi pas mais comment ?

La librairie SD consomme pas mal de mémoire car la SD card est accessible par bloc et donc la librairie doit posséder un tampon de la taille d'un bloc soit 512 octets plus des variables liées au fonctionnement de la librairie. Là on ne peut pas gagner grand chose quelque soit la librairie elle sera condamnée à écrire par blocs et donc elle devra avoir un tampon de la taille d'un bloc.

La librairie de l'accéléromètre consomme de la RAM pour stocker une lookup table assez volumineuse. De ce que je comprends, cette lookup table est utilisée pour accélérer les calculs et éviter des multiplications de flottants. Pour libérer de la RAM je vois 2 possibilités: - mettre la table en Flash, les accès seront un peu plus long - faire l'impasse sur la lookup table et faire les calculs à chaque fois. Comme ces calculs s'appliquent sur des float le temps d'exécution va certainement s'en ressentir. Il faudrait faire des essais pour voir ce qui colle le mieux à ton besoin.

Une troisième solution, chercher une autre librairie qui ait une empreinte mémoire plus réduite. Mais elle aura sans doute un des deux travers exposés ci-dessus.

l'option d'une carte arduino avec plus de mémoire n'est pas une solution pour moi, je ne peux pas changer de carte arduino pour mon projet :/

Et qui a imposé cette option ? On ne choisit pas une carte au hasard... quel analyse du besoin avez vous effectuée ?

fdufnews: Pour libérer de la RAM je vois 2 possibilités: - mettre la table en Flash, les accès seront un peu plus long - faire l'impasse sur la lookup table et faire les calculs à chaque fois. Comme ces calculs s'appliquent sur des float le temps d'exécution va certainement s'en ressentir. Il faudrait faire des essais pour voir ce qui colle le mieux à ton besoin.

Ok merci ! Je vais essayer ça, vous avez une idée de comment mettre la table en flash ?

J-M-L: Et qui a imposé cette option ? On ne choisit pas une carte au hasard... quel analyse du besoin avez vous effectuée ?

Notre école et on ne peut pas le changer, d'après eux c'est possible mais on ne sait pas comment

Peut-être voir cette librairie Il y a une bonne douzaine de librairies pour cet accéléromètre. Fais une recherche sur le net.

La librairie SD consomme pas mal de mémoire[...]. Là on ne peut pas gagner grand chose quelque soit la librairie elle sera condamnée à écrire par blocs et donc elle devra avoir un tampon de la taille d'un bloc.

Je ne suis pas d'accord. 1) Il s'agit d'un transfert par liaison série, et on peut parfaitement écrire une bibliothèque qui lise au niveau de la SD un bloc de 512 octet, mais qui jette le début et la fin pour ne mémoriser par exemple que 128 octets. Comme @fdufnews l'a souligné, on ne peut pas avoir le beurre et l'argent du beurre, lire par paquets de 128 octets peut économiser 384 octets mais rendra les lectures 4 fois plus longue 2) La librairie SD utilise un tampon en mémoire statique. Ce qui veut dire par exemple que si j'ai à lire des infos (tampon de 512 octets) et faire un calcul demandant 512 octets de la mémoire, si je fais l'un après l'autre, je peux utiliser la place du tampon de la SD pour le calcul et réciproquement. 3) Ce n'est pas 512 octets que nécessite la SD mais 700. La bibliothèque SD, va concerver sans doute tout un tas de données qui ne sont pas forcément utiles à toutes les applications 4) A la compilation, on ne sait pas encore si la carte qui va être lue est une Fat12 ou une Fat16. Il faut donc implanter les deux fonctions. Avec une bibliothèque personnalisée, on peut donc virer du code. Autre exemple, la bibliothèque SD reconnait les sous répertoires, donc ce code est forcément dans le code final car il fait partie de open( ). Si on a besoin juste de lire dans la racine, on perd de la place pour rien. Il a été question un moment de voir si cela était intéressant d’écrire une bibliothèque perso SD. C'est toujours dans mes rêves. A l'époque j'ai cherché, mais je n'ai pas vraiment trouvé des documents me donnant les informations nécessaires.

todakouma: Notre école et on ne peut pas le changer, d'après eux c'est possible mais on ne sait pas comment

Je ne sais pas quel est le niveau d'étude dont on parle ici, mais ré-écrire une bibliothèque de lecture de carte SD, puis une autre de contrôle d'un accéléromètre et d'autres capteurs... Ca me parait bien plus complexe qu'un simple exercice. Soit les profs se plantent, soit ils ont une autre idée en tête.

Quelle est la carte en question ?

todakouma: Notre école et on ne peut pas le changer, d'après eux c'est possible mais on ne sait pas comment

Il me semble que cet élément manquait dans la présentation du sujet.... un TP non annoncé >>> poubelle