Почему я не могу изменить значения массива, даже если оператор успешно вызван? TFT-сенсорный экран

#include <Adafruit_GFX.h>    // Базовая графическая библиотека
#include "LGDP4535.h" // Библиотека, специфичная для оборудования
#include <zTouchScreen.h>
#define BOXSIZE   40
// Назначаем понятные человеку имена некоторым общим 16-битным значениям цвета:
#define BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF

LGDP4535 tft; // С помощью щита фиксируются все линии управления и данных

#define YP A3  // должен быть аналоговым выводом, используйте обозначение «An»!
#define XM A2  // должен быть аналоговым выводом, используйте обозначение «An»!
#define YM 9   // может быть цифровым выводом
#define XP 8   // может быть цифровым контактом

// Вам необходимо выполнить калибровку в соответствии с вашим ЖК-дисплеем
#define TS_MINX 930
#define TS_MINY 903
#define TS_MAXX 142
#define TS_MAXY 117

#define PENRADIUS 3
#define MINPRESSURE 10
#define MAXPRESSURE 1000

int matrix[2][3]; // Первоначальное объявление
int array[3]

TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

// массив = начинается с 1, но чтение переменной начинается с 0
String ButtonAction[9]={"a", "b", "c", "d", "e", "f", "g", "h", "i"};
boolean ActiveMenu=true;

void setup(void) {
   Serial.begin(9600);
   tft.reset();
   tft.begin();
   ts.InitVariable(3, 240, 320, TS_MINX, TS_MAXX, TS_MINY, TS_MAXY, MINPRESSURE, MAXPRESSURE);
   tft.fillScreen(BLACK);
   DrawIt(CYAN, "draw");
   DrawIt(BLACK, "text");
}

void loop() {//НЕКОТОРЫЕ ДРУГИЕ ВЕЩИ}

unsigned long DrawIt(uint16_t color, String CurrentAction) {

  int timedcycle=0;

  if (CurrentAction == "text") {
     int matrix[2][3]={{25,150,265},{45,100,155}};
     int array[3]={3,3,3};

     tft.setRotation(3);
     tft.setTextColor(BLACK);
     tft.setTextSize(1);

     Serial.println("Text Columns");
  }

  else if (CurrentAction == "draw") {
    int matrix[2][3]={{260,140,20},{40,150,95}};
    int array[3]={3,3,3}; 
  }

  Serial.println(CurrentAction);

  for(int j=0; j<3; j++) {
     for(int i=0; i<array[j]; i++) {

       if (CurrentAction == "draw") {

         if (timedcycle == 7) {
           tft.fillCircle(100, 160, 15, WHITE);
         }         
         else {       
           tft.fillRect(matrix[1][j], matrix[0][i], 20,40, color);
         }

       }  
       else if (CurrentAction == "text") {
         if (timedcycle == 4) {
           true;
           //tft.fillCircle(100, 160, 15, БЕЛЫЙ);
         }         
         else {       
           tft.setCursor(matrix[0][j], matrix[1][i]);         
           tft.println(ButtonAction[timedcycle]);
         }

       }
     timedcycle++;  
     } 
  } 
}

Как видите, я пытаюсь нарисовать кое-что на сенсорном TFT-экране. Кажется, все работает, но что бы я ни делал, я не могу изменить значение массива.

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

Я предполагаю, что что-то не так, но я не могу точно определить, что именно! Заранее спасибо!

, 👍1

Обсуждение

Вы определили три матрицы/массива; один в глобальном контексте и один на каждый блок в локальном контексте DrawIt. Определения в локальном контексте удаляются компилятором, поскольку они не используются (выпадают из контекста). Вместо этого вам нужно назначить глобальную матрицу/массив., @Mikael Patel

Итак, моя ошибка связана с объявлением переменных, поскольку мои значения отбрасываются естественным поведением компилятора. Я об этом не подумал, но то же самое происходит и на других языках, но я не учел функции «цикл» и «настройка». Спасибо за быстрое объяснение, @DarkXDroid