Проблемы с математическими вычислениями

Тема в разделе "Arduino & Shields", создана пользователем BeggingOrHelping, 14 апр 2018.

  1. BeggingOrHelping

    BeggingOrHelping Нерд

    Я опять с вопросом. Создал цикл for() от 0 до 9. Создаю переменную x равную 5. Хочу выполнить условие:
    если for увеличился до 4: x - 1; И когда x уменьшится до нуля выполнить break.

    Код (C++):
    int x = 5;
    #include <LiquidCrystal.h>
    LiquidCrystal lcd(2, 3, 4, 5, 10, 12);
    void setup() {
    lcd.begin(16, 2);
    pinMode(13, INPUT_PULLUP);
    }

    void loop() {
    for (int i = 0; i < 10; ++i) {
    lcd.setCursor(i, 0);
    lcd.print("A");
    lcd.setCursor(0, 1);
    lcd.print(x);
    delay(200);
    lcd.clear();
    if (i == 3 && digitalRead(13)) {
    x = x - 1;
    }

    if (x == 0) {
    break;
    }
    }
    }
     
  2. BeggingOrHelping

    BeggingOrHelping Нерд

    Пожалуйста загрузите его себе. Увидите что произойдёт, когда x станет равным 0. А мне надо, чтобы он опять становился равным 5. Пожалуйста, помогите мне. Заранее благодарен.
     
  3. SergeiL

    SergeiL Оракул Модератор

    Есть инициализация x = 5;
    Есть операция x = x - 1;
    Больше операций с переменной "x" нет.
    Как "x" может снова стать 5 ???
     
  4. mcureenab

    mcureenab Гуру

    Код (C++):
    void loop() {
    x=5;
    for (int i = 0; i < 10; ++i) {
     
  5. mcureenab

    mcureenab Гуру

    А может так. Из того что получилось трудно понять что тебе надо.
    Код (C++):
    if (x == 0) {
    x=5;
    break;
    }
     
  6. BeggingOrHelping

    BeggingOrHelping Нерд

    Да так, скетч небольшой. Вам нужно lcd1602 и кнопка. Загрузите его себе, если у вас UNO R3.
    Хотя наверное, написан непрофессионально.

    Код (C++):
    int upOrDown = 0;
    int health = 5;
    int hero = 1;
    int keyCount = 0;
    #include <LiquidCrystal.h>
    LiquidCrystal lcd(2, 3, 4, 5, 10, 12);
    boolean jumping = false;

    byte fir[8] =
    {
        B01100,
        B01100,
        B00000,
        B01110,
        B11100,
        B01100,
        B11010,
        B10011,

    };

    byte sec[8] =
    {
        B01100,
        B01100,
        B00000,
        B01100,
        B01100,
        B01100,
        B01100,
        B01110,

    };

    byte jump[8] =
    {
        B01100,
        B01100,
        B00000,
        B11110,
        B01101,
        B11111,
        B10000,
        B00000,

    };

    byte door[8] =
    {
        B11111,
        B10001,
        B10001,
        B11001,
        B10001,
        B10001,
        B10001,
        B11111,

    };

    byte heart[8] =
    {
        B00000,
        B01010,
        B10101,
        B10001,
        B01010,
        B00100,
        B00000,
        B00000,

    };

    byte partition[8] =
    {
        B00001,
        B00001,
        B00001,
        B00001,
        B00001,
        B00001,
        B00001,
        B00001,

    };

    void setup() {
    lcd.begin(16, 2);
    lcd.createChar(1, fir);
    lcd.createChar(2, sec);
    lcd.createChar(3, jump);
    lcd.createChar(4, door);
    lcd.createChar(5, heart);
    lcd.createChar(6, partition);
    }

    void gnd1() {
    lcd.setCursor(0, 1);
    lcd.write(0xFF);
    lcd.write(0xFF);
    lcd.write(0xFF);
    lcd.write(0xFF);
    lcd.write(0x20);
    lcd.write(0xFF);
    lcd.write(0xFF);
    lcd.write(0xFF);
    lcd.write(0xFF);
    lcd.write(0xFF);
    }

    void gnd2() {
    lcd.setCursor(0, 1);
    lcd.write(0xFF);
    lcd.write(0xFF);
    lcd.write(0xFF);
    lcd.write(0x20);
    lcd.write(0xFF);
    lcd.write(0xFF);
    lcd.write(0x20);
    lcd.write(0xFF);
    lcd.write(0xFF);
    lcd.write(0xFF);
    }

    void loop() {
    for (int moveHero = 0; moveHero < 9; ++moveHero) {
    if (moveHero == 0 || moveHero == 2 || moveHero == 4 || moveHero == 6 || moveHero == 8) {
    hero = 1;
    }

    if (moveHero == 1 || moveHero == 3 || moveHero == 5 || moveHero == 7 || moveHero == 9) {
    hero = 2;
    }

    lcd.setCursor(moveHero, upOrDown);
    lcd.write(hero);
    gnd1();
    lcd.setCursor(9, 0);
    lcd.write(byte(6));
    lcd.write(byte(5));
    lcd.print(health);
    lcd.print("  ");
    lcd.write(0x8D);
    lcd.print(keyCount);
    lcd.setCursor(9, 1);
    lcd.write(byte(6));
    lcd.print("Lev 1");
    delay(200);
    lcd.clear();


    if (health == 0) {
    health = 5;
    break;
    }

    if (moveHero == 4 && digitalRead(13)) {
    health = health - 1;
    }
    }

    for (int moveHero = 0; moveHero < 9; ++moveHero) {
    lcd.setCursor(moveHero, upOrDown);
    lcd.write(hero);
    gnd2();
    lcd.setCursor(9, 0);
    lcd.write(byte(6));
    lcd.write(byte(5));
    lcd.print(health);
    lcd.print("  ");
    lcd.write(0x8D);
    lcd.print(keyCount);
    lcd.setCursor(9, 1);
    lcd.write(byte(6));
    lcd.print("Lev 1");
    delay(200);
    lcd.clear();

    if (health == 0) {
    health = 5;
    break;
    }

    if (moveHero == 4 && digitalRead(13)) {
    health = health - 1;
    }

    if (moveHero == 7 && digitalRead(13)) {
    health = health - 1;
    }
    }
    }
     
  7. BeggingOrHelping

    BeggingOrHelping Нерд

    Если что не так, подскажите, как упростить код.:)
     
  8. mcureenab

    mcureenab Гуру

    Хммм.. На pourquoi?