Pages: [1]   Go Down
Author Topic: Opérations Mathématiques... [Résolu]  (Read 650 times)
0 Members and 1 Guest are viewing this topic.
france
Offline Offline
Full Member
***
Karma: 0
Posts: 178
Everybody can do that !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonsoir à tous !  smiley-mr-green

Etant sur un nouveau projet et bloquant sur des problèmes de calculs mathématiques dans l'arduino,
je sollicite avec plaisir votre aide !

Tout d'abord voici mon programme:

Code:
/*
PPE 2011-2012
Projet Fenêtre

Sous-Programme Double Seuil
Version: 1.0

Auteur: Jean-Baptiste

Test avec la commande d'une lumière à l'aide d'un relais et un capteur de lumiosité
 */

// Installation de la librairie de communication PC <=> Nano
#include <SPI.h>
#include <math.h>

// Configuration des Etats pour les Relais
int HAUT = LOW;
int BAS = HIGH;

// Valeurs des E/S
const int Lumiosite = A4;
const int Commande_Lumiere = 2;

// Valeurs des Etats
double Etat_Lumiosite = 0;
int etat_tempo_lumiere = 0;

// Variables autres
double tension_lumiosite = 0;
unsigned long temps = 0;
unsigned long tempo_lumiere = 0;

void setup() {
  
  // Initialisation connexion PC <=> Nano
 Serial.begin(9600);
 Serial.println("Demarrage de l'arduino");
 
 // Initialisation des E/S
 Serial.println("Initiation des E/S de l'arduino");
 pinMode(Lumiosite, INPUT);
 digitalWrite(Lumiosite,HIGH);
 pinMode(Commande_Lumiere, OUTPUT);
 digitalWrite(Commande_Lumiere, BAS);
 
 Serial.println("Initiation de l'arduino ok !");
 
}

void loop() {
  
  // Stockage du temps
  temps = millis();
  
  // Lecture des différentes valeures
  tension_lumiosite = analogRead (Lumiosite);
  Etat_Lumiosite = 7.5 - 26*log[(-457*tension_lumiosite-1858)/tension_lumiosite];
  
  // <300lux allumage marge de 100 lux
  if ( temps - tempo_lumiere >= 10000 && (etat_tempo_lumiere == 1 || etat_tempo_lumiere == 2)){
   etat_tempo_lumiere = 2;
  }
  
  else if (etat_tempo_lumiere == 0) {
    tempo_lumiere = temps;
  }
  
  if (Etat_Lumiosite < 300 ) {
    etat_tempo_lumiere = 1;
    if (etat_tempo_lumiere == 2) {
     digitalWrite(Commande_Lumiere, HAUT);
    }
  }
  
  else if (Etat_Lumiosite > 400) {
    etat_tempo_lumiere = 1;
    if (etat_tempo_lumiere == 2) {
      digitalWrite(Commande_Lumiere, BAS);
    }
  }
  
  else {
    etat_tempo_lumiere = 0;
  }
  
}

Il utilise le principe du double seuil pour les connaisseurs, cependant ce n'est qu'un premier jet.
Mais mon problème ne se situe pas là, c'est dans la compile...
Il n'a pas l'air d'accepter le stockage || le calcul de mes valeurs, soit cette ligne:

Code:
Etat_Lumiosite = 7.5 - 26*log[(-457*tension_lumiosite-1858)/tension_lumiosite];

Voici l'erreur retournée:
Code:
Sous_Programme_Double_Seuil.cpp: In function 'void loop()':
Sous_Programme_Double_Seuil:57: error: invalid types 'double ()(double)[double]' for array subscript

Une idée d'où provenir ce soucis ?
D'après ce que je vois, il refuse de la stocker et/ou de la calculer ?!

Merci d'avance à tous !

Bonne soirée !
« Last Edit: March 21, 2012, 04:10:27 pm by Jean & Jean-Baptiste » Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Code:
Etat_Lumiosite = 7.5 - 26*log[(-457*tension_lumiosite-1858)/tension_lumiosite];
log c'est bien la fonction logarithme on est d'accord ?

Alors pourquoi log[] et non log() ??

Code:
Etat_Lumiosite = 7.5 - 26*log((-457*tension_lumiosite-1858)/tension_lumiosite);
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

france
Offline Offline
Full Member
***
Karma: 0
Posts: 178
Everybody can do that !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

oui on parle bien du logarithme népérien et non du logarithme de base 10 smiley-wink

Sinon pour les crochets, ça ne revient pas au même ?
Logged

france
Offline Offline
Full Member
***
Karma: 0
Posts: 178
Everybody can do that !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En effet... Foutus crochets ! Ça m'apprendra  smiley-draw

Merci ! Affaire résolue
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

En effet... Foutus crochets ! Ça m'apprendra  smiley-draw
^^

En c/c++ : crochet = tableau, parenthèses = fonction
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

france
Offline Offline
Full Member
***
Karma: 0
Posts: 178
Everybody can do that !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok ! merci encore !
Logged

Pages: [1]   Go Up
Jump to: