Arduino nano pin digital a 2,1 Volt

Bonjour à tous, j'ai un problème avec un projet où je pense avoir identifié le problème sans etre sure. Dans mon projet , j'utilise 7 interrupteur poussoir pour allumer 7 led (independament ) via un module RF 433 MHz ( 1 emetteur et 2 recepteurs ) . Le code marche parfaitement quand le arduino-emetteur est connecter au pc . Mais quand je le debranche et que le arduino est alimenter en batterie, 1 seul led refuse de s allumé. Les autres marchent parfaitement.

J'ai changer cable, resistance ( tjs en 10k ohms ) , led et meme les emplacements de la plaquette, le problème persiste. J'ai mesuré les tensions à chaque interrupteurs , tous 4,8 ou 5 V. Et cette led qui ne veut pas s'allumer à 2,1 V .

Donc , si quelqu'un aurais rencontrer ce meme genre de probleme ou aurait une solution pour mettre cette led a 4,8V , ca m'aiderais bcp .

Merci ^^

Peut-être qu'avec le code on pourrait être plus efficace :wink: et accessoirement un petit schéma du montage (même à main levé) serait un plus.

Bonjour gilgamma

Quelle est la tension de la batterie et où est-elle branchée?

Cordialement
jpbbricole

toutes les led sont identiques ?
couleur de la led qui refuse l'allumage ?

12 V batterie mais les led et interrupteurs sont alimenter via arduino qui lui fourni 5V ( j'ai mesuré )

seul la couleur change ( ce sont les led fourni par le kit starter arduino uno ) . On a dans l ordre : rouge vert jaune bleu jaune vert blanc . C'est la 2e jaune qui ne va pas ( en partant de la gauche )

//GILZEEBROEK
#include "TM1651.h"
#define CLK 5//pins definitions for TM1651 and can be changed to other ports
#define DIO 4
TM1651 batteryDisplay(CLK,DIO);

const int analogInput = A0;

/*const float TMaxA0 = 5.0;
float R1 = 20000.0;
float R2 = 13000.0;*/

#include <avr/sleep.h>//this AVR library contains the methods that controls the sleep modes
#define inter  3 //A5-6
const int led = 7;
byte etat; //1 ou 0
boolean boutonRelache; //Vrai ou faux (true/false)
//------------------

int lastButtonState = LOW;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 5000;
//____________________

const int nEchantillons = 400; // correspond au nbr indice total et mets 23 sec approxi pour faire 1 cycle
int echantillon[nEchantillons]; 
int i = 0; 
int minVal ;

//----------------------
#include <VirtualWire.h>  
char *controller;
//#define Joystick1 A2
const char* CMD_BUTTON_A = "Av1-PONTX" ;
const char* CMD_BUTTON_B = "Av2-PONTX" ;
const char* CMD_BUTTON_C = "Av3-PONTX" ;
const char* CMD_BUTTON_D = "Av4-PONTX" ;
const char* CMD_BUTTON_E = "Ar1PONTX" ;
const char* CMD_BUTTON_F = "Arr3-PONTX" ;
const char* CMD_BUTTON_G = "FreinPONTX" ;
const char* CMD_BUTTON_NUL = "NUL" ;
const int Frein = 9;
const int Arr3 = 8;
const int Arr1 = 11; // PROBLEME avec digital 11

const int Av1 = A2;
const int Av2 = A3;
const int Av3 = A4;
const int Av4 = A5;

int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0; 

int buttonState4 = 0;
int buttonState5 = 0;
int buttonState6 = 0;
int buttonState7 = 0;

void setup()
{
  Serial.begin(9600);//Start Serial Comunication
  //pinMode(LED_BUILTIN,OUTPUT);//We use the led on pin 13 to indecate when Arduino is A sleep
  pinMode(inter, INPUT_PULLUP); //entree interrupteur, en Pull up afin d'avoir un signale claire (et car il est integre a l'arduino contrairement au pull down <-- necessite un circuit en plus)
  //digitalWrite(LED_BUILTIN,HIGH);//turning LED on
  pinMode(led, OUTPUT);
  // on verifie l'etat du bouton au cas ou il est deja enfonce quand on commence
  boutonRelache = (digitalRead(inter) == HIGH); //Initialisation de la variable "boutonRelache", on teste la variable inter pour savoir si elle = HIGH, si oui boutonRelache = 0, si non boutonRelache = 1
  etat = boutonRelache ? LOW : HIGH; //if(), si boutonRelache = true (valeur boolean), etat = LOW, sinon etat = HIGH
                                     // on allume la LED en fonction de l'etat (etat = LOW ou a HIGH, a 1 ou a 0)
  
  //-----------------------
  pinMode(analogInput, INPUT);
  batteryDisplay.init();
  batteryDisplay.set(BRIGHTEST);//BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;
  batteryDisplay.frame(FRAME_ON);//light the frame of the battery display

  for (int i = 0; i < nEchantillons; i++) {
  echantillon[i] = 0;
  }
  minVal = 1023; // ou mettre 1023
  
  //--------------------------
  pinMode(Frein, INPUT);
  pinMode(Arr3, INPUT);
  pinMode(Arr1, INPUT);
  pinMode(Av1, INPUT);
  pinMode(Av2, INPUT);
  pinMode(Av3, INPUT);
  pinMode(Av4, INPUT); 
  pinMode(13,OUTPUT);  
  vw_set_ptt_inverted(true); //  
  vw_set_tx_pin(12);  
  vw_setup(4500);
  
   
}
void loop()
{
  
  //----------------------------------------------------------------------

  
  echantillon[i] = analogRead(analogInput);
  /*Serial.print("A0 :");
  Serial.print(echantillon[i]);*/

   if(minVal > echantillon[i]){
     minVal = echantillon[i];
  }

  //float Vout = ((minVal * (TMaxA0 / 1024))/(R2/(R1+R2)));
  float Vout = ((minVal * (5.0 / 1024))/(13000.0/(20000.0+13000.0)));

  Serial.print("Vout :");
  Serial.println(Vout);
  
   i++;

  if (Vout > 12.6) // max est 100%
  {
    Vout = 12.6;
  }
  else if (Vout < 9.0) //min est 0%
  {
    Vout = 9.0;
  }
  
  if(Vout<=12.6 && Vout>12.04) 
  {
    batteryDisplay.displayLevel(5);
    batteryDisplay.frame(FRAME_ON);
  }
  else{
    if(Vout<=12.04 && Vout>11.71) 
    {
      batteryDisplay.displayLevel(4);
      batteryDisplay.frame(FRAME_ON);
    }
    else{
      if(Vout<=11.71 && Vout>11.49){
         batteryDisplay.displayLevel(3);
         batteryDisplay.frame(FRAME_ON);
      }
      else{
        if(Vout<=11.49 && Vout>11.29){
          batteryDisplay.displayLevel(2);
          batteryDisplay.frame(FRAME_ON);
        }
        else{
          if(Vout<=11.29 && Vout>11){
            //blinkfaible();
            batteryDisplay.displayLevel(1);
            batteryDisplay.frame(FRAME_ON);
          }
          else{
            if(Vout<=11 && Vout>9){
              //blinkTresfaible();
              batteryDisplay.displayLevel(0);
              batteryDisplay.frame(FRAME_ON);
            }
          }
        }
      }
    }
  }
  
  
  if (i >= nEchantillons) {
  i = 0;
  minVal = echantillon[nEchantillons-1];
  }
  
  //----------------------------------------------------------------------
  
  int reading = digitalRead(inter);
  if (reading != lastButtonState){
    lastDebounceTime = millis();
  }
  if (digitalRead(inter) == HIGH) { // PULLUP = logique inversee, le bouton est relache en HIGH
    if (!boutonRelache) { // on vient de relacher, on debounce et memorise
      //delay(20); // debounce
      boutonRelache = true;
    }
  } 
  else {
    // le bouton est appuye. est-ce un nouvel appui?
    if (boutonRelache) {
      // le bouton n'etait pas appuye avant donc c'est un nouvel appui, on inverse l'etat de la lampe
      boutonRelache = false;
      etat = (etat == HIGH) ? LOW : HIGH; // ou de facon pas tres propre etat = 1 - etat <-- Inverser l'etat (qui vaut 0 ou 1);
      //delay(20); // debounce
    }
  }
  //--------------------------------------------------
  



  //------------------------------------------
  digitalWrite(led, etat); // allume led
  lastButtonState = reading;
  unsigned long diff = millis() - lastDebounceTime;
  /*if(abs(diff) > debounceDelay){
    Going_To_Sleep();
    }*/ 

  //--------------------------------------------------------------------------------

  buttonState1 = digitalRead(Arr1);
  buttonState2 = digitalRead(Arr3);
  buttonState3 = digitalRead(Frein);
  buttonState4 = digitalRead(Av1);
  buttonState5 = digitalRead(Av2);
  buttonState6 = digitalRead(Av3);
  buttonState7 = digitalRead(Av4); 
  //Serial.println(value); 
  Serial.println(controller); // affiche la valeur controle associe au bouton si
                               // si appyué 
 
 if (buttonState4 == HIGH)  
 {  
  controller="1" ;   
 vw_send((byte*) CMD_BUTTON_A, strlen(CMD_BUTTON_A) + 1);  
 //vw_wait_tx(); // Wait until the whole message is gone  
 digitalWrite(13,LOW);  
 }
 else if (buttonState5 == HIGH)  
 {  
  controller="2" ;   
 vw_send((byte*) CMD_BUTTON_B, strlen(CMD_BUTTON_B) + 1);  
 //vw_wait_tx(); // Wait until the whole message is gone  
 digitalWrite(13,LOW);  
 }
 else if (buttonState6 == HIGH)  
 {  
  controller="3" ;   
 vw_send((byte*) CMD_BUTTON_C, strlen(CMD_BUTTON_C) + 1);  
 //vw_wait_tx(); // Wait until the whole message is gone  
 digitalWrite(13,LOW);  
 }
 else if (buttonState7 == HIGH)  
 {  
  controller="4" ;   
 vw_send((byte*) CMD_BUTTON_D, strlen(CMD_BUTTON_D) + 1);  
 //vw_wait_tx(); // Wait until the whole message is gone  
 digitalWrite(13,LOW);  
 }
  else if (buttonState1 == HIGH)  
 {  
  controller="5" ;   
 vw_send((byte*) CMD_BUTTON_E, strlen(CMD_BUTTON_E) + 1);  
 //vw_wait_tx(); // Wait until the whole message is gone  
 digitalWrite(13,LOW);  
 }
 else if (buttonState2 == HIGH)  
 {  
  controller="6" ;   
 vw_send((byte*) CMD_BUTTON_F, strlen(CMD_BUTTON_F) + 1);  
 //vw_wait_tx(); // Wait until the whole message is gone  
 digitalWrite(13,LOW);  
 }
 else if (buttonState3 == HIGH)  
 {  
  controller="7" ;   
 vw_send((byte*) CMD_BUTTON_G, strlen(CMD_BUTTON_G) + 1);  
 //vw_wait_tx(); // Wait until the whole message is gone  
 digitalWrite(13,LOW);  
 }   
  else  
  {
  controller="0" ;    
 vw_send((byte*) CMD_BUTTON_NUL, strlen(CMD_BUTTON_NUL) + 1);  
 //vw_wait_tx(); // Wait until the whole message is gone  
 digitalWrite(13, HIGH);  
  }  
  
}

les tensions de seuil des leds jaunes varie selon provenance de 1.9 à 2.3 V ~

si tu remplace ta led jaune "kiveupa" :wink: par une led rouge , elle s'allume ?

1 Like

non ça revien au meme problème. Les leds sont relie au arduino recepteurs, donc elle ne s allume que si arduino emetteur envoie un message correspondant ( dans le code c est le Arr1 où le problème vient, sur la digital 11 et le message emetteur et recepteur sont sur CMD_BUTTON_E )

Le problème doit venir a l'emetteur car normalement , quand l'emetteur envoie correctement le message , la led 13 integré à l'arduino emetteur s'eteint quand le message est envoyer ( donc si je mtn le bouton poussoir enfoncé, cette led 13 reste eteint jusqu a ce que je relache le bouton ) .

En gros, le led 13 s etaint et une des led recepteur s allume . Ainsi je peux voir que le module RF 433 MHz a bien envoye et "recu" le message . Maintenant concernant la led disfonctionnel , la led 13 de l'emetteur clignote ( etaint et allume a intervalle regulier et dans l'ordre de 0.75 sec je dirais ) . Ca signifie que le message ne passe pas correctement .

Donc voila le probleme , niveau code la led devrait fonctionner comme les autres et niveau materiel j ai tous changer sauf le arduino emetteur , et rien ne change à mon probleme.

Donc en fin de compte ce n'est pas un problème avec la LED?

Tu pourrais essayer de faire un effort dans la description de tes problèmes. On arrive au 9ème post en on apprend maintenant qu'en fait le problème est dans l'émetteur où il n'y a pas de LED.

A l'examen du code, on voit ça

const char* CMD_BUTTON_E = "Ar1PONTX" ;

Les autres commandes ont un -

const char* CMD_BUTTON_D = "Av4-PONTX" ;
const char* CMD_BUTTON_E = "Ar1PONTX" ;
const char* CMD_BUTTON_F = "Arr3-PONTX" ;

C'est voulu?

Coté récepteur, tu ne testerais pas avec un -

Si c'est une led qui est connecté à la broche 11 amors pourquoi ça.

Non, là on est coté émetteur et il y a des boutons.
Les LED sont sur le récepteur.
Quand je dis qu'il présente mal son projet c'est justifié.