Поле чудес на Arduino

qqefleen
Offline
Зарегистрирован: 18.05.2018

Здравствуйте, я новичок в программировании и ардуино.
Решил написать "Поле чудес", работают вывод звездочек , возможно выбор букв,
но при выборе правильной буквы не меняется строка звездочек.
Помогите,пожалуйста.

#include <LiquidCrystal.h>
char s;
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int i = 0;
char lang[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
#define BTN_UP 1
#define BTN_DOWN 2
#define BTN_LEFT 3
#define BTN_RIGHT 4
#define BTN_SELECT 5
#define BTN_NONE 10

int detectButton()
{
    int keyAnalog = analogRead(A0);
    if (keyAnalog < 100) {

        return BTN_RIGHT;
    }
    else if (keyAnalog < 200) {

        return BTN_UP;
    }
    else if (keyAnalog < 400) {

        return BTN_DOWN;
    }
    else if (keyAnalog < 600) {

        return BTN_LEFT;
    }
    else if (keyAnalog < 800) {

        return BTN_SELECT;
    }
    else {

        return BTN_NONE;
    }
}
void clearLine(int line)
{
    lcd.setCursor(0, line);
    lcd.print("                ");
}

void printDisplay(String message)
{
    Serial.println(message);
    lcd.setCursor(0, 0);
    lcd.print(message);
    delay(1000);
    clearLine(0);
}

void printDisplay2(String message)
{
    Serial.println(message);
    lcd.setCursor(0, 1);
    lcd.print(message);
    delay(3000);
    clearLine(1);
}
char enterArd()
{
    int button = detectButton();
    switch (button) {
    case BTN_UP:
        printDisplay2(String::String(lang[++i]));
        break;
    case BTN_DOWN:
        printDisplay2(String::String(lang[--i]));
        break;
    case BTN_LEFT:
        break;
    case BTN_RIGHT:
        break;
    case BTN_SELECT:
        return lang[i];
        break;
    default:
        break;
    }
}
void setup()
{
    lcd.begin(16, 2);
}

void loop()
{
    char c[10], k[10];
    bool t = false;
    c[10] = "TECHNOLOGY";

    for (int i1 = 0; i1 < 10; i1++)
        k[i1] = '*';

    while (t == false) {

        printDisplay(String::String(k));
        s = enterArd();
        for (int i1 = 0; i1 < 10; i1++) {
            if (c[i1] == s) {
                k[i1] = s;
                printDisplay(String::String(k));
            }
        }

        for (int i1 = 0; i1 < 10; i1++) {
            if (k[i1] == '*') {
                t = false;
            }
            else
                t = true;
        }
    }
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Не знаю для чего Вы написали строки 110-116, но они полностью эквивалентны вот такой записи:

t = k[9] == '*';

и ничему больше. Вы это имели в виду, когда писали эти строки?

qqefleen
Offline
Зарегистрирован: 18.05.2018

ЕвгенийП пишет:

Не знаю для чего Вы написали строки 110-116, но они полностью эквивалентны вот такой записи:

t = k[9] == '*';

и ничему больше. Вы это имели в виду, когда писали эти строки?

Я сделал 110-116 с целью проверить :отгадали ли слово.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Я не знаю, какова была цель, но написано там точто то, что я написал одной строкой - вряд ли таким способом можно какое-то слово проверить.

qqefleen
Offline
Зарегистрирован: 18.05.2018

ЕвгенийП пишет:

Я не знаю, какова была цель, но написано там точто то, что я написал одной строкой - вряд ли таким способом можно какое-то слово проверить.

Оно делает пробежку по массиву - проверяет: есть ли в заданном массиве еще звездочки, если нет,то слово отгадано,если есть,то продолжаем

sadman41
Offline
Зарегистрирован: 19.10.2016

Тогда вам нужно выпрыгивать досрочно из цикла. В противном случае, как уже намекнули, во внимание принимается только последний элемент массива.

qqefleen
Offline
Зарегистрирован: 18.05.2018

sadman41 пишет:

Тогда вам нужно выпрыгивать досрочно из цикла. В противном случае, как уже намекнули, во внимание принимается только последний элемент массива.

Расскажите поподробнее

sadman41
Offline
Зарегистрирован: 19.10.2016

qqefleen пишет:

sadman41 пишет:

Тогда вам нужно выпрыгивать досрочно из цикла. В противном случае, как уже намекнули, во внимание принимается только последний элемент массива.

Расскажите поподробнее

О чем?

qqefleen
Offline
Зарегистрирован: 18.05.2018

sadman41 пишет:

qqefleen пишет:

sadman41 пишет:

Тогда вам нужно выпрыгивать досрочно из цикла. В противном случае, как уже намекнули, во внимание принимается только последний элемент массива.

Расскажите поподробнее

О чем?

Как исправить неработающий фрагмент кода

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

qqefleen пишет:
Как исправить неработающий фрагмент кода
Ну там текущего программиста еще учить и учить. И что самое грусное с самых азов.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

qqefleen пишет:

Оно делает пробежку по массиву - проверяет: есть ли в заданном массиве еще звездочки, если нет,то слово отгадано,если есть,то продолжаем

Пробежку по массиву оно конечно делает, но исключительно из спортивных соображений. Все результаты, кроме последнего, напрочь выбрасываются за ненадобностью. 

Вы смотрели строчку, которую я Вам написал? Или нет?

Так вот, на самом деле, она делает только то, что я написал - смотрит на самый последний элемент массива, полностью игнорируя все остальные. Именно так у Вас написан код. Думайте, исправляйте.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

qqefleen пишет:

sadman41 пишет:

О чем?

Как исправить неработающий фрагмент кода

Вы неправильно понимаете характер помощи, которую можете здесь получить.

Вам уже предельно подробно всё рассказано в моих сообщениях (особенно, в последнем - #10). И это всё. Исправлять код Вам придётся самому. Ну, или заказывать написание кода зе деньги (это в другом разделе), или искать другой форум. Здесь не принято писать коды за новичков. Здесь им подсказывают, помогают найти ошибку, а писать - это самостоятельно.

qqefleen
Offline
Зарегистрирован: 18.05.2018

ЕвгенийП пишет:

qqefleen пишет:

sadman41 пишет:

О чем?

Как исправить неработающий фрагмент кода

Вы неправильно понимаете характер помощи, которую можете здесь получить.

Вам уже предельно подробно всё рассказано в моих сообщениях (особенно, в последнем - #10). И это всё. Исправлять код Вам придётся самому. Ну, или заказывать написание кода зе деньги (это в другом разделе), или искать другой форум. Здесь не принято писать коды за новичков. Здесь им подсказывают, помогают найти ошибку, а писать - это самостоятельно.


Так понимаю,что нужно после t = false делать break. Большое спасибо за помощь :D
Будем пробовать еще.