Помогите с кодом ардуино

Спасибо, что увидели мой пост.

Я пытаюсь написать код, позволяющий попеременно отображать букву "А" в строке 1 и строке 0 на ЖК-дисплее. начиная с (0,1), затем (1,0), затем (2,1), затем (3,0) и т. д.. когда он достигает последней точки, он становится «B» и отскакивает в другую сторону, пока не достигнет начальной точки, когда он снова становится «A», и повторяется снова..

Я написал этот код, но застрял в конце, я не знаю, как вернуть его обратно:


// подключаем код библиотеки:
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);   // инициализируем библиотеку номерами выводов интерфейса

int x = 0;
int y = 1;

void setup()
{
    lcd.begin(16, 2);
    lcd.clear();
}

void loop()
{
    {
        {
            while (x < 15)
            {
                lcd.setCursor(x, y);
                lcd.print("A");
                delay(250);

                lcd.clear();
                x = x + 1;
                lcd.setCursor(x, y - 1);
                lcd.print("A");
                delay(250);

                lcd.clear();
                x + x++;
            }
        }
        {
            while (x = 15)
                lcd.setCursor(15, 0);
            lcd.print("B");
            delay(2000);
            x--;
        }
    }
}

, 👍1

Обсуждение

Научитесь использовать цикл for. Это намного проще. И не путайте присваивание (=) с операторами сравнения (==)., @Majenko


1 ответ


2

Мне кажется, что у вас нет знаний о C/C++. (могу ошибаться. ;-) )

Если вы планируете делать больше проектов по программированию, я советую вам изучить основы этого языка программирования, прежде чем приступать к проектам. Было бы трудно думать об алгоритме, если вы не знаете инструментов для его реализации.

На тот случай, если вам это понадобится только один раз (скажем, для арт-проекта [или домашнего задания ;-)] ), я добавлю пример кода. На данный момент у меня нет возможности протестировать код. Так что написано вслепую и могут быть опечатки. Примерно через 8 часов у меня будет доступ к тестовой настройке, и я поправлю ее, если нужно.

#include <LiquidCrystal.h>

// Здесь вы настраиваете ЖК-дисплей
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);   

// вы инициализируете позицию, в которой следующий символ
// будет отображаться (0,1) (x,y)
int x = 0;
int y = 1;
// настройка выполняется только один раз
void setup()
{
    // инициализируем библиотеку lcd для использования с LCD 16x2
    lcd.begin(16, 2);
    // стираем все символы с дисплея
    lcd.clear();
}

// цикл выполняется снова и снова и...
void loop()
{
    // двигаться вперед
    // пока позиция меньше 15
    // вы допускаете x = 0, 1, 2, ..., 15, потому что
    // вы увеличиваете два раза на каждом шаге цикла
    while (x < 15)
    {
        lcd.clear( );

        lcd.setCursor( x, y );
        lcd.print( "A" );
        delay( 250 );

        // переход к следующей позиции
        x = x + 1;
        // переключить у
        y = toggle( y );

        lcd.clear();
        lcd.setCursor( x, y );
        lcd.print( "A" );
        delay( 250 );

        // переход к следующей позиции
        x = x + 1;
        // переключить у
        y = toggle( y );
    }

    // теперь двигаемся назад
    // x по-прежнему 15, и вы хотите вернуться назад, пока x == 0
    while ( x > 0 )
    {
        lcd.clear( );

        lcd.setCursor( x, y );
        lcd.print( "B" );
        delay( 250 );

        // переход к следующей позиции
        x = x - 1;
        // переключить у
        y = toggle( y );

        lcd.clear( );
        lcd.setCursor( x, y );
        lcd.print( "B" );
        delay( 250 );

        // переход к следующей позиции
        x = x - 1;
        // переключить у
        y = toggle( y);
    }
}

// это подпрограмма, которая переключает y = 0 <-> 1
int toggle( int yval )
{
   // Я использую тернарный оператор
   // если y == 1, я возвращаю 0 и 1 иначе
   return ( yval == 1) ? 0 : 1;
}
,