Почему я не могу изменить значения массива, даже если оператор успешно вызван? 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-экране. Кажется, все работает, но что бы я ни делал, я не могу изменить значение массива.
Если я инициализирую переменную массива заранее определенным значением, оно не изменится, даже если оператор будет вызван правильно. Я вижу, что он работает через последовательный порт, но массив по-прежнему не меняется.
Я предполагаю, что что-то не так, но я не могу точно определить, что именно! Заранее спасибо!
@DarkXDroid, 👍1
Обсуждение0
Смотрите также:
- Как записать последовательность кнопок и сохранить ее в массиве
- Как вернуть значение массива символов в функции Arduino IDE?
- Использование массивов, двоичных данных и битового чтения
- Хранение значений широты и долготы в виде символов с заданной точностью
- Матричный дисплей с Arduino UNO (ПРОБЛЕМА)
- Почему я не могу получить размер массива указателей
- Как преобразовать строку в шестнадцатеричный массив
- Как добавить два сборочных массива в arduino
Вы определили три матрицы/массива; один в глобальном контексте и один на каждый блок в локальном контексте DrawIt. Определения в локальном контексте удаляются компилятором, поскольку они не используются (выпадают из контекста). Вместо этого вам нужно назначить глобальную матрицу/массив., @Mikael Patel
Итак, моя ошибка связана с объявлением переменных, поскольку мои значения отбрасываются естественным поведением компилятора. Я об этом не подумал, но то же самое происходит и на других языках, но я не учел функции «цикл» и «настройка». Спасибо за быстрое объяснение, @DarkXDroid