Использование переменной для индексации массива

Я использую библиотеку клавиатуры, чтобы вернуть число 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? но я не знаю, как к нему обращаться и как его изменить.

, 👍1

Обсуждение

`я совершенно уверен, что это возвращает int " - Неправильно. Он возвращает символ. Затем вам нужно преобразовать его в целое число, прежде чем вы сможете использовать его в качестве индекса массива. Подсказка: вычтите ноль., @Majenko

{'1','2','3'}, {'4','5','6'}, {'7','8','9'} это символы ASCII ... массив равен{49, 50, 51}, {52, 53, 54}, {55, 56, 57} ... сделайте дикое предположение, каким должен быть массив, если вам нужны значения от 1 до 9, @jsotola


1 ответ


1

не буду притворяться, что понимаю, почему все мои номера клавиатуры на 48 выше, чем число, напечатанное на клавиатуре, но:

int key2 = key -48;

работает

,

Одно слово для google: "ASCII"., @Majenko