Использование переменной для индексации массива
Я использую библиотеку клавиатуры, чтобы вернуть число 1-9. (я совершенно уверен, что это возвращает int) У меня есть массив (данные), показывающий состояние каждого нажатия кнопки. поэтому я хотел бы, чтобы число, возвращаемое клавиатурой (клавишей), было индексным номером, который редактируется от 0 до 1 и от 1 до 0.
//УДАЛЕННАЯ КЛАВИАТУРА ДЛЯ УПРАВЛЕНИЯ ВЫХОДАМИ ЧЕРЕЗ ПОСЛЕДОВАТЕЛЬНЫЙ
#include <Keypad.h>
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
};
byte rowPins[ROWS] = {5, 4, 3, 2}; //подсоедините к распиновке строк клавиатуры
byte colPins[COLS] = {9, 8, 7, 6}; //подключение к выводам колонок клавиатуры
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
int iAm = 1; //this is device number 1
float checkSum = 0.00; //check sum to send as serial
float voltage = 5.26; //system voltage
bool data[8] {0, 0, 0, 0, 0, 0, 0, 0, 0}; //keypad output call
void setup() {
Serial.begin(9600);
}
void loop() {
int key = keypad.getKey();
if (key) {
data[key] = 1;
//checkSum = voltage * (iAm + data[0] + data[1] + data[2] + data[3] + data[4] + data[5] + data[6] + data[7] + data[8] + data[9]);
//Serial.print(iAm);
//Serial.print("/");
Serial.print(data[1]);
Serial.print("/");
Serial.print(data[2]);
Serial.print("/");
Serial.print(data[3]);
Serial.print("/");
Serial.print(data[4]);
Serial.print("/");
Serial.print(data[5]);
Serial.print("/");
Serial.print(data[6]);
Serial.print("/");
Serial.print(data[7]);
Serial.print("/");
Serial.print(data[8]);
Serial.print("/");
Serial.print(data[9]);
Serial.print("/");
Serial.print(voltage);
Serial.println("/");
//Serial.println(checkSum);
}
}
я могу изменить расположение индекса, введя data[1] = 1, но не как переменную, поэтому я подозреваю, что индекс не может быть адресован как int? но я не знаю, как к нему обращаться и как его изменить.
@dogfood, 👍1
Обсуждение1 ответ
▲ 1
не буду притворяться, что понимаю, почему все мои номера клавиатуры на 48 выше, чем число, напечатанное на клавиатуре, но:
int key2 = key -48;
работает
,
@dogfood
Одно слово для google: "ASCII"., @Majenko
Смотрите также:
- Как изменить байт на целое число? - Arduino
- Некоторые переменные не сохраняют свои значения при выходе из цикла while?
- Сохранение файла .txt на SD-карту и чтение данных каждого содержимого в файл txt, а затем сохранение его в переменной
- Как записать последовательность кнопок и сохранить ее в массиве
- Как вернуть значение массива символов в функции Arduino IDE?
- Объявленная переменная внутри void setup не видится в void loop
- Почему я не могу изменить значения массива, даже если оператор успешно вызван? TFT-сенсорный экран
- Хранить переменную?
`я совершенно уверен, что это возвращает int " - Неправильно. Он возвращает символ. Затем вам нужно преобразовать его в целое число, прежде чем вы сможете использовать его в качестве индекса массива. Подсказка: вычтите ноль., @Majenko
{'1','2','3'}, {'4','5','6'}, {'7','8','9'}
это символы ASCII ... массив равен{49, 50, 51}, {52, 53, 54}, {55, 56, 57}
... сделайте дикое предположение, каким должен быть массив, если вам нужны значения от 1 до 9, @jsotola