push botton

boas,

Desculpem mas sou mesmo mau, a programar daí o meu apelo.

Quero usar um push botton num código que já fiz.

objetivo quando pressionado altera o valor de uma variável , mantendo esse valor.

se pressionado novamente altera o valor anterior por novo.

ou seja, pressiono e o valor da variável passa a ser 8 se pressionar novamente será 4 se pressionar novamente será 2

por fim se pressionar novamente regressa ao 8.

Obrigado,
Antonio

antoniofonseca@trestecnicas.pt

Isso é relativamente fácil. Coloca o código que já fizeste.

Desculpa, vida dificil só consegui agora.

neste código o pushbotton altera a variavel " ohm " de 8 para 4 quando o mantenho pressionado ( daí
o led).

a ideia é manter o valor de 2 ou 4 ou 8 regressando ao 2 se voltar a ser pressionado.
por defeito a variavel " ohm " deverá ter o valor 8

podes alterar o achares mais correto.
o led que avisa o estado do pushbotton pode ser eliminado na medida que terei o valor fixo no lcd.

Obrigado pela ajuda,

abraços;
Tózé

#include "LiquidCrystal.h"

// lcd connection
// 1 gnd
// 2 5v
// 3 lcd contrast
// 4 pin 8
// 5 gnd
// 6 pin 9
// 11 D0 pin 4
// 12 D1 pin 5
// 13 D2 pin 6
// 14 D3 pin 7

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

float input_voltage = 0.0;
float temp=0.0;
int ohm = 4;
float value= 0;
float volt = 0;

int buttonInput = 2;
int lightOutput = 13;
int buttonState = 0;

void setup()
{
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
lcd.begin(16, 2); //// set up the LCD's number of columns and rows:
lcd.print("3T AMP ");

// button
pinMode(lightOutput, OUTPUT);
pinMode(buttonInput,INPUT);
digitalWrite(buttonInput,HIGH);
// end button
}
void loop()
{

// button
{
buttonState = digitalRead(buttonInput);
if(buttonState == HIGH)
{
digitalWrite(lightOutput,LOW);
ohm = 8;
}
else
{
digitalWrite(lightOutput,HIGH);
ohm = 4;
}

// end button

}

//Conversion formula for voltage

int analog_value = analogRead(A0);
input_voltage = (analog_value * 500.0) / 1024.0;

if (input_voltage < 0.1)
{
input_voltage=0.0;
}

Serial.print("v= ");
Serial.println(input_voltage);
lcd.setCursor(0, 1);
lcd.print("W=");

value = (((input_voltage)*(input_voltage))/ohm);
if ( value > 2000 )
{ lcd.print("## OVER ##");

}

volt = input_voltage;
lcd.print(value);
delay(100);
lcd.setCursor(11,1);
lcd.print("ohm ");
lcd.print(ohm);
lcd.print(" ");
lcd.setCursor(6,0);
lcd.print("rms");
lcd.setCursor(10,0);
lcd.print("ac");
lcd.setCursor(12,0);
lcd.print(volt);
delay(500);
lcd.setCursor(0,1);
lcd.print(" ");
}

tenta usar esse código abaixo:

   // button
   pinMode(lightOutput, OUTPUT);
   pinMode(buttonInput,INPUT);
   digitalWrite(buttonInput,HIGH);
   // end button
}
void loop()
{

  // button
  {
  buttonState = digitalRead(buttonInput);
  if(buttonState == HIGH)
    {
      if(ohm == 8) {
         
         digitalWrite(lightOutput,LOW);
         ohm = 4;

      } else if( ohm == 4) {

         digitalWrite(lightOutput,LOW);
         ohm = 2;

      } else if ( ohm == 2) {

         digitalWrite(lightOutput,LOW);
         ohm = 8;
      }
  }
 
   // end button

Você também poderia usar um Swicth case;

Este post ficou para trás e eu nunca mais o vi. Conseguiste resolver com o codigo do @Tecdiego?

I alkuentrus não sou eu que estava com o problema, mas a pessoa não deu o feddback! :frowning:

Sim, era o que eu queria dizer :slight_smile: meti @ por engano. Sorry