Проблемы с кнопкой NeoMatrix

Я создаю светодиодную матрицу 20x15, используя Arduino Nano. Моя цель — переключаться между различными «сценами», если хотите, с помощью 4 кнопки (мне просто нужно запустить другой код, чтобы он отображал что-то другое). Четыре кнопки имеют общую землю и подключаются к цифровым контактам (у меня нет резисторов на земле из-за этого). статью). Затем в коде (под void loop) есть одно большое дерево if-then. Например, if (button1State == HIGH) {} else {if (button2State == HIGH)} и так далее и тому подобное.

Когда я подключаю кнопки, индикаторы мерцают и глючат. Без кнопок он переходит к последнему else совершенно нормально, поэтому я знаю, что мой световой код работает. Для меня код выглядит нормально, но я хочу посмотреть, не делаю ли я что-то не так. Интересно, было бы лучше поместить код в пустоты вместо их в if-then в цикле, но я не знаю, как бы я их вызывал.

Если бы кто-нибудь мог понять, что я делаю неправильно, или что-то, что могло бы улучшить мой код, я был бы очень благодарен.

Вот мой полный, текущий код (игнорируйте все комментарии, я разрабатываю код, чтобы его мог понять кто-то, не разбирающийся в программировании)

//   HEY! LOOK UP HERE! I know it looks confusing, but don't worry, I'll help you! I'm Clippy! 
//    _________________
//   < I can help you! >
//    -----------------
//    \
//     \
//        __
//       /  \
//       |  |
//       @  @
//       |  |
//       || |/
//       || ||
//       |\_/|
//       \___/

//As you know, there are 4 buttons. When they are pressed, they display something different. We can make them display text as well.
//Below are VARIABLES, which control what text is displayed when buttons are pressed. Put what you want them to display between the 
//quotation marks. If you don't want anything in a button, just put a space inbetween them.

//Note: only button 1 and 3 can display text, so lets only put text in those :)
String buttonText1 = " "; //Again, put what you want button 1 to display in text
//String buttonText2 = " ";
String buttonText3 = " ";
//String buttonText4 = " ";
String defaultText = "   Text for the panel"; //This is what will show up when you first start it up

//Here we can adjust what the brightness of the panel is. We use a switch to do this. You can use values from 0 (lowest) to 255 (highest)
int switchLevel1 = 10;
int switchLevel2 = 200;

//Here we can control how many colors are on the backgrounds at one time. We can customize this to get some variety in our displays.
int colorsOnscreen1 = 5; //For button 1
//int colorsOnscreen2 = 3
int colorsOnscreen3 = 10; //For button 3
//int colorsOnscreen4 = 5;
int colorsOnscreenDefault = 3; //For when you start it up

int lastButton = 0; //Last button pressed stuff, gets fed to buttons


//----------------------------------------------------------------You Probably Don't Have To Worry About The Rest----------------------------------------------------------------

//This stuff you don't have to worry about, its for the board
#include <Adafruit_NeoPixel.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SPITFT.h>
#include <Adafruit_SPITFT_Macros.h>
#include <gfxfont.h>
#include <Adafruit_NeoMatrix.h>
#include <gamma.h>
#include "RGB.h"
#ifndef PSTR
 #define PSTR
#include smileytongue24.h
#include yellowsmiley24.h
#endif

#define PIN 3 // This is the pin where the data is coming out (you don't have to worry about this)

const int button1 = 4;     // the number of the arcade button pins
const int button2 = 5;
const int button3 = 6;
const int button4 = 7;
const int brightnessSwitch = 8;

// variables will change:
int button1State = 0;         // variable for reading the pushbutton status
int button2State = 0;
int button3State = 0;
int button4State = 0;
int switchState = 0;
int panelBrightness = 0;

//This stuff tells the board how the lights are arranged. In our case, it starts at the top left, and
//the signal goes right, and zigzags the rest of the way. It also tells it that it is 20 by 15 LEDs
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(20, 15, PIN,
  NEO_MATRIX_TOP     + NEO_MATRIX_RIGHT +
  NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
  NEO_GRB            + NEO_KHZ800);

void setup() {
  // initialize the buttons as inputs:
  pinMode(button1, INPUT);
  pinMode(button2, INPUT);
  pinMode(button3, INPUT);
  pinMode(button4, INPUT);
  pinMode(brightnessSwitch, INPUT);
  matrix.begin();
  matrix.setTextWrap(false);
  Serial.begin(9600);
  Serial.print("The LED Matrix has started. Default will be activated soon");
}

String panelText = buttonText1; //This is what text gets fed to the panel

int x    = matrix.width();
int pass = 0;

void loop() {
  matrix.setBrightness(panelBrightness); //This sets the overall brightness. 255 is the highest, while 0 is the lowest
  // read the state of the button:
  button1State = digitalRead(button1);
  button2State = digitalRead(button2);
  button3State = digitalRead(button4);
  button4State = digitalRead(button4);
  switchState = digitalRead(brightnessSwitch);
  if (switchState == HIGH){panelBrightness = switchLevel1;} else {panelBrightness = switchLevel2;} //Brightness Logic


  // if-then statements
  if (button1State == HIGH){ //BUTTON 1 CODE START
      static int i = 0; 
  i++;
  for(int y = 0; y < 15; y++)
    for(int x = 0; x < 20; x++)
      if(y & 1)
        matrix.setPixelColor(19 - x + y * 20, matrix.gamma32(matrix.ColorHSV((x + y) * 256 * colorsOnscreen1 + i * 128 * 2)));
      else
        matrix.setPixelColor(x + y * 20, matrix.gamma32(matrix.ColorHSV((x + y) * 256 * colorsOnscreen1 + i * 128 * 2)));

  matrix.setTextColor(matrix.Color(255, 255, 255)); //This determines the text color. If you want to set a text color, search in google "Color Picker" and use the RGB values in place of the numbers in (a,a,a)
  matrix.setCursor(-((millis() / 40) & 127), 4);
  matrix.print(buttonText1);
  matrix.show();
} 
//BUTTON 1 CODE END
   else {
      if (button2State == HIGH){ //BUTTON 2 CODE START
          //PUT WHAT HAPPENS FOR BUTTON 2 HERE
          //BUTTON 2 CODE END
      } else {
          if (button3State == HIGH){ //BUTTON CODE 3 START
                    static int i = 0; 
  i++;
  for(int y = 0; y < 15; y++)
    for(int x = 0; x < 20; x++)
      if(y & 1)
        matrix.setPixelColor(19 - x + y * 20, matrix.gamma32(matrix.ColorHSV((x - y) * 200 * colorsOnscreen3 + i * 128 * 2)));
      else
        matrix.setPixelColor(x + y * 20, matrix.gamma32(matrix.ColorHSV((x - y) * 256 * colorsOnscreen3 + i * 128 * 2)));

  matrix.setTextColor(matrix.Color(255, 255, 255)); //This determines the text color. If you want to set a text color, search in google "Color Picker" and use the RGB values in place of the numbers in (a,b,c)
  matrix.setCursor(-((millis() / 40) & 127), 4);
  matrix.print(buttonText3);
  matrix.show();
}
              //BUTTON 3 CODE END
           else {
              if (button4State == HIGH){ //BUTTON 4 CODE START
                  //PUT WHAT HAPPENS FOR BUTTON 4 HERE
                  //BUTTON 4 CODE END
              } else {
                  //WHAT HAPPENS UNTIL A BUTTON IS PRESSED


   static int i = 0;
  i++;
  //matrix.fillScreen(0);
  for(int y = 0; y < 15; y++)
    for(int x = 0; x < 20; x++)
      if(y & 1)
        matrix.setPixelColor(19 - x + y * 20, matrix.gamma32(matrix.ColorHSV((x + y) * 256 * colorsOnscreenDefault + i * 128 * 2)));
      else
        matrix.setPixelColor(x + y * 20, matrix.gamma32(matrix.ColorHSV((x + y) * 256 * colorsOnscreenDefault + i * 128 * 2)));

  matrix.setTextColor(matrix.Color(255, 255, 255)); //This determines the text color. If you want to set a text color, search in google "Color Picker" and use the RGB values in place of the numbers in (a,b,c)
  matrix.setCursor(-((millis() / 70) & 127), 4);
  matrix.println(defaultText);
  matrix.show();

}}}}


    }

Еще раз спасибо

-Миха

, 👍0

Обсуждение

У вас есть только контакт ввода-вывода -> провод -> кнопка -> провод -> земля? Ничего больше не подключено к кнопке или выводу ввода-вывода?, @Majenko

@Majenko Ага. Я собираюсь изменить это, но это то, что я делал. Если это имеет значение, у меня также были все заземления кнопок, связанные вместе с одним заземлением, потому что мое единственное другое заземление используется для обеспечения заземления, соответствующего источнику питания для вывода данных., @Micah Wagoner


2 ответа


Лучший ответ:

1

Я думаю, что ваша основная проблема заключается в том, как вы читаете кнопки.

  1. Вы просто соединили кнопки с землей и соответствующим контактом цифрового входа на Arduino без каких-либо дополнительных компонентов, как указано в связанной записи на форуме. Но вы упустили очень важную часть: подтягивающий резистор. Когда ваша кнопка нажата, вывод ардуино будет притянут к земле. Но если он не нажат, к контакту ничего не подключено. Такой вывод называется плавающим, так как не имеет фиксированного эталонного значения. Он улавливает любые шумы, возникающие вокруг него (часто это состояние других электронных частей или контактов рядом с ним). Он изменит свое состояние беспорядочно. Вам нужно подтянуть контакт к Vcc (5V в случае Nano), чтобы контакт имел четкое фиксированное состояние, когда кнопка не нажата. Это можно сделать с помощью внешнего или внутреннего подтягивающего резистора Atmega328P (чип на Nano). В сообщении на форуме внутреннее подтягивание активируется выполнением digitalWrite(pin, HIGH); после установки вывода на INPUT. Но я думаю, что более говорящий код просто использует pinMode(pin, INPUT_PULLUP);, который сделает то же самое за один шаг.

  2. В вашем коде вы проверяете, чтобы контакты кнопки были ВЫСОКИМ, как если бы нажатие кнопки сделало контакт ВЫСОКИМ. Но это не так, если подключить кнопку на массу. При нажатии кнопка потянет контакт на ЗАЗЕМЛЕНИЕ, таким образом, значение НИЗКОЕ. Вам нужно проверить, чтобы кнопки стали НИЗКИМИ.

,

Спасибо за ваш быстрый и содержательный ответ. Просто чтобы убедиться, что я правильно интерпретирую ваш комментарий, вы говорите, что если я использую внутреннюю подтяжку на чипе (используя pinMode(pin, INPUT_PULLUP);, то мне не нужно использовать внешний подтягивающий резистор, потому что моя кнопка уже не плавает? Просто пытаюсь убедиться, что я правильно интерпретирую это. Еще раз, спасибо за полезный ответ!, @Micah Wagoner

Да исправить. Вам не нужен внешний подтягивающий резистор, когда вы активируете внутренний. Если к выводу ничего не подключено, он будет иметь состояние HIGH, так как внутренний подтяжка подтянет его к Vcc. Когда кнопка нажата, контакт соединяется с землей, поэтому имеет состояние НИЗКИЙ. Через внутренний подтягивающий резистор будет протекать очень небольшой ток., @chrisl


0

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

Новичкам не следует опускать фигурные скобки {} ни в одной части кода, как это делалось в циклах for.

Вот ваш правильно отформатированный код, за которым следует более чистая версия, которая может быть проще для новичков.

Главный вопрос заключается в том, написаны ли циклы for так, как вы задумали.

Кроме того, использование if {} else { if {}} делает листинг кода несколько запутанным.

Во втором списке показана версия if {} else if {}.

// ЭЙ! ПОСМОТРИ СЮДА! Я знаю, это выглядит запутанно, но не волнуйтесь, я вам помогу! Я Клиппи!
// _________________
// < Я могу помочь вам! >
// ------------------
// \
// \
// __
// / \
// | |
// @ @
// | |
// || |/
// || ||
// |\_/|
// \___/

// Как вы знаете, есть 4 кнопки. Когда они нажаты, они отображают что-то другое. Мы также можем заставить их отображать текст.
// Ниже находятся ПЕРЕМЕННЫЕ, которые определяют, какой текст будет отображаться при нажатии кнопок. Поместите то, что вы хотите, чтобы они отображали между
// кавычки. Если вам ничего не нужно в кнопке, просто поставьте между ними пробел.

//Примечание: только кнопки 1 и 3 могут отображать текст, поэтому давайте поместим текст только в них :)
String buttonText1 = " "; // Опять же, поместите то, что вы хотите, чтобы кнопка 1 отображала в тексте
//Строка buttonText2 = " ";
String buttonText3 = " ";
//Строка buttonText4 = " ";
String defaultText = "   Text for the panel"; //Это то, что появится при первом запуске

//Здесь мы можем настроить яркость панели. Для этого используем переключатель. Вы можете использовать значения от 0 (самое низкое) до 255 (самое высокое)
int switchLevel1 =  10;
int switchLevel2 = 200;

//Здесь мы можем контролировать количество цветов на фоне одновременно. Мы можем настроить это, чтобы получить некоторое разнообразие в наших дисплеях.
int colorsOnscreen1 = 5;           // Для кнопки 1
// целое число цветов на экране2 = 3
int colorsOnscreen3 = 10;          // Для кнопки 3
//int colorsOnscreen4 = 5;
int colorsOnscreenDefault = 3;     // Когда вы его запускаете

int lastButton = 0;                // Материал, нажатый последней кнопкой, передается кнопкам


//------------------------------------------------ ----------------Возможно, вам не нужно беспокоиться об остальном-------------------------------------- -----------------------------------------

// Это вещи, о которых вам не нужно беспокоиться, это для платы
#include <Adafruit_NeoPixel.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SPITFT.h>
#include <Adafruit_SPITFT_Macros.h>
#include <gfxfont.h>
#include <Adafruit_NeoMatrix.h>
#include <gamma.h>
#include "RGB.h"
#ifndef PSTR
 #define PSTR
#include smileytongue24.h
#include yellowsmiley24.h
#endif

#define PIN 3 // Это вывод, на который выводятся данные (вам не нужно об этом беспокоиться)

const int button1          = 4;     // количество контактов аркадной кнопки
const int button2          = 5;
const int button3          = 6;
const int button4          = 7;
const int brightnessSwitch = 8;

// переменные изменятся:
int button1State           = 0;     // переменная для чтения статуса кнопки
int button2State           = 0;
int button3State           = 0;
int button4State           = 0;
int switchState            = 0;
int panelBrightness        = 0;



                                                                        // Этот материал сообщает плате, как расположены источники света.
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(20,                      // В нашем случае он начинается слева вверху,
                                               15,                      // и сигнал идет вправо, а остальную часть пути идет зигзагами.
                                               PIN,                     // Это также говорит ему, что это 20 на 15 светодиодов
                                               NEO_MATRIX_TOP + NEO_MATRIX_RIGHT + NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
                                               NEO_GRB + NEO_KHZ800);

void setup() {
  pinMode(button1, INPUT);                                              // инициализируем кнопки как входы:
  pinMode(button2, INPUT);
  pinMode(button3, INPUT);
  pinMode(button4, INPUT);

  pinMode(brightnessSwitch, INPUT);

  matrix.begin();
  matrix.setTextWrap(false);

  Serial.begin(9600);
  Serial.print("The LED Matrix has started. Default will be activated soon");
}

String panelText = buttonText1;                                         // Это текст, который передается на панель

int x    = matrix.width();
int pass = 0;

void loop() {
  matrix.setBrightness(panelBrightness);                                // Это устанавливает общую яркость. 255 — самый высокий, а 0 — самый низкий

  button1State = digitalRead(button1);                                  // читаем состояние кнопок
  button2State = digitalRead(button2);
  button3State = digitalRead(button4);
  button4State = digitalRead(button4);

  switchState = digitalRead(brightnessSwitch);

  if (switchState == HIGH) { panelBrightness = switchLevel1; }          // Логика яркости
  else                     { panelBrightness = switchLevel2; }


  // операторы если-то
  if (button1State == HIGH) {                                           // КОД КНОПКИ 1 СТАРТ
    static int i = 0;
    i++;
    for(int y = 0; y < 15; y++)
      for(int x = 0; x < 20; x++)
        if(y & 1)
          matrix.setPixelColor(19 - x + y * 20, matrix.gamma32(matrix.ColorHSV((x + y) * 256 * colorsOnscreen1 + i * 128 * 2)));
        else
          matrix.setPixelColor(     x + y * 20, matrix.gamma32(matrix.ColorHSV((x + y) * 256 * colorsOnscreen1 + i * 128 * 2)));

    matrix.setTextColor(matrix.Color(255, 255, 255));                   // Это определяет цвет текста.
    matrix.setCursor(-((millis() / 40) & 127), 4);                      // Если вы хотите установить цвет текста, поищите в гугле "Палитра цветов"
                                                                        // и используем значения RGB вместо чисел в (a,a,a)
    matrix.print(buttonText1);
    matrix.show();
  }                                                                     // КОД КНОПКИ 1 КОНЕЦ

  else {
    if (button2State == HIGH) {                                         // НАЧАТЬ КОД КНОПКИ 2
                                                                        // УКАЖИТЕ ЗДЕСЬ ТО, ЧТО ПРОИСХОДИТ ДЛЯ КНОПКИ 2
    }                                                                   // КОД КНОПКИ 2 КОНЕЦ
    else {
      if (button3State == HIGH) {                                       // КОД КНОПКИ 3 СТАРТ
        static int i = 0;
        i++;
        for(int y = 0; y < 15; y++)
          for(int x = 0; x < 20; x++)
            if(y & 1)
              matrix.setPixelColor(19 - x + y * 20, matrix.gamma32(matrix.ColorHSV((x - y) * 200 * colorsOnscreen3 + i * 128 * 2)));
            else
              matrix.setPixelColor(     x + y * 20, matrix.gamma32(matrix.ColorHSV((x - y) * 256 * colorsOnscreen3 + i * 128 * 2)));

        matrix.setTextColor(matrix.Color(255, 255, 255));
        matrix.setCursor(-((millis() / 40) & 127), 4);

        matrix.print(buttonText3);
        matrix.show();
      }                                                                 // КОД КНОПКИ 3 КОНЕЦ
      else {
        if (button4State == HIGH){                                      // КНОПКА 4 КОД СТАРТ
                                                                        // ПОКАЖИТЕ ЗДЕСЬ ТО, ЧТО ПРОИСХОДИТ ДЛЯ КНОПКИ 4
        }                                                               // КОД КНОПКИ 4 КОНЕЦ
        else {                                                          // ЧТО ПРОИСХОДИТ ДО НАЖАТИЯ КНОПКИ


          static int i = 0;
          i++;
// матрица.fillScreen(0);
          for(int y = 0; y < 15; y++)
            for(int x = 0; x < 20; x++)
              if(y & 1)
                matrix.setPixelColor(19 - x + y * 20, matrix.gamma32(matrix.ColorHSV((x + y) * 256 * colorsOnscreenDefault + i * 128 * 2)));
              else
                matrix.setPixelColor(     x + y * 20, matrix.gamma32(matrix.ColorHSV((x + y) * 256 * colorsOnscreenDefault + i * 128 * 2)));

          matrix.setTextColor(matrix.Color(255, 255, 255));
          matrix.setCursor(-((millis() / 70) & 127), 4);

          matrix.println(defaultText);
          matrix.show();
        }
      }
    }
  }
}

    // ЭЙ! ПОСМОТРИ СЮДА! Я знаю, это выглядит запутанно, но не волнуйтесь, я вам помогу! Я Клиппи!
    // _________________
    // < Я могу помочь вам! >
    // ------------------
    // \
    // \
    // __
    // / \
    // | |
    // @ @
    // | |
    // || |/
    // || ||
    // |\_/|
    // \___/

    // Как вы знаете, есть 4 кнопки. Когда они нажаты, они отображают что-то другое. Мы также можем заставить их отображать текст.
    // Ниже находятся ПЕРЕМЕННЫЕ, которые определяют, какой текст будет отображаться при нажатии кнопок. Поместите то, что вы хотите, чтобы они отображали между
    // кавычки. Если вам ничего не нужно в кнопке, просто поставьте между ними пробел.

                                                  // Примечание: только кнопки 1 и 3 могут отображать текст, поэтому давайте поместим текст только в них :)
    String buttonText1 = " ";                     // Опять же, поместите то, что вы хотите, чтобы кнопка 1 отображала в тексте
// Строка buttonText2 = " ";
    String buttonText3 = " ";
// Строка buttonText4 = " ";

    String defaultText = "   Text for the panel"; // Это то, что появится при первом запуске



    int switchLevel1 =  10;                       // Здесь мы можем настроить яркость панели.
    int switchLevel2 = 200;                       // Для этого мы используем переключатель. Вы можете использовать значения от 0 (самое низкое) до 255 (самое высокое)

                                                  // Здесь мы можем контролировать количество цветов на фоне одновременно.
                                                  // Мы можем настроить это, чтобы получить разнообразие в наших дисплеях.
    int colorsOnscreen1 =  5;                     // Для кнопки 1
// int colorsOnscreen2 = 3;
    int colorsOnscreen3 = 10;                     // Для кнопки 3
// int colorsOnscreen4 = 5;

    int colorsOnscreenDefault = 3;                // Когда вы его запускаете

    int lastButton = 0;                           // Материал, нажатый последней кнопкой, передается кнопкам


    //------------------------------------------------ ----------------Возможно, вам не нужно беспокоиться об остальном-------------------------------------- -----------------------------------------

    // Это вещи, о которых вам не нужно беспокоиться, это для платы

    #include <Adafruit_NeoPixel.h>
    #include <Adafruit_GFX.h>
    #include <Adafruit_SPITFT.h>
    #include <Adafruit_SPITFT_Macros.h>
    #include <gfxfont.h>
    #include <Adafruit_NeoMatrix.h>
    #include <gamma.h>
    #include "RGB.h"
    #ifndef PSTR
      #define PSTR
      #include smileytongue24.h
      #include yellowsmiley24.h
    #endif

    #define PIN 3 // Это вывод, на который выводятся данные (вам не нужно об этом беспокоиться)

    const int button1          = 4;     // количество контактов аркадной кнопки
    const int button2          = 5;
    const int button3          = 6;
    const int button4          = 7;
    const int brightnessSwitch = 8;

    // переменные изменятся:
    int button1State           = 0;     // переменная для чтения статуса кнопки
    int button2State           = 0;
    int button3State           = 0;
    int button4State           = 0;
    int switchState            = 0;
    int panelBrightness        = 0;



                                                                        // Этот материал сообщает плате, как расположены источники света.
    Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(20,                  // В нашем случае он начинается слева вверху,
                                                   15,                  // и сигнал идет вправо, а остальную часть пути идет зигзагами.
                                                   PIN,                 // Это также говорит ему, что это 20 на 15 светодиодов
                                                   NEO_MATRIX_TOP + NEO_MATRIX_RIGHT + NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
                                                   NEO_GRB + NEO_KHZ800);

    void setup() {
      pinMode(button1, INPUT);                                          // инициализируем кнопки как входы:
      pinMode(button2, INPUT);
      pinMode(button3, INPUT);
      pinMode(button4, INPUT);

      pinMode(brightnessSwitch, INPUT);

      matrix.begin();
      matrix.setTextWrap(false);

      Serial.begin(9600);
      Serial.print("The LED Matrix has started. Default will be activated soon");
    }

    String panelText = buttonText1;                                     // Это текст, который передается на панель

    int x    = matrix.width();
    int pass = 0;

    void loop() {
      matrix.setBrightness(panelBrightness);                            // Это устанавливает общую яркость. 255 — самый высокий, а 0 — самый низкий

      button1State = digitalRead(button1);                              // читаем состояние кнопок
      button2State = digitalRead(button2);
      button3State = digitalRead(button4);
      button4State = digitalRead(button4);

      switchState = digitalRead(brightnessSwitch);

      if (switchState == HIGH) { panelBrightness = switchLevel1; }      // Логика яркости
      else                     { panelBrightness = switchLevel2; }


      // операторы если-то
      if (button1State == HIGH) {                                       // КОД КНОПКИ 1 СТАРТ

        static int i = 0;
        i++;
        for (int y = 0; y < 15; y++) {
          for (int x = 0; x < 20; x++) {
            if (y & 1) {
              matrix.setPixelColor(19 - x + y * 20, matrix.gamma32(matrix.ColorHSV((x + y) * 256 * colorsOnscreen1 + i * 128 * 2)));
            }
            else {
              matrix.setPixelColor(     x + y * 20, matrix.gamma32(matrix.ColorHSV((x + y) * 256 * colorsOnscreen1 + i * 128 * 2)));
            }
          }
        }

        matrix.setTextColor(matrix.Color(255, 255, 255));               // Это определяет цвет текста.
        matrix.setCursor(-((millis() / 40) & 127), 4);                  // Если вы хотите установить цвет текста, поищите в гугле "Палитра цветов"
                                                                        // и использовать значения RGB вместо чисел в matrix.Color(r,g,b)
        matrix.print(buttonText1);
        matrix.show();
      }                                                                 // КОД КНОПКИ 1 КОНЕЦ

      else if (button2State == HIGH) {                                  // КОД КНОПКИ 2 СТАРТ
                                                                        // УКАЖИТЕ ЗДЕСЬ ТО, ЧТО ПРОИСХОДИТ ДЛЯ КНОПКИ 2
      }                                                                 // КОД КНОПКИ 2 КОНЕЦ

      else if (button3State == HIGH) {                                  // КОД КНОПКИ 3 СТАРТ

        static int i = 0;
        i++;
        for (int y = 0; y < 15; y++) {
          for (int x = 0; x < 20; x++) {
            if (y & 1) {
              matrix.setPixelColor(19 - x + y * 20, matrix.gamma32(matrix.ColorHSV((x - y) * 200 * colorsOnscreen3 + i * 128 * 2)));
            }
            else {
              matrix.setPixelColor(     x + y * 20, matrix.gamma32(matrix.ColorHSV((x - y) * 256 * colorsOnscreen3 + i * 128 * 2)));
            } 
          } 
        } 

        matrix.setTextColor(matrix.Color(255, 255, 255));
        matrix.setCursor(-((millis() / 40) & 127), 4);

        matrix.print(buttonText3);
        matrix.show();
      }                                                                 // КОД КНОПКИ 3 КОНЕЦ

      else if (button4State == HIGH) {                                  // КОД КНОПКИ 4 СТАРТ
                                                                        // ПОКАЖИТЕ ЗДЕСЬ ТО, ЧТО ПРОИСХОДИТ ДЛЯ КНОПКИ 4
      }                                                                 // КОД КНОПКИ 4 КОНЕЦ

      else {                                                            // ЧТО ПРОИСХОДИТ ДО НАЖАТИЯ КНОПКИ

        static int i = 0;
        i++;
// матрица.fillScreen(0);
        for (int y = 0; y < 15; y++) {
          for (int x = 0; x < 20; x++) {
            if (y & 1) {
              matrix.setPixelColor(19 - x + y * 20, matrix.gamma32(matrix.ColorHSV((x + y) * 256 * colorsOnscreenDefault + i * 128 * 2)));
            }
            else {
              matrix.setPixelColor(     x + y * 20, matrix.gamma32(matrix.ColorHSV((x + y) * 256 * colorsOnscreenDefault + i * 128 * 2)));
            }
          }
        }

        matrix.setTextColor(matrix.Color(255, 255, 255));
        matrix.setCursor(-((millis() / 70) & 127), 4);

        matrix.println(defaultText);
        matrix.show();
      }
    }
,

Спасибо за очистку моего кода! Вы правы, это облегчает понимание. Еще раз спасибо за вашу помощь!, @Micah Wagoner