Go Down

Topic: Programme simple qui fonctionne pas HELP ME PLEASE (Read 1 time) previous topic - next topic

J-M-L

qu'est-ce qui ne marche pas ? vous affichez plein de valeurs donc vous devez avoir une idée de ce qu'il se passe (ou pas)
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

JP33

J'ai fait une erreur dans le code, voilà le programme correct mais qui ne fonctionne pas.
Ce qui ne fonctionne pas c'est le fait que je choisi une certaine luminosité avec le potentiométre, et je souhaiterais qu'elle soit respecter (que la luminosité de la LED et de l'extérieur respecte le seuil fixer par le potentiométre).
Je récupère la luminosité réelle par la photorésistance, la valeur de mon potentiométre, et de mon bouton marche arrêt.
L'idée c'est que si la luminosité naturelle augmentent je baisse automatiquement l'intensité de la DEL et inversement.
C'est ca qui ne fonctionne pas ...


Code: [Select]
const int onOffSwitchPin = 7;
int onOffSwitchState = 0;
const int LED = 6; //sortit PWM
const int tempPin = A4;
const int potPin = A0;
const int luminositeSensorPin = A1;
int potVal;
float limitTemp = 30.00;

//int onOffSwitchState = 0;
int LEDOn = 0;
int temperature;
int luminositeVal = 0;
int potVal2;

void setup() {
  Serial.begin(115200);
  pinMode(tempPin, INPUT);
  pinMode(potPin, INPUT);
  pinMode(onOffSwitchPin, INPUT);
  pinMode(LED, OUTPUT);
  // put your setup code here, to run once:

}

void loop() {
  potVal = analogRead(potPin) / 16;
  int sensorVal = analogRead(tempPin);
  float voltage = (sensorVal / 1024.0) * 5.0;
  float temperature = (voltage - 0.5) * 100;
  potVal2 = analogRead(potPin) / 16;
  luminositeVal = analogRead(luminositeSensorPin) / 16; Serial.print(F("Valeur sensor :   ")); Serial.println(luminositeVal);
  if (digitalRead(onOffSwitchPin)) {
    onOffSwitchState = 1;
    Serial.print(F(" onOffSwitchState =")); Serial.println( onOffSwitchState );
  }

  else {
    onOffSwitchState = 0;
    Serial.print(F(" onOffSwitchState =")); Serial.println( onOffSwitchState );
  }

  delay(1500);

  if (onOffSwitchState == 1) {
    Serial.print(F("  if..........onOffSwitchState =")); Serial.println( onOffSwitchState );
    if (temperature <= limitTemp) {
      Serial.print(F(" if.......temperature <= limitTemp =")); Serial.println( temperature );
      LEDOn = 1; Serial.print(F(" LEDOn =")); Serial.println( LEDOn );
    }
  }
  else {
    LEDOn = 0; Serial.print(F(" LEDOn =")); Serial.println( LEDOn );
  }

  if (LEDOn == 1) {
    Serial.print(F(" if..........LEDOn =  1  ")); Serial.println( LEDOn );
    analogWrite(LED, potVal); Serial.print(F(" LED =    ")); Serial.println(potVal );
  }
  else {
    analogWrite(LED, LOW); Serial.print(F(" LED =    ")); Serial.println(LOW );
  }
  if (luminositeVal < potVal) {
    potVal2 + 1; Serial.print(F("Valeur PotVal2   ")); Serial.println(potVal2 );
  }
  else if (luminositeVal > potVal) {
    potVal2 - 1; Serial.print(F("Valeur PotVal2   ")); Serial.println(potVal2 );
  }
  else if (luminositeVal == potVal) {
    potVal2 + 0; Serial.print(F("Valeur PotVal2   ")); Serial.println(potVal2 );
  }


}

J-M-L

les bouts de code en rouge sont supposés faire quoi? un petit calcul comme cela, pour faire beau? vous ne stockez le résultat de l'addition nulle part...

if (luminositeVal < potVal) {
    potVal2 + 1; Serial.print(F("Valeur PotVal2   ")); Serial.println(potVal2 );
  }
  else if (luminositeVal > potVal) {
    potVal2 - 1; Serial.print(F("Valeur PotVal2   ")); Serial.println(potVal2 );
  }
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

JP33

et bien je pense que c'est cela qui ne fonctionne pas ...
Comment puis-je faire ?

J-M-L

ben je ne sais pas ce que vous voulez faire... pourquoi + ou - 1 ? c'est pas la valeur du potentiomètre qui est intéressante ?

je crois qu'il faut redéfinir un peu votre cahier des charges:

- un bouton qui permet d'allumer ou éteindre la "lampe" (LED)
- une photorésistance qui pilote la valeur de l'éclairage: plus il fait jour, moins la lampe brille quand elle est allumée
- un potentiomètre qui définit la valeur maximum de la luminosité de la "lampe"

est-ce bien cela?



Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

JP33

c'est presque cela, sauf le potentiomètre qui permet de choisir la luminosité maxi de la LED,  ( par exemple si je mets une luminosité 35 sur 63, dés que la luminosité naturelle passe en dessous dessous de ce seuil la LED se verra compenser ce manque)
Le +/-1 ser a augmenter le PWM par "palier", s'il ya une autre méthode n'hésitez pas a me la transmetre ca m'interresse !

J-M-L

pas compris à quoi sert le potentiomètre - comment voulez vous distinguer la "luminosité naturelle" versus la "luminosité totale" (naturelle + éclairage de votre LED) puisque dès que vous allumez la LED vous changez ce que va percevoir votre résistance (à moins qu'elle ne soit planquée dans un coin pas éclairé par la LED ?)



Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

JP33

J'aimerais limiter la luminosité de la LED pour que arrivé le soir je puisse garder automatiquement la même luminosité sélectionner avec le potentiométre

J-M-L

la photo-résistance reçoit elle à la fois la luminosité ambiante + l'éclairage de la led ?
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

dfgh

hello
voici un prg qui devrait tourner mais peut être pas faire ce que tu veux.
il sera une base de discussion

Code: [Select]

const int onOffSwitchPin = 7;
int onOffSwitchState = 0;
const int LED = 6; //sortit PWM
const int tempPin = A4;
const int potPin = A0;
const int Ldr_Pin = A1;
int potVal;
float limitTemp = 30.00;
int k = 100;
//int onOffSwitchState = 0;
int LEDOn = 0;
float temperature;
int luminositeVal = 0;
//int luminosite;
float consigne_luminosite = 0; //par defaut, mais changera dès la 1ere lecture de la Ldr
void setup() {
  Serial.begin(115200);
  pinMode(tempPin, INPUT);
  pinMode(potPin, INPUT);
  pinMode(onOffSwitchPin, INPUT);
  pinMode(LED, OUTPUT);
  // put your setup code here, to run once:
//lecture du potar de seuil de luminosité désirée
  potVal = analogRead(potPin) / 16;Serial.print(F("Valeur potard_consigne :   ")); Serial.println(potVal);
}

void loop() {
  //relevé de la température
  int sensorVal = analogRead(tempPin);
  float voltage = (sensorVal / 1024.0) * 5.0;
 temperature = (voltage - 0.5) * 100;
 
  //si l'inter est à 1, on mémorise la demande d'allumage de la led par l'inter
  if (digitalRead(onOffSwitchPin)) {onOffSwitchState = 1;}
  else {onOffSwitchState = 0;}
  delay(1500);
 
  //pour test onOffSwitchState = 1;temperature=25;//**************************************************
  //si l'allumage de la led est demandé par l'inter et si la température est < limitTemperature, on memorise la demande d'allumage la lampe
  if ((onOffSwitchState == 1) && (temperature <= limitTemp)){LEDOn = 1;}
  else {LEDOn = 0; }
 
  //relevé de la luminosité
  luminositeVal = analogRead(Ldr_Pin) / 16; Serial.print(F("Valeur Ldr :   ")); Serial.println(luminositeVal);
 
  //pour test luminositeVal=35;Serial.print(F("Valeur Ldr :   ")); Serial.println(luminositeVal);//********************************************************
 
    //si capteur ldr > valeur potar seuil
    //((potVal+K)-luminositeVal)==> plus luminosite val grandit, et plus on enleve à potVal+k.  k etant une constante permettant la soustraction
   
   if (luminositeVal > potVal) {
    consigne_luminosite = ((potVal + k)-luminositeVal); Serial.print(F("Valeur consigne_luminosite   ")); Serial.println(consigne_luminosite );}
  else {consigne_luminosite = luminositeVal;}
//si l'allumage de la led est demandé et autorisé par le seuil de température, on allume la led à luminosité calculée
  if (LEDOn == 1) {analogWrite(LED,consigne_luminosite); Serial.print(F(" LED =    ")); Serial.println(consigne_luminosite );}
  else {analogWrite(LED, LOW);}
}

Go Up