Go Down

Topic: push botton (Read 471 times) previous topic - next topic

trestecnicas

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

alkuentrus

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

trestecnicas

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("                   ");
}

tecdiego

tenta usar esse código abaixo:
Code: [Select]

   // 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;

alkuentrus

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

tecdiego

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

alkuentrus

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

Go Up