Lire et stocker des données de capteur dans un tableau

Bonsoir,

Je suis en Terminale SSi et je dois réaliser un projet. Je n'ai (presque) aucune connaissance sur le langage arduino ou autre mis à part quelques bases et j'aurais besoin de votre aide urgente svp. Mon projet consiste à motoriser un télescope azimutal afin de le faire suivre un point fixé dans le ciel et je dois m'occuper de la programmation.

L'objectif de mon programme : L'utilisateur pointe un point dans le ciel avec un télescope puis appuie sur un bouton . Lorsque le bouton est appuyé, le programme lit un capteur Inclinaison, un capteur Orientation et une Horloge puis stocke ces données dans un tableau (si c'est possible). Nous avons fait une simulation de la trajectoire d'une étoile que nous avons mis dans un tableur. Ne sachant pas comment le mettre sur arduino, j'ai entré 4 valeurs du tableau dans mon programme (angle[] et heure[]). A partir de ces données, à chaque heure (en secondes) est associé une position du moteur. Le programme n'aura plus qu'à faire bouger le moteur en fonction de l'heure et relever à chaque fois l'Inclinaison et l'Orientation du télescope et le stocker dans un tableau.

Mon principal problème est de stocker les informations des capteurs dans un tableau et de relever le tableau.

Ci-joint mon algorithme ainsi que le début de mon programme en annexe.
En vous remerciant par avance.
Cordialement.

int Bpoussoir =2;
float Incli;
float Orient;
float Horloge;
float Mot_alt = 0;
float Mot_azi = 0;
float heure[] = {0,240.83333,481.66667,722.5}
float angle[] = {0.06971,0.07172,0.07374,0.07576}

void setup() {
  
   Serial.begin(9600)
  Bpoussoir=2
  pinMode(Bpoussoir, INPUT)
  pinMode(Incli, INPUT)
  pinMode(Orient, INPUT)
  pinMode(Horloge, INPUT)
  pinMode(Mot_alt, OUTPUT)
  pinMode(Mot_azi, OUTPUT)
  
}

void loop() {
  if (digitalRead(Bpoussoir) =1);
  ValIncli = analogRead(Incli);
  ValOrient = analogRead (Orient);
  Heure = 0;
}
if(Heure == heure[0]) {
  Mot_azi == angle[0];
}
del
if(Heure == heure[1]) {
  Mot_azi == angle[1];
}
if(Heure == heure[2]) {
  Mot_azi == angle[2];
}
if(Heure == heure[3]) {
  Mot__azi == angle[3];
}

Bonsoir

va falloir bosser un peu.. sur le code et sur l'algo... vous vous réveillez un peu tard non?

  if (digitalRead(Bpoussoir) [color=red][b]=[/b][/color]1);....

[color=red]float[/color] Incli;
[color=red]float[/color] Orient;
[color=red]float[/color] Horloge;
[color=red]float[/color] Mot_alt = [color=red]0[/color];
[color=red]float[/color] Mot_azi = [color=red]0[/color];
...
  pinMode([color=red]Incli[/color], INPUT)
  pinMode([color=red]Orient[/color], INPUT)
  pinMode([color=red]Horloge[/color], INPUT)
  pinMode([color=red]Mot_alt[/color], OUTPUT)
  pinMode([color=red]Mot_azi[/color], OUTPUT)
...
  ValIncli = analogRead([color=red]Incli[/color]);
  ValOrient = analogRead ([color=red]Orient[/color]);

J'ai modifié mon programme et ajouté une libraire correspondant à mon capteur Inclinaison et Orientation est-ce mieux ainsi ? J'ai également essayé de mettre un tableau (resul[]) qui stockerais si ça marche des données du capteur.

#include <BMP180.h>
#include <I2Cdev.h>
#include <MPU9250.h>


int Bpoussoir =A7;
int Incli;
float ValIncli ;
float ValOrient ;
int Orient;
int Horloge;
float Heure;
float Mot_alt = 0;
float Mot_azi = 0;
float heure[4] = {0,240.83333,481.66667,722.5};
float angle[4] = {0.06971,0.07172,0.07374,0.07576};
float resul[4] = {0,0,0,0};

void setup() {
  
   Serial.begin(9600);

  pinMode(Bpoussoir, INPUT);
  pinMode(Incli, INPUT);
  pinMode(Orient, INPUT);
  pinMode(Horloge, INPUT);
  pinMode(Mot_alt, OUTPUT);
  pinMode(Mot_azi, OUTPUT);
  for(int i=1; i<100;i++){
      heure[i] = 0;
      angle[i] = 0;
      resul[i];}  
}

void loop() {
  if (analogRead(Bpoussoir)<100){
  ValIncli = analogRead(Incli);
  ValOrient = analogRead (Orient);
  Heure = 0;
}
if(Heure == heure[0]) {
  Mot_azi = angle[0];
  ValIncli = analogRead(Incli);
  ValOrient = analogRead (Orient);
  resul[0] = ValIncli ; 
  Serial.print(resul[0]);
}

if(Heure == heure[1]) {
  Mot_azi = angle[1];
  ValIncli = analogRead(Incli);
  ValOrient = analogRead (Orient);
  resul[1] = ValIncli ;
  Serial.print(resul[1]);
}
if(Heure == heure[2]) {
  Mot_azi = angle[2];
  ValIncli = analogRead(Incli);
  ValOrient = analogRead (Orient);
  resul[2] = ValIncli;
  Serial.print(resul[2]);
}
if(Heure == heure[3]) {
  Mot_azi = angle[3];
  ValIncli = analogRead(Incli);
  ValOrient = analogRead (Orient);
  resul[3] = ValIncli;
  Serial.print(resul[3]);
  
}
...
for(int i=1; i<100;i++){
    heure[i] = 0;
    angle[i] = 0;
    resul[i];
  }
...

A quoi sert cette boucle ?

Heure est valorisée à 0 lorsque l'on appuie sur le bouton, mais comment Heure change de valeur ?

Bonjour - Non pas mieux du tout.. (@bigben - il y a pire que ne servir rien, Le tableau heure par exemple n'a que 4 entrées, commence à 0 pas à 1,...)

Il faut prendre le temps - posément - de lire toute la base du langage et de l'Arduino et comment on discute avec un MPU

Allez passer quelques heures sur les tutos d'eskimon et revenez ensuite - vous verrez toutes les "bêtises" que vous avez réussi à caser en si peu de lignes...

(C'est pas méchant, juste factuel - donnez vous les bases pour réussir)

A vrai dire, je ne sais pas trop à quoi sert cette boucle, mon prof de si m'a un peu aidé et l'a mise. Le problème est que je n'ai plus le temps de lire ces tutos (je sais que je m'y suis pris un peu tard ce n'est pas la peine de rabacher). Le fait est que ne sachant pas comment lire des valeurs d'un tableau sur arduino, nous essayons de tester le programme avec seulement 4 valeurs d'heure qui correspondent à 4 valeurs d'angle seulement.

Bonsoir

Vous avez encore perdu une journée - ça sert rien d'essayer des trucs au hasard si vous n'y comprenez rien... c'est comme si vous essayez de faire des phrases en chinois ou japonais en essayant de mettre des traits dans tous les sens.. Le code ça a des mots, une syntaxe, une grammaire. . ça s'apprend

Donc Oui c'est tard et c'est votre faute - donc prenez votre courage à 2 mains et passez les prochaines nuits dormir une ou deux heures et faites les tutos et Le cours de base... Le temps ça se trouve et c'est affaire de priorité. Si. Ce n'est pas prioritaire pour vous pourquoi voulez vous que ça Le soit pour nous?

Quand votre prof vous montre un truc comme cela

...
for(int i=0; i<100;i++){
    heure[i] = 0;
}

cest une boucle qui range dans un tableau de taille (au moins 100) la valeur 0 dans chaque case du tableau

Je ne comprends pas votre obsession à vouloir à tout prix que j'apprenne tout le langage Arduino en si peu de temps. Je sais que c'est de ma faute, vous me le répétez à chaque post que vous envoyez. Je pense que j'aurais largement le temps d'apprendre ce langage après la remise de mon dossier. Du temps ? Vous connaissez Arduino, cela vous prendrait maximum 5 minutes pour m'aider et au lieu de ça vous vous acharnez continuellement à me dire de me débrouiller. Sans "être méchant" selon vos propres termes, la seule chose que vous dites depuis 2 jours est que le programme est faux et que je dois me débrouiller. Si je savais comment faire croyiez vous vraiment que je serais venu demander de l'aide sur ce forum ? Si vous ne voulez pas m'aider ne m'aidez pas c'est tout. Bonne soirée.

Ce n'est pas une obsession - je vous le dis comme je le pense, vous allez droit à l'échec si vous ne maîtrisez pas quelques bases.

Comme dit ci dessus - votre prof vous a montré comment ranger une valeur dans un tableau à l'indice i qui varie entre 0 et 99 (dans mon exemple) et apparement dans votre premier programme vous avez utilisé digitalRead et analogRead donc vous savez lire l'état d'une pin.

Votre problème n'est pas la votre problème sera l'intégralité du code pour votre projet et ça sans les bases...

Bonjour,
+1

Oui, cela nous prendra 5 minutes car nous avons précédemment pris le temps d'apprendre les bases. L'objectif de l'enseignement ce n'est pas de vous faire rendre des projets réalisés par d'autres mais de vous apprendre à apprendre !

Si nous faisons ce projet pour vous, vous n'aurez rien appris (sauf peut-être que la prochaine fois il faudra vous y prendre plus tôt, et encore...).

Donc comme indiqué ci-dessus, commencez par le début et faite au mieux avec le temps qu'il vous reste. Votre projet ne sera peut-être pas terminé (il faut assumer votre choix de ne pas avoir commencé au plus tôt) mais au moins vous aurez réussi sur 2 points :

  • Vous aurez réellement appris quelque chose
  • Ce que vous rendrez sera le fruit de votre travail

PS : si la seule connaissance qui vous manque, c'est la gestion d'un tableau, l'apprentissage de cette notion ne devrait pas vous prendre plus de quelques heures.