Помогите с буквенно-цифровым массивом

У меня есть плата Leonardo, и я хочу настроить свои контакты для ввода за один раз с помощью цикла for, но проблема заключается в аналоговых выводах. Я не вижу, как настроить смешанный буквенно-цифровой массив, это дает мне некоторые ошибки.

Код:

// включая библиотеку keyboard.h для функций клавиатуры
#include <Keyboard.h>


// устанавливаем массивы для последующего зацикливания
   int myIntPins[12] = {2,3,4,5,6,7,8,9,10,11,12,13};
   int myChar[12] = {97, 98, 99, 100, 101,102,103,104,105,106,107,108};
  int myChar2[6] = {109,110,111,112,113,114};
 myCharPins[6] = {"A0","A1","A2","A3","A4","A5"};
  int a;
  int x;
  int i;



void setup() {
  // поместите сюда код установки для однократного запуска:



 //Настройка цифровых пинов
for (int i=0; i <= 11; i=i+a){
  pinMode(myIntPins[i],INPUT);
  }

//pinMode(2, INPUT);
//pinMode(3, INPUT);
//pinMode(4, INPUT);
//pinMode(5, INPUT);
//pinMode(6, INPUT);
//pinMode(7, INPUT);
//pinMode(8, INPUT);
//pinMode(9, INPUT);
//pinMode(10, INPUT);
//pinMode(11, INPUT);
//pinMode(12, INPUT);
//pinMode(13, INPUT);

//------------------------------------------------ ------------------------------
//------------------------------------------------ ------------------------------

// настройка аналоговых выводов на цифровые
for (int x=0; x <= 5; x=x+a){
  pinMode(myCharPins[x],INPUT);
  }
//pinMode(A0,INPUT);
//pinMode(A1,INPUT);
//pinMode(A2,INPUT);
//pinMode(A3,INPUT);
//pinMode(A4,INPUT);
//pinMode(A5,INPUT);

// стартовая клавиатура
Keyboard.begin();

}


void loop() {
  // поместите сюда ваш основной код для многократного запуска:

  //если контакт 2 нажат, то отправляем ключ/символ
 // if (digitalRead(2) == LOW) {Keyboard.write(97);}

// вместо того, чтобы выполнять операторы if один за другим, выполнять цикл за один раз
// этот цикл для обычных цифровых выводов
a=1;
  for (int i=0; i <= 11; i=i+a){
    if (digitalRead(myIntPins[i]) == LOW){
      Keyboard.write(myChar[i]);
      }
      }
a=1;
  // этот цикл для аналоговых контактов теперь работает как цифровые контакты
  for (int x=0; x <= 5; x=x+a){
    if (digitalRead(myCharPins[x]) == LOW){
      Keyboard.write(myChar2[x]);
      }
      }

  delay(10);

  }

Ошибка:

    Arduino: 1.8.7 (Windows 10), Board: "Arduino Leonardo"

Mandar_Keyboard_Key_1:10:2: error: 'myCharPins' does not name a type

  myCharPins[6] = {"A0","A1","A2","A3","A4","A5"};

  ^

C:\Users\manue\OneDrive\Documents\Arduino\Mandar_Keyboard_Key_1\Mandar_Keyboard_Key_1.ino: In function 'void setup()':

Mandar_Keyboard_Key_1:45:11: error: 'myCharPins' was not declared in this scope

   pinMode(myCharPins[x],INPUT);

           ^

C:\Users\manue\OneDrive\Documents\Arduino\Mandar_Keyboard_Key_1\Mandar_Keyboard_Key_1.ino: In function 'void loop()':

Mandar_Keyboard_Key_1:77:21: error: 'myCharPins' was not declared in this scope

     if (digitalRead(myCharPins[x]) == LOW){

                     ^

exit status 1
'myCharPins' does not name a type

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

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

Код:

// включая библиотеку keyboard.h для функций клавиатуры
#include <Keyboard.h>


// устанавливаем массивы для последующего зацикливания
   int myIntPins[12] = {2,3,4,5,6,7,8,9,10,11,12,13};
   int myChar[12] = {97, 98, 99, 100, 101,102,103,104,105,106,107,108};
  int myChar2[6] = {109,110,111,112,113,114};
  char myCharPins[6] = {"A0","A1","A2","A3","A4","A5"};
  int a;
  int x;
  int i;



void setup() {
  // поместите сюда код установки для однократного запуска:



 //Настройка цифровых пинов
 a=1;
for (i=0; i <= 11; i+=a){pinMode(myIntPins[i],INPUT);}

//pinMode(2, INPUT);
//pinMode(3, INPUT);
//pinMode(4, INPUT);
//pinMode(5, INPUT);
//pinMode(6, INPUT);
//pinMode(7, INPUT);
//pinMode(8, INPUT);
//pinMode(9, INPUT);
//pinMode(10, INPUT);
//pinMode(11, INPUT);
//pinMode(12, INPUT);
//pinMode(13, INPUT);

//------------------------------------------------ ------------------------------
//------------------------------------------------ ------------------------------

// настройка аналоговых выводов на цифровые
for (x=0; x <= 5; x+=a){pinMode(myCharPins[x],INPUT);}
//pinMode(A0,INPUT);
//pinMode(A1,INPUT);
//pinMode(A2,INPUT);
//pinMode(A3,INPUT);
//pinMode(A4,INPUT);
//pinMode(A5,INPUT);

// стартовая клавиатура
Keyboard.begin();

}


void loop() {
  // поместите сюда ваш основной код для многократного запуска:

  //если контакт 2 нажат, то отправляем ключ/символ
 // if (digitalRead(2) == LOW) {Keyboard.write(97);}

// вместо того, чтобы выполнять операторы if один за другим, выполнять цикл за один раз
// этот цикл для обычных цифровых выводов
for (i=0; i <= 11; i+=a){if (digitalRead(myIntPins[i]) == LOW){Keyboard.write(myChar[i]);}}

  // этот цикл для аналоговых контактов теперь работает как цифровые контакты
  for (x=0; x <= 5; x+=a){if (digitalRead(myCharPins[x]) == LOW){Keyboard.write(myChar2[x]);}}

  delay(10);

  }

Ошибка:

    Arduino: 1.8.7 (Windows 10), Board: "Arduino Leonardo"

Mandar_Keyboard_Key_1:10:54: error: too many initializers for 'char [6]'

   char myCharPins[6] = {"A0","A1","A2","A3","A4","A5"};

                                                      ^

exit status 1
too many initializers for 'char [6]'

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

, 👍2

Обсуждение

Если вы покажете, в чем разница между двумя наборами кода, было бы полезно, @Greenonline

почему вы решили, что это должна быть строка "A0"? у вас есть pinMode(A0, INPUT), а не pinMode("A0", INPUT), @Juraj

@Juraj Idk Я думал, что int предназначен для целых чисел, а сочетание букв и чисел будет строкой, в которой все, не вини меня, я не ходил в школу на программирование, это просто хобби, которое мне нравится, и я учусь, ты знаешь, @Manuel Hernandez


1 ответ


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

5

Все эти контакты "A1", "A2" имеют другие номера. A1 или A2 #определены в ядре как некоторое число. Вы можете просто использовать A1 или A2, и это сработает.

Например, попробуйте эту строку и посмотрите, что она напечатает:

Serial.println(A0);

Что касается пинов, просто поместите A0, A1 и т. д. в массив целых чисел и не ставьте кавычки. Эти символы заменяются числами, потому что они определены как константы.

int myIntPins[12] = {2,3,4,5,6,7,8,9,10,11,12,13, A0, A1, A2};
,

Это сработало отлично! Большое спасибо!!!, @Manuel Hernandez