Помогите с буквенно-цифровым массивом
У меня есть плата 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.
1 ответ
Лучший ответ:
Все эти контакты "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
- Как использовать SPI на Arduino?
- Возможно ли иметь массив массивов int?
- Нажать клавишу Windows, используя «keyboard.press();»
- Как подключить вывод INT MPU 6050?
- Улучшенное циклическое переключение цветов RGB.
- Проблема с загрузкой моего скетча на Ардуино
- Ошибка: invalid application of 'sizeof' to incomplete type 'int []' при попытке вычислить размер массива в библиотеке
- Отправка мультимедийных клавиш клавиатуры с помощью библиотеки клавиатур
Если вы покажете, в чем разница между двумя наборами кода, было бы полезно, @Greenonline
почему вы решили, что это должна быть строка "A0"? у вас есть
pinMode(A0, INPUT)
, а неpinMode("A0", INPUT)
, @Juraj@Juraj Idk Я думал, что int предназначен для целых чисел, а сочетание букв и чисел будет строкой, в которой все, не вини меня, я не ходил в школу на программирование, это просто хобби, которое мне нравится, и я учусь, ты знаешь, @Manuel Hernandez