Opérations Mathématiques... [Résolu]

Bonsoir à tous ! :grin:

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:

/*
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:

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

Voici l'erreur retournée:

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 !

Bonjour,

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() ??

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

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

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

En effet... Foutus crochets ! Ça m'apprendra :%

Merci ! Affaire résolue

^^

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

ok ! merci encore !