Go Down

Topic: Bac-Ka-Poux-Bêle 2019-2020 (Read 31203 times) previous topic - next topic

Osmeru

Bonjour,

Dans le cadre d un project educatif je dois utiliser un gyroscope.
J utilise le itg 32000.

Une fois un programme simple pour lire les angles en X et Y
Mes valeurs augmentent d environ 2 a 2 sans que je ne touche a quoi que ce soit.

Si vous avez la solution merci de m éclairer.

Tomtom974

Bonjour je suis en première SI j'aimerai que vous m'indiquiez si mon programme comporte des erreurs svp.
C'est un programme de suiveur solaire
#include <Servo.h>
const int entreeCapteur = 0;
int valeurcapteur;

float tension;
float val1;
float val2;

Servo myservo;
int pos = 0;

void setup() {
 monServo.attach(9);
 Serial.begin(9600);
}

void loop() {
valeurcapteur = analogRead(entreeCapteur);
tension = valeurcapteur * 5.0 / 1023;// convertit la valeur analogique en volt
Serial.print("valeurcapteur = ");
Serial.println(valeurcapteur);
Serial.print("tension = ");
Serial.println(tension);
Serial.println(" V");
val1 = tension;

if(val2 = 0)
{
myservo.write(pos +30);//servo se déplace de 30°
val2 = tension;
}

while(val2 > val1); //tant que val2 > val 1 faire
{
  val1 = val2;
  myservo.write(pos +30);
  Val2 = tension;
} else{
  myservo.write(pos -30);
  delay(3600000);// 3,6E+6ms = 1HEURE
 }
}

dbrion06

JE vois deux horreurs
a) votre code n'a pas de balises (des bouts peuvent être mangés, d'une façon ou d'une autre)
b) val2 n'est pas toujours initialisée avent d'être testée...

funkTLS

b) val2 n'est pas toujours initialisée avent d'être testée...
faux :smiley-roll:

if(val2 = 0)

dbrion06

C'est encore plus horrible que je ne le craignais...

pw8888

Bonjour,
Je suis a la recherche d un etudiant ou programmeur qui pourrais m aider a ecrire un programme simple sur aduino (manque de temps de ma part)
Est ce le bon fourum ou le bon endroit pour poster ma demande ?

merci à tous de votre retour...
P

lesept

A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

jfs

ça, ça sent le projet d'étudiant qui est en retard et qui panique..... bacapoubel
Pas d'aide par MP !!!

Concernant le fonctionnement du forum tout se trouve dans les messages épinglés en tête de page.

victorberson94

#98
Mar 27, 2019, 05:23 pm Last Edit: Mar 28, 2019, 08:32 pm by victorberson94
Bonjour,

Dans le cadre de mon cursus scolaire, je dois faire un jeu en arduino.
Voici le jeu que j'ai choisi : plusieurs équations s'affichent sur un panneau de led (32*16). Quand l'équation est correcte, le premier joueur a avoir appuyé sur son bouton gagne, si l'équation est fausse, le joueur qui a appuyé perd. Si personne n'appuie, au bout de quelques secondes, l'équation suivante apparait

J'ai essayé de faire un code qui réalise ce jeu mais ca ne marche pas et je ne comprend pas pourquoi (bien que je pense que l'erreur vienne du millis)

Avant de vous montrer le code, je vous explique les quelques fonctions qu'il utilise:
afficherEquation() affiche une equation sur le panneau de LED
afficherChiffre(x,-1) : désactives les led a l'emlacement x

Code: [Select]

int jeuEquation()             //fonction du jeu Equation
{
 int s1 = 0, s2 = 0, t, r;      
 while(!s1 && !s2)             //tant que aucun des boutons n'est appuyé. Si 1/2 est appuyé, on sort du while
 {
   t=random(0,14);                                             //choix random de l'equation (parmis les 15)
   afficherEquation(EQ[t][0],EQ[t][1],EQ[t][2],EQ[t][3]);      //affichage de l'equation t
   unsigned long temps = millis();
   r=random(3,10);       //on attend un temps random (entre 1 seconde et 4s) pour afficher l'équation suivante
   while(millis()-temps < 400*r)
   {
   s1=digitalRead(J1);                                         //on lit le bouton J1              
   s2=digitalRead(J2);                                         //on lit le bouton J1
   }
   //on desactive toutes les led
   afficherChiffre(1,-1);
   afficherChiffre(2,-1);
   afficherChiffre(3,-1);
   afficherChiffre(4,-1);
   afficherChiffre(5,-1);
   afficherChiffre(6,-1);
   afficherSigne(-1);
 }
 if(s1 && !s2)                                         //si c'est le joueur 1 qui a appuyé
 {
   if(EQ[t][4])                                //on verifie si l'équation etait vraie
   {
     return 1;
     Serial.println("J1 gagne");
     
   }
   else
   {
     return 2;
     Serial.println("J2 gagne");
   }
 }
 else if(!s1 && !s2)
 {
   if(EQ[t][4])
   {
     return 2;
     Serial.println("J2 gagne");
   }
   else
   {
     return 1;
     Serial.println("J1 gagne");
   }
 }
}



Merci d'avance

BlackAndWhite

Bonjour a tous,
Je suis en terminale sti2d et j'ai un projet de fin d'année qui consiste à faire un bureau (la salle entière) connecté et sécurisé.
Ma partie consiste a faire un programme avec: un capteur infrarouge PIR, un buzzer, une caméra et des petites leds rouge et verte.
Le but de ce programme est que quand le PIR détecte un mouvement, la led rouge s'allume, le buzzer fonctionne et que la caméra s'allume elle aussi; et que quand il ne se passe rien, la led verte reste tout le temps allumé.
J'ai donc fait un programme sur Arduino, il est certainement faux mais je voudrais savoir ce que vous en pensiez pour corriger les erreurs.
le voici:
PS: j'ai pas réussi a mettre la photo xD et merci d'avoir pris de votre temps

                              //PROGRAMME CAPTEUR PIR ET CAMERA
//**************************************************************************************
int inputPin=6; //definition du capteur sur la pin 6 de l'arduino
int pirState=LOW;
int val=0;
#define ledrouge 5 //definition de la led rouge sur la pin 5 de l'arduino
#define ledverte 4 //definition de la led verte sur la pin 4 de l'arduino
#define camera 3 //definition de la caméra sur la pin 3 de l'arduino
int buzzer=A2;
void setup()
{
pinMode(inputPin, INPUT);
pinMode(ledrouge, OUTPUT);
pinMode(ledverte, OUTPUT);
pinMode(buzzer,OUTPUT);
Serial.begin(9600);
}

void loop()
{
  val= digitalRead(inputPin);     // ON LIT LA VALEUR
if(val ==HIGH)      //SI LA VALEUR EST HAUTE
{
  Serial.println("mouvement detecte");
  digitalWrite(ledrouge,HIGH);     //ALLUMER LED ROUGE
  digitalWrite(ledverte,LOW);    //ETEINDRE LED VERTE
  digitalWrite(camera,HIGH);    //ALLUMER LA CAMERA          ******
  delay(600000);//PENDANT 10 MINUTES OU 15 MINUTES
  tone(buzzer,1000);    //FAIRE SONNER LE BUZZER
  delay(5000);     //SONNER SUR 5 SECONDES
  noTone(buzzer);   //ARRETER LE BUZZER
  delay(1000);    //PENDANT 1 SECONDE
 
}



icare

Bonjour,
Il faut mettre le code entre balise code voir les règles épinglées.
Attention : l'instruction delay est bloquante, ce n'est peut être pas ce que tu cherches à faire.
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

BBartas

Bonjour à vous,

Je cherche actuellement un peu d'aide pour mon projet de terminale SI, nous devons construire une voiture RC qui soit capable de suivre les lignes ( blanches ) d'un terrain d'athlétisme. Ma tache consiste à mettre en oeuvre l'interface permettant la transmission des données.

Le problème est le suivant, je dois faire communiquer un application smartphone avec notre voiture RC, pour ceci nous avons choisit de transmettre les données par WIFI, pour avoir une portée de 130 m, je cherchais donc un moyen de faire communiquer mon téléphone et l'arduino de notre voiture RC. J'ai vu plusieurs solution mais aucune vraiment adaptée à notre problème, si quelqu'un sait comment je pourrais faire j'apprécierais vraiment.

Merci de votre temps, et de vos futures réponses.

icare

2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

lesept

Bonjour
D'abord, il faut que tu demandes au modo de déplacer ton topic, qui est dans la section des projets terminés : il doit être dans la section principale --> utilise le bouton "report to moderator" situé sous ton message.

Ensuite, lis les messages épinglés en haut du forum Français, tu y verras des instructions qui, si tu les suis, nous aideront à t'aider. Par exemple, quelle carte Arduino utilises-tu, quel(s) shield(s) ?

Enfin, tu peux chercher sur Internet ou sur le forum (la loupe en haut à droite cherche sur le forum uniquement) avec des mots clés comme 'arduino wifi smartphone' tu trouveras des discussions qui te mettront sur la voie. Un exemple de site qui en parle ici, une autre solution consiste à utiliser Blynk ou des solutions similaires
A force d'essayer on finit par réussir... Donc, plus ça rate, plus on a de chances que ça marche (proverbe Sharduinok).

Zazu51

Bonjour à tous, je reviens vers vous concernant le projet de Terminale en SI.

En gros, je cherche a obtenir la pression et à l'afficher dans la console. Dans mon code complet, cela ne fonctionne pas, mais en isolant le programme de pression, il marche correctement. Je cherche donc la source de problème mais je ne trouve pas, je demande alors votre aide si vous pouvez le problème.
Bonne journée
Code: [Select]


/*
 *
 */
 #include <SPI.h>
#include <SD.h>
/* accelerometerADXL
 * X to A0
 * Y to A1
 * Z to A2
 * AREF to 3.3
*/
/*
 * MPX4115AP
 * Analaog to A3
 * MPX4115A
 * to A4
 *
 * SD
 * MOSI 11
 * MISO 12
 * SCK 13
 * CS 4
 */
 const int xInput = A0;
const int yInput = A1;
const int zInput = A2;
float pression = A5;
const int chipSelect = 4;


// Raw Ranges:
// initialize to mid-range and allow calibration to
// find the minimum and maximum for each axis   X: 491-528, Y: 489-529, Z: 493-532

int xRawMin = 491;
int xRawMax = 528;

int yRawMin = 489;
int yRawMax = 529;

int zRawMin = 493;
int zRawMax = 532;

// Take multiple samples to reduce noise
const int sampleSize = 10;

 int pinBouton;
int measurePre = A3;
const int relais = 3;
const int ledR = 1;
const int ledV = 2;
unsigned long previousMillisAcc = 0;
const long intervalAcc = 500;
unsigned long previousMillisParra = 0;
const long intervalParra = 10000;
  unsigned long currentMillisParra = millis();
  File fusee;

void setup()
{
      pinBouton=6;
    pinMode(pinBouton,INPUT);
  pinMode(relais, OUTPUT);
  pinMode(ledR, OUTPUT);
  pinMode(ledV, OUTPUT);
  Serial.begin(9600);
  digitalWrite(relais, HIGH);
    analogReference(EXTERNAL);
  Serial.begin(9600);
    // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  Serial.print("Initializing SD card...");

  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
  }
  Serial.println("card initialized.");
    fusee = SD.open("donnees.txt", FILE_WRITE); //on peut en ouvrir qu'un à la fois //

  if (fusee) { //si le fichier a bien été ouvert :
    fusee.print("X    ,Y    ,Z    , ");
    fusee.println("PressionStat    ,PressionTot");
    fusee.close();
    Serial.println("Fait");
  } else { // sinon :
    Serial.println("Erreur lors de l'ouverture de test.txt");
}
}
void donne()
{
    int xRaw = ReadAxis(xInput); //lecture donnée accéléromètre
  int yRaw = ReadAxis(yInput);
  int zRaw = ReadAxis(zInput);
  {
    Serial.print("Raw Ranges: X: ");
    Serial.print(xRawMin);
    Serial.print("-");
    Serial.print(xRawMax);
   
    Serial.print(", Y: ");
    Serial.print(yRawMin);
    Serial.print("-");
    Serial.print(yRawMax);
   
    Serial.print(", Z: ");
    Serial.print(zRawMin);
    Serial.print("-");
    Serial.print(zRawMax);
    Serial.println();
    Serial.print(xRaw);
    Serial.print(", ");
    Serial.print(yRaw);
    Serial.print(", ");
    Serial.print(zRaw);
   
    // Convert raw values to 'milli-Gs"
    long xScaled = map(xRaw, xRawMin, xRawMax, -1000, 1000);
    long yScaled = map(yRaw, yRawMin, yRawMax, -1000, 1000);
    long zScaled = map(zRaw, zRawMin, zRawMax, -1000, 1000);
 
    // re-scale to fractional Gs
    float xAccel = xScaled / 1000.0;
    float yAccel = yScaled / 1000.0;
    float zAccel = zScaled / 1000.0;
 
 
    Serial.print(" :: "); // affichage donnée accéléromètre
    Serial.print(xAccel);
    Serial.print("G, ");
    Serial.print(yAccel);
    Serial.print("G, ");
    Serial.print(zAccel);
    Serial.println("G");
   
   
  delay(500);
  }
}
int ReadAxis(int axisPin)
{
  long reading = 0;
  analogRead(axisPin);
  delay(1);
  for (int i = 0; i < sampleSize; i++)
  {
    reading += analogRead(axisPin);
  }
  return reading/sampleSize;
}

void parachuteSecours() // timer de déploiment en cas de non fonctionnement du déclenchement auto
{

//EN COURS

  }
 

void pressiond()
{ //lecture pression
Serial.println(analogRead(pression));
}
void loop()
{
  donne();
  Serial.println(analogRead(pression));

  boolean etatBouton=digitalRead(pinBouton); //debut timer parachute
  if (etatBouton == 0)
  {
     parachuteSecours();
     
  }

}
,

Go Up