Progetto arduino per incrementare / decrementare variabile su oled con pulsante

ciao a tutti!
sono riuscito a fare funzionare uno schermo oled e a postare una variabile che incremento ogni 500 millisecondi tenendo premuto un pulsante, fino a qui funziona tutto, pensavo di riuscire facilmente a fare la stessa cosa con 2 pulsanti, uno incrementa e l altro diminuisce, il problema è che pur non premendo nessun pulsante il valore continua a scendere e non riesco a capire perché... potreste spiegarmelo?
posto il codice:


#include "U8glib.h"

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);  // VDD=5V GND=GND SCL=A5 SDA=A4

int a = 0;


void setup() {    
  pinMode(3,INPUT);}

unsigned long q1,q2; // 
  unsigned long t1,dt;// scrivi variabile

void loop() {
 
 dt = millis() - t1;
  if (dt >= 500){
    t1=millis();
    schermo();}
    //-----------------
     q2 = millis() - q1;
  if (q2 >= 500){
    for(digitalRead(3) == HIGH){
    q1=millis();
     incrementovar();}
  
    if(digitalRead(1) == HIGH){
    q1=millis();
     decrementovar();}
}
  
 
}
//-----------------------------------------------------------
  void schermo(){
  u8g.firstPage(); 
 do {
u8g.setFont(u8g_font_gdr25r);
//u8g.drawStr(8, 30, "Eeee");

char buf[9];
sprintf (buf, "%d", a);
u8g.drawStr(18, 20, buf);

  } while( u8g.nextPage() );
  delay(200);
  //t1=millis();
  }
//------------------------------------------------------------  
  void incrementovar(){

  if(digitalRead(3) == HIGH){
    ++a;
    q1=millis();}
 
}
//-----------------------------------------------------
void decrementovar(){
    if(digitalRead(1) == HIGH){
    --a;
    q1=millis();}
}

Sei sicuro di aver messo il codice corretto?
Questo sketch cosi com'è non compila nemmeno...

  • quel for forse voleva essere un if?
  • hai dimenticato di dichiarare come ingresso l'altro pulsante.
  • il pin 1 è meglio non usarlo perché è fisicamente connesso al convertitore USB/TTL
  • che senso ha leggere nuovamente lo stato del punsante nelle funzioni decrementovar() e incrementovar() ?

P.S.
Premi CTRL + T nell'ide per sistemare le indentazioni perché cosi è tutto molto confuso!

Grazie ci sono riuscito grazie a quello che hai detto riguardo al pin 1
Avevo sbagliato a postare il codice perché l'avevo salvato un altra volta e ho messo il salvataggio senza il pin 1 e in cui stavo tentando di modificare if con for...
Comunque ho corretto tutto e continuava a non funzionare ha funzionato solo quando ho sostituito il pin 1 con il 2, adesso lo so, grazie!
Posto il codice completo

#include "U8glib.h"

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);  // VDD=5V GND=GND SCL=A5 SDA=A4

int a = 0;


void setup() {
  pinMode(3, INPUT);
  pinMode(2, INPUT);
}

unsigned long q1, q2; //
unsigned long t1, dt; // scrivi variabile

void loop() {

  dt = millis() - t1;
  if (dt >= 500) {
    t1 = millis();
    schermo();
  }
  //-----------------
  q2 = millis() - q1;
  if (q2 >= 500) {
    if (digitalRead(3) == HIGH) {
      q1 = millis();
      incrementovar();
    }

    if (digitalRead(2) == HIGH) {
      q1 = millis();
      decrementovar();
    }
  }


}
//-----------------------------------------------------------
void schermo() {
  u8g.firstPage();
  do {
    u8g.setFont(u8g_font_gdr25r);
    //u8g.drawStr(8, 30, "Eeee");

    char buf[9];
    sprintf (buf, " % d", a);
    u8g.drawStr(18, 20, buf);

  } while ( u8g.nextPage() );
  delay(200);
  //t1=millis();
}
//------------------------------------------------------------
void incrementovar() {


  ++a;
  q1 = millis();

}
//-----------------------------------------------------
void decrementovar() {

  --a;
  q1 = millis();
}

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