Capteur de luminosité

Bonjour, je voudrais savoir comment je pourrais régler la luminosité avec seulement cette partie du code. Je doit faire en sorte que plus la lumiere tape fort plus la led doit s'éclairer et inversement. Les leds sont sur un afficheur matriciel. Merci d'avance

  analogWrite(PWM_TXT1, 240); // Réglage de la luminisité

Bonjour,

réponse claire: avec seulement cette partie de code tu ne peux pas.
Si tu veux faire varier l’intensité en fonction de la lumière ambiante, il te faut la mesurer (LDR, photodiode, phototransistor…).

Je vous ai mis le programme complet.
Mais je ne comprend pas comment faire juste avec une ligne le prof ma dit que je devais créer une variable mais je c’est pas comment :confused:

const char ON_OFF=7;
const char CMD_AMBRE=6;
const char CMD_ROUGE=5;
const char CLK=13;
const char LE=12;
const char SDI=11;
const char PWM_TXT1=9;
const char PWM_TXT2=10;

const char P[24]={0x30,0X48,0x48,0x48,0x7F,0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x40,0x40,0x7F,0x40,0x40,0x00,0x26,0x49,0x49,0x49,0x32,0x00};
 
 
void setup() {
   //initialisation des sorties
  pinMode(ON_OFF, OUTPUT);
  pinMode(CMD_ROUGE, OUTPUT);
  pinMode(CMD_AMBRE, OUTPUT);
  pinMode(CLK, OUTPUT);
  pinMode(LE, OUTPUT);
  pinMode(SDI, OUTPUT);
  pinMode(PWM_TXT1, OUTPUT);
  pinMode(PWM_TXT2, OUTPUT);
  digitalWrite(ON_OFF, LOW);
  digitalWrite(CMD_ROUGE, LOW);
  digitalWrite(CMD_AMBRE, HIGH);
  digitalWrite(CLK, LOW);
  digitalWrite(SDI, LOW);
  digitalWrite(LE, LOW);
  analogWrite(PWM_TXT1, 240);// Réglage de la luminisité
  analogWrite(PWM_TXT2, 240);
  
  Serial.begin(9600);

  
  delay(500);
  }

void loop() {
  char Test,i,j;

  for(i=0;i<24;i++){
    for(j=0;j<8;j++) {
      Test=(P[i]>>(7-j))&0x01;
       if (Test==0x01) 
      digitalWrite(SDI,HIGH);
    else  
      digitalWrite(SDI,LOW); 
    digitalWrite(CLK,HIGH);
    digitalWrite(CLK,LOW);
    }
  }
  digitalWrite(LE,HIGH);
  digitalWrite(LE,LOW);
  while(1);
}

Si vraiment tu veux mesurer l'intensité en fonction de la lumière ambiante, avant de créer ta variable, il faut d'abord mesurer la lumière et je ne vois aucune mesure de lumière dans ton code.

Bah de mon coter j'ai fait un programme avec une ldr et une led qui marche mais je ne sait pas comment la mettre dans cette unique ligne voici mon programme :

int photocellPin = 0;     // the cell and 10K pulldown are connected to a0
int photocellReading;     // the analog reading from the sensor divider
int LEDpin = 11;          // connect Red LED to pin 11 (PWM pin)
int LEDbrightness;        // 
void setup(void) {
  // We'll send debugging information via the Serial monitor
  Serial.begin(9600);   
}

void loop(void) {
  photocellReading = analogRead(photocellPin);  

  Serial.print("Analog reading = ");
  Serial.println(photocellReading);     // the raw analog reading

  // LED gets brighter the darker it is at the sensor
  // that means we have to -invert- the reading from 0-1023 back to 1023-0
  photocellReading = 1023 - photocellReading;
  //now we have to map 0-1023 to 0-255 since thats the range analogWrite uses
  LEDbrightness = map(photocellReading, 0, 100, 0, 255);
  analogWrite(LEDpin, LEDbrightness);

  delay(100);
}

Il faut que tu fasses la même chose dans ton programme.

ce programme me permet de lire la luminosité mais je ne vois toujours pas comment l’intégrer en une seule variable.

int photocellPin = 0; // the cell and 10K pulldown are connected to a0
int photocellReading; // the analog reading from the analog resistor divider

void setup(void) {
  // We'll send debugging information via the Serial monitor
  Serial.begin(9600);
}

void loop(void) {
  photocellReading = analogRead(photocellPin);
  Serial.print("Analog reading = ");
  Serial.print(photocellReading); // the raw analog reading
  // We'll have a few threshholds, qualitatively determined
  if (photocellReading < 10) {
    Serial.println(" - Noir");
  } else if (photocellReading < 200) {
    Serial.println(" - Sombre");
  } else if (photocellReading < 500) {
    Serial.println(" - Lumiere");
  } else if (photocellReading < 800) {
    Serial.println(" - Lumineux");
  } else {
    Serial.println(" - Tres lumineux");
  }
  delay(5000);
}

C'est quoi l'intégrer en une seule variable ? Dans ton programme précédent tu as une variable LEDbrightness qui est la variable de commande des leds.

En résumé tu n'as encore écrit aucun code et tu cherches seulement à assembler deux programmes trouvés tout fait dont tu n'as pas compris le fonctionnement. Désolé mais ce n'est pas le meilleur moyen pour y arriver.

J'ai une méthode de vieux (que je suis) : avec des codes sources aussi courts je traduis les noms de variables en français [u]en choisissant un nom bien approprié.[/u] En faisant cela tu t'obliges à comprendre pourquoi l'auteur à choisi tel nom et tu t'obliges à comprendre la fonction. Idem pour les commentaires. Quand on lit on croit comprendre, quand il faut écrire on se rend très souvent compte qu'en réalité ce n'était qu'une impression et qu'on a rien compris.

A mon avis si tu fais cela tu finira par comprendre qu'il te faut fixer une limite haute et basse de luminosité. A chaque limite de luminosité correspondra une valeur min et max pour analogWrite(pin, valeur) et que pour une mesure de luminosité entre le min et le max il faut faire une règle de trois. J'espère que la règle de 3 est encore au programme du bac.

Bah en gros je doit pouvoir faire varier la luminosité d'un afficheur matriciel le 1er long programme que je vous ai envoyer et le programme de l'afficheur, je viens d'apprendre que je doit en faite juste inclure la lecture de la photorésistance pour qu"elle puisse agir sur l'afficheur mais mon profs veut absolument que j'utilise la fameuse première ligne que je vous ai envoyer. J'espère que cela va vous aider a comprendre ma situation.

Merci 68tjs je vais essayer votre méthode

J'espère que cela va vous aider a comprendre ma situation.

Ne te trompes pas : on va te mettre sur la voie pour ce soit TOI qui trouve les solutions. Nous le bac on l'a déjà passé.