Загрузка данных


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

  if (x1 && !q1 && q2)
  {
    g++;

    if (g > 3)
      g = 0;

    a = -1;
    leds();
    out();
    delay(150);
  }

  if (x2 && !q2 && q1)
  {
    if (a >= 0)
    {
      byte k = g * 4 + a;
      m ^= (1 << k);

      a = -1;
      leds();
      out();
    }

    delay(150);
  }

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