Dúvida no código para leitura do potênciometro analogRead

Olá, comunidade!
Gostaria de solicitar um tempo de sua atenção e ajuda para solucionar ou indicar o motivo do meu código abaixo não efetuar as ações que preciso quando estou utilizando um potênciometro.

Trata-se de uma leitura analógica de corrente, onde os parâmetros Min/Max acendam um led verde, indicando que está normal e caso neste "range" tenha leitura diferente, faça acender um led vermelho.

Aguardo sua ajuda! :slight_smile:

int potenciometro_1 = A0;
int ledPin_1 = 10;
int ledPin_2 = 11;

void setup()
{
  // put your setup code here, to run once:
  pinMode(ledPin_1, OUTPUT); //led verde
  pinMode(ledPin_2, OUTPUT); //led vermelho
}

void loop()
{
  // put your main code here, to run repeatedly:
  for (int pos = 0; pos < 3; pos++)
  {
    int dados[pos];
    
    float mA_1 = 0;
    dados[0] = analogRead(potenciometro_1);
    
    float valorPotenciometroMin_1 = 10.0;
    float valorPotenciometroMax_1 = 150.0;
    float valorPotenciometroOldMin_1 = 9.99;
    float valorPotenciometroOldMax_1 = 150.1;
    if (mA_1 >= valorPotenciometroMin_1 && mA_1 <= valorPotenciometroMax_1)
    {
      digitalWrite(ledPin_1, HIGH);
    } else {
      digitalWrite(ledPin_1, LOW);
    }
    if (mA_1 <= valorPotenciometroOldMin_1 && mA_1 >= valorPotenciometroOldMax_1)
    {
      digitalWrite(ledPin_2, HIGH);
    } else {
      digitalWrite(ledPin_2, LOW);
    }
  }
}

Fiz algumas correções no seu código.
O primeiro if funciona, mas o segundo if não é possível funcionar,
pois se mA_1 for menor que 9.99 nunca será maior que 150.1.

int potenciometro_1 = A0;
int ledPin_1 = 10;
int ledPin_2 = 11;
//-----------------------------------------------------------------
void setup()
{
  // put your setup code here, to run once:
  pinMode(ledPin_1, OUTPUT); //led verde
  pinMode(ledPin_2, OUTPUT); //led vermelho
}
//-----------------------------------------------------------------
void loop()
{
  // put your main code here, to run repeatedly:
 // for (int pos = 0; pos < 3; pos++)
 // {
    //int dados[pos];
    
    float mA_1 = analogRead(potenciometro_1);
    //dados[0] = analogRead(potenciometro_1);
    
    float valorPotenciometroMin_1 = 10.0;
    float valorPotenciometroMax_1 = 150.0;
    float valorPotenciometroOldMin_1 = 9.99;
    float valorPotenciometroOldMax_1 = 150.1;

     // if (mA_1 >=  10.0 && mA_1 >= 150.0) //   
    if (mA_1 >= valorPotenciometroMin_1 && mA_1 <= valorPotenciometroMax_1)
    {
      digitalWrite(ledPin_1, HIGH);
    } else {
      digitalWrite(ledPin_1, LOW);
    }
    // if (mA_1 <=  9.99 && mA_1 >= 150.1) //   Impossível
    if (mA_1 <= valorPotenciometroOldMin_1 && mA_1 >= valorPotenciometroOldMax_1)
    {
      digitalWrite(ledPin_2, HIGH);
    } else {
      digitalWrite(ledPin_2, LOW);
    }
  //}
}

Olá, @ruilviana!

O primeiro if abaixo funcionou:

O segundo if abaixo não funcionou:

A possibilidade de trocar o segundo if por while seria uma outra alternativa?

Não.
Não é uma questão de instrução (if, ou while), é uma questão de logica.
Se algo é menor que 9,99, nunca será maior que 150.1.

Não sei o que voce quer desta parte do projeto, mas pode tentar com "OR" ao invés de "AND".
Usando "OR".

if (mA_1 <= valorPotenciometroOldMin_1 || mA_1 >= valorPotenciometroOldMax_1)

Olá @ruilviana !

O intuito do código e projeto é acender dois LEDs indicando através das cores (verde/vermelho) o range de corrente que preciso.

Com a alteração para "OR" realmente os Ifs diferenciaram com o pseudocódigo e fluiu como pretendia fazer.

Agradeço muito seu tempo disponibilizado a esse projeto. :slight_smile:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.