fedekr
August 1, 2022, 9:31am
1
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!
fedekr
August 1, 2022, 11:43am
3
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();
}
system
Closed
January 28, 2023, 11:43am
4
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.