Leider tut es das nicht Siro .
Ich nehme aber mal an, es liegt an dem Rest von meinem Sketch. Diese Variante funktioniert zum Beispiel, auch wenn sie immer gleich 2 Schritte hochzählt:
Code:
int c = 0;
int State;
void setup()
{
Serial.begin(9600);
pinMode(3, INPUT);
pinMode(4, INPUT);
}
void loop()
{
int aState = digitalRead(3);
if(State != aState)
{
if(digitalRead(4) != aState)
{
c++;
}
else c--;
}
State = aState;
Serial.println(c);
}
Da zählt er problemlos hoch und runter. Benutze ich aber folgenden Sketch, wobei ich an dem Aufbau der Hardware nichts ändere, funktioniert es manchmal abwärts, fast gar nicht aufwärts und gelegentlich zählt er auch wieder hoch, wenn er runtergezählt hat. Vielleicht kannst du darin ja ein Problem erkennen.
Code:
#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
#define A 3
#define B 4
#define FIRE 2
float volt = 7.4;
float maximum = 8.4;
float aktuell = 8.4;
int Flag;
int toInterval = 5000;
long timeout = toInterval;
long time = 0;
void setup(void)
{
u8g2.begin();
pinMode(A, INPUT);
pinMode(B, INPUT);
pinMode(FIRE, INPUT);
}
void loop(void)
{
time = millis();
ui();
u8g2.clearBuffer();
// akkustand();
if(time < timeout)
{
u8g2.setFont(u8g2_font_crox3h_tf);
u8g2.setFontRefHeightExtendedText();
u8g2.setDrawColor(1);
u8g2.setFontPosTop();
u8g2.setFontDirection(0);
u8g2.drawStr(18, 0, "K2-Box V 0.3");
u8g2.drawLine(0, 18, 128, 18);
u8g2.drawLine(0, 50, 128, 50);
power();
// debug();
}
u8g2.sendBuffer();
}
void power()
{
String p = String(volt) + "V";
u8g2.setFont(u8g2_font_ncenR18_tr);
u8g2.drawStr(30, 25, p.c_str());
}
void akkustand()
{
float proz = aktuell * 100 / maximum;
int stand = 128 - round(128 * proz / 100);
u8g2.drawBox(stand, 50, 128, 64);
}
void debug()
{
u8g2.setFont(u8g2_font_t0_11_tf);
String ausgabe;
ausgabe = String(digitalRead(A)) + " " + String(digitalRead(FIRE)) + " " + String(digitalRead(B));
u8g2.drawStr(0, 52, ausgabe.c_str());
String check;
if(digitalRead(A) == LOW) check = "-";
if(digitalRead(B) == LOW) check = "+";
u8g2.drawStr(50, 52, check.c_str());
}
void ui()
{
if(digitalRead(A) == HIGH)
{
Flag = LOW;
return;
}
if(Flag == HIGH) return;
Flag= HIGH;
if(digitalRead(B)) volt += 0.05;
else volt -= 0.05;
}
Das Schlimme daran ist, das komplette Projekt steht und fällt mit diesem Regler...
Lesezeichen