Générateur d'impulsion

Bonjour,

je suis en train de travailler sur un générateur d’impulsion,mon objectif est de pouvoir modifier l’intensité de la LED a l’aide d’un potentiomètre, et d’afficher une valeur proportionnelle a la luminosité sur l’écran LCD,

Dans le code qui suit, j’ai bien ma LED qui est plus ou moins lumineuse, mais j’ai plein de caractère illisible sur l’écran LCD qui varient, il s’affiche vraiment n’importe quoi

Ensuite, sur l’avant dernière ligne, si je change analogWrite par digitalWrite, je n’ai plus de problème avec l’écran LCD, il y a écran “Ampère” sur la première ligne, et une valeur qui se modifie avec la position du potentiomètre. Mais la LED s’éclaire a partir d’une valeur, il n’y a plus la variation de luminosité.

voici le schéma de cablage

Uploaded with ImageShack.us

Voici le code :

/*
  Affichage de l'ampérage sur ecran LCD
*/

// Inclure la librairie LiquidCrystal
#include <LiquidCrystal.h>

// Initialisation de la librairie Liquid Crystal
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int sensorPin = A0;        // Selection de l'entrée analogique pour le potentiomètre de réglage
int index=0 ;               // index du tableau pour s'y retrouver
int i=0;                      // variable de boucle
int j=0;                      // variable de boucle transistor
float ampere;              // valeur pour stocker la valeur du potentiomètre 


void setup() {              

// Configuration de l'afficheur 16 caractères en 2 lignes 
  lcd.begin(16, 2);            // Ecriture de la ligne 1
  lcd.print("Amperes :");    // Affichage ligne 1 : Ampères
  pinMode(6, OUTPUT);     // met la broche en sortie 
}

void loop() {
  
  // ***** Affichage Ecran *****
  // positionnement du curseur en ligne 2 1ere position ( on part de zéro)
  lcd.setCursor(0, 1);

  //acquisition de la valeur analogique dans sensorValue (de 0 à 1023)
  float sensorValue = analogRead(sensorPin); 
   
  //insertion de l'ampérage dans le tableau
  ampere =sensorValue*160/1023;

  // Affichage de l'ampérage
  lcd.print(ampere);
  
  // ***** Impulsion LED *****
 // génère une impulsion sur la broche de largeur i = la luminosité augmente
  analogWrite(6,sensorValue*255/1023);
}

Avez vous une idée pour résoudre mon problème,

Merci

Arnaud

Bonjour,

Ajoute un delay(100); en fin de loop() pour voir ce que ça donne. Sinon vérifie ton câblage, caractères chinois / bizarre = (très souvent) mauvais câblage.

Il manque une résistance sur la led aussi (pas forcement un rapport avec le problème cependant). Mais comme ça peut être un problème de masse ... Ce qui a le bon goût d'expliquer les caractères bizarres car la transmission serait perturbée par une masse instable.

Merci pour vos réponse,

je viens d'ajouter une résistance, cela fonctionne correctement,

j'ai juste un dernier soucis sur la valeur que affiche l'écran

lorsque j'initialise mon Arduino, et que le potentiomètre est en valeur mini, il affiche : 0.00 ensuite je le tourne jusqu’à la valeur maxi, il affiche : 160.00 si je reviens a la valeur mini, il m'affiche 0.00XX , ( ou XX est une valeur qui dépend d'une valeur calculé précédemment )

j'ai essayé la fonction pour arrondi la valeur :

lcd.print(ampere,2);

mais j'ai toujours mon problème,

quelqu'un a t il une idée?

Merci beaucoup

Arnaud

lcd.print(int(ampere));

A moins que tu ais besoin des .xx

Merci B@tto

les valeurs décimales ne me sont pas utile,

mais avec ton code,j'ai quand même un soucis

j'initialise l'Arduino, et que le potentiomètre est en valeur mini, il affiche : 0 ensuite je le tourne jusqu’à la valeur maxi, il affiche : 160 si je reviens a la valeur mini, il m'affiche 000 et si je tourne un peut, ça m'affiche, 100 puis 200 puis 300... au lieu de 1,2,3...

je ne pige pas comment ne pas a voir les 2 derniers valeur quand je n'ai que des unités

lcd.setCursor(0, 1);
lcd.print("                ");
lcd.setCursor(0, 1);
lcd.print(int(ampere));

Ou un simple lcd.clear() avant le print()