byte l[] = {3, 5, 6, 9};
byte i1 = 10, i2 = 11;
byte b1 = 2, b2 = 4;
byte p = A0;
unsigned int m = 0x1248;
byte g = 0;
int a = -1;
bool x1 = 1, x2 = 1;
unsigned long t = 0;
bool inv = 0;
void out()
{
Serial.print("Binary: ");
for (int i = 15; i >= 0; i--)
Serial.print((m >> i) & 1);
Serial.print(" Decimal: ");
Serial.println(m);
}
void leds()
{
byte s = g * 4;
for (byte j = 0; j < 4; j++)
{
byte v = (m >> (s + j)) & 1;
if (j == a)
analogWrite(l[j], 255);
else if (v)
analogWrite(l[j], 128);
else
analogWrite(l[j], 0);
}
digitalWrite(i1, g >= 2);
digitalWrite(i2, g % 2);
}
void setup()
{
Serial.begin(9600);
for (byte j = 0; j < 4; j++)
pinMode(l[j], OUTPUT);
pinMode(i1, OUTPUT);
pinMode(i2, OUTPUT);
pinMode(b1, INPUT_PULLUP);
pinMode(b2, INPUT_PULLUP);
for (byte j = 0; j < 4; j++)
{
analogWrite(l[j], 255);
delay(500);
analogWrite(l[j], 0);
}
leds();
out();
}
void loop()
{
bool q1 = digitalRead(b1);
bool q2 = digitalRead(b2);
// потенциометр → активный бит
int z = analogRead(p);
byte na = map(z, 0, 1023, 0, 3);
if (na != a)
{
a = na;
leds();
}
// кнопка 1
if (x1 && !q1 && q2)
{
g++;
if (g > 3) g = 0;
a = -1;
leds();
out();
delay(150);
}
// кнопка 2
if (x2 && !q2 && q1)
{
if (a >= 0)
{
byte k = g * 4 + a;
m ^= (1 << k);
a = -1;
leds();
out();
}
delay(150);
}
// обе кнопки 2 секунды
if (!q1 && !q2)
{
if (!t)
t = millis();
if (!inv && millis() - t >= 2000)
{
m = ~m;
a = -1;
leds();
out();
inv = 1;
}
}
else
{
t = 0;
inv = 0;
}
x1 = q1;
x2 = q2;
}