Arduino Playground — HomePage
Arduino Playground is a work in progress. We can use all the help you can give, so please read the Participate section and get your fingers typing!
Playground Content Tree
Arduino en Español, Български, Català, Deutsch, Français, Italiano, Português, Русский
Manuals and Curriculum
- More Good starting places — Cohesive documentation that will step you through a variety of topics.
Board Setup and Configuration
- Learn more about using and configuring your boards. For example: power supplies, burning bootloaders, firmwares, etc.
Development Tools
- Software for PCs for Arduino development.
Arduino on other Chips
- The Arduino IDE can be configured to program a variety of microcontrollers, not just the ones found on the standard Arduino boards.
Interfacing With Hardware
- Output — Examples and information for specific output devices and peripherals: How to connect and wire up devices and code to drive them.
- Input — Examples and information on specific input devices and peripherals: How to connect and wire up devices and code to get data from them.
- User Interface
- Storage — Adding external storage to your Arduino board.
- Communication — various means of communicating to and from an Arduino board.
- Data Logging and Plotting — libraries for SD cards, data loggers and plotters
- Power supplies — Solutions for powering your project.
- General — General interfacing that does not fit under any of the categories, or span across multiple.
Interfacing with Software
- How to get Arduino to talk to various pieces of software on your computer.
User Code Library
- Here you find general use software snippets and libraries for calculations and ‘internal’ purposed. Tutorials for learning C, math, sleep, etc.
- Snippets and Sketches
- Libraries
- Tutorials
- If you have code to contribute related to an external device, find the right spot under Interfacing With Hardware.
Suggestions & Bugs
- With your help this free open source project can continue to improve. Bug reports, feature requests, and pull requests are welcome!
Electronics Techniques
- Soldering tutorials and electronics texts and resources.
Sources for Electronic Parts
Related Hardware and Initiatives
- Arduino-compatible hardware, related initiatives, and other microcontroller platforms.
Arduino People/Groups & Sites
Exhibition
- A gallery of projects made with Arduino (as opposed to tutorials on how to recreate them).
Project Ideas
- A list of project ideas, divided into three difficulty levels:
Easy, Intermediate and Advanced.
Languages
- Català
- Español — Spanish
- Français
- Italiano
- Deutsch
- Português
- Simplified Chinese (简体中文)
Проблема инициализации массива struct (arduino uno, array)
Цель для этого состоит в том, чтобы создать структуру, которая включает в себя имя, идентификатор, имя файла и логическое значение, а затем создать массив этих структур.
struct Amiibo { char *aName{}; char *ID{}; char *AudioFileName{}; bool alreadyPlayed{false}; }; Amiibo amii[20] = { {"Mario","A5005B00","MARIO",false}, //0 {"Meta Knight","A5 00 02 00","MK"}, //1 {"Inkling", "A5 00 05 00","INK"}, //2 {"Donkey Kong","A5 00 01 00","DK"}, //3 {"Lucas","A5 00 0A 00","LUCAS"}, //4 {"Duck Hunt", "A5 00 08 00","DUCKH"}, //5 {"Ocarina of Time Link","A5 00 01 00","OOTL"}, //6 {"Breath of The Wild Link","random","BOTWL"}, //7 {"8-bit Link","random","8BITL"}, //8 {"Toon Link","random","TOONL"}, //9 {"Mr. Game and Watch","random","GANDW"}, //10 {"Falco","random","FALCO"}, //11 {"King Dedede","random","DEDEDE"}, //12 {"Mewtwo","random","MEWTWO"}, //13 {"Captain Falcon","random","CAPF"}, //14 {"ROB","random","ROB"}, //15 {"PAC-MAN","random","PACMAN"}, //16 {"Cloud","random","CLOUD"}, //17 {"Ness","random","NESS"}, //18 {"Ryu","random","RYU"} //19 };
Это дает мне следующую ошибку:
ошибка: не удалось преобразовать » {«Mario», «A5005B00», «MARIO», false}» из » в «Amiibo»
И та же ошибка для всех остальных элементов массива.
скобки вокруг скалярного интилизатора типа «Amiibo»
Я не знаю, что с этим делать, так как совершенно уверен, что это не скалярный тип.
Мне бы очень хотелось создать структурный массив, чтобы я мог циклически перебирать их наугад, используя случайное семя. Это не должно быть так сложно, но я упираюсь в стену. Я был бы признателен за любой совет, который вы все должны дать. Спасибо.
▲ 0
Если вы используете значения по умолчанию в объявлении структуры, вы должны определить также конструкторы для установки определенных элементов:
struct Amiibo { const char *aName{}; const char *ID{}; const char *AudioFileName{}; bool alreadyPlayed{false}; Amiibo() = default; // реализация по умолчанию для конструктора default Amiibo(const char* name, const char* id, const char * audio) // конструктор с тремя строками c в качестве параметров : aName{ name } , ID{ id } , AudioFileName{ audio } { ; } }; Amiibo amii[] = { {"Mario","A5005B00","MARIO",false}, //0 {"Meta Knight","A5 00 02 00","MK"}, //1 {"Inkling", "A5 00 05 00","INK"}, //2 {"Donkey Kong","A5 00 01 00","DK"}, //3 {"Lucas","A5 00 0A 00","LUCAS"}, //4 {"Duck Hunt", "A5 00 08 00","DUCKH"}, //5 {"Ocarina of Time Link","A5 00 01 00","OOTL"}, //6 {"Breath of The Wild Link","random","BOTWL"}, //7 {"8-bit Link","random","8BITL"}, //8 {"Toon Link","random","TOONL"}, //9 {"Mr.Game and Watch","random","GANDW"}, //10 {"Falco","random","FALCO"}, //11 {"King Dedede","random","DEDEDE"}, //12 {"Mewtwo","random","MEWTWO"}, //13 {"Captain Falcon","random","CAPF"}, //14 {"ROB","random","ROB"}, //15 {"PAC-MAN","random","PACMAN"}, //16 {"Cloud","random","CLOUD"}, //17 {"Ness","random","NESS"}, //18 {"Ryu","random","RYU"} //19 };
Кстати на старых AVR все эти строки также будут храниться в памяти
, @KIIV
Структура struct | Детская площадка Simple Simon
Сохранить ПодписатьсяПожалуйста, войдите, чтобы подписаться на это руководство.
После входа в систему вы будете перенаправлены обратно к этому руководству и сможете подписаться на него.
Поиграйте в игру некоторое время, прежде чем читать этот раздел.
В предыдущем разделе я не упомянул ни одну из строк кода в верхней части скетча. Большинство из них являются обычными глобальными переменными и довольно распространенными константами. Однако этот раздел кода может быть для вас новым.
кнопка структуры { uint8_t capPad[2]; uint8_t пиксель[3]; uint32_t цвет; uint16_t частота; } симонбуттон[] = { { {3,2}, {0,1,2}, 0x00FF00, 415 }, // ЗЕЛЕНЫЙ { {0,1}, {2,3,4}, 0xFFFF00, 252 }, // ЖЕЛТЫЙ { {12, 6}, {5,6,7}, 0x0000FF, 209 }, // СИНИЙ { {9, 10}, {7,8,9}, 0xFF0000, 310 }, // КРАСНЫЙ };
Это определение и инициализация массива ( simonButton[]
) чего-то, называемого структурой . Структура происходит из языка программирования C, но также поддерживается в C++ и, следовательно, в Arduino. В основном это позволяет нам создать новую переменную, которая представляет собой набор информации, связанной с чем-то, например, с «кнопкой» Саймона. Это позволяет нам передавать и получать доступ к этой информации из одной ссылки. Нам не нужно передавать каждый отдельный фрагмент информации отдельно.
Разговор о структурах может быть довольно сложным, и они являются предшественниками более сложного класса
C++ и мира ООП. Но они очень полезны, и мы довольно просто используем их в нашем коде Simple Simon. Чтобы лучше понять, чем полезна структура, давайте рассмотрим более простой пример — двумерную точку.
Двумерная точка представлена значением x
и y
. Мы могли бы создать их как отдельные переменные:
float x; плавать у;
, а затем используйте их как обычно:
x = 45,3; у = -108,6;
Но что, если я хочу передать эту 2D-точку функции? Или что, если я хочу создать еще одну 2D-точку? Вещи начинают становиться немного грязными. Здесь поможет структура. Вместо двух отдельных переменных мы создаем одну структуру для представления 2D-точки и помещаем туда переменные.
точка структуры { плавать х; плавать у; }
А затем создать новую точечную переменную:
точка структуры someLocation;
И присвойте ему значения:
someLocation.x = 45.3; SomeLocation.y = -108,6;
Теперь все, что нужно сделать, это передать переменную someLocation
В коде Simple Simon реализована одна интересная вещь — создание и инициализация значений структуры за один шаг. Для нашего 2D-точечного примера это будет выглядеть так:
точка структуры { плавать х; плавать у; } некоторое расположение = { 45,3, -108,6 }
Это просто быстрый способ создать переменную и присвоить ей некоторые начальные значения.
Возвращаясь к нашей игре «Простой Саймон», подумайте о том, что имеет каждая из четырех «кнопок». Наиболее очевидным является цвет . Но они тоже издают звук при нажатии, и у каждого свой тон . Поскольку мы пытаемся реализовать их на нашей Circuit Playground, мы будем использовать набор из NeoPixels , чтобы показать цвет. Также мы планируем использовать емкостное касание для кнопок, при этом каждая кнопка будет иметь пару пэдов . Итак, на каждую «кнопку» у нас есть следующие позиции:
- 2 емкостных тачпада
- 3 х NeoPixels
- цвет
- тон
Эй, должно быть знакомо. Посмотрите еще раз на определение структуры:
struct button { uint8_t capPad[2]; uint8_t пиксель[3]; uint32_t цвет; uint16_t частота; }
Как в списке. Для каждой «кнопки» у нас есть индексы для 2 емкостных сенсорных панелей, индексы для 3 NeoPixels, цвет для NeoPixels и частота тона для кнопки.
У нас есть более одной «кнопки», поэтому мы создаем их массив и инициализируем их значения:
simonButton[] = { { {3,2}, {0,1,2}, 0x00FF00, 415 }, // ЗЕЛЕНЫЙ { {0,1}, {2,3,4}, 0xFFFF00, 252 }, // ЖЕЛТЫЙ { {12, 6}, {5,6,7}, 0x0000FF, 209 }, // СИНИЙ { {9, 10}, {7,8,9}, 0xFF0000, 310 }, // КРАСНЫЙ };
Каждая строка является элементом массива и представляет одну кнопку. Каждый элемент в каждой строке соответствует значению структуры и используется для определения конкретных кнопок. Например, первая строка определяет ЗЕЛЕНУЮ кнопку как имеющую емкостные сенсорные панели № 3 и № 2, NeoPixels № 0, № 1 и № 2, зеленый цвет (в шестнадцатеричном формате) и частоту 415 Гц.
Затем, если нам нужна частота тона ЗЕЛЁНОЙ кнопки, синтаксис такой:
simonButton[0].freq
Цвет для СИНЕЙ кнопки?
simonButton[2].color
Индекс 2-го НеоПикселя для КРАСНОЙ кнопки?
simonButton[3].pixel[1]
и т.д. и т.п.
Надеюсь, это имеет смысл, и вы видите, насколько это полезно. Если нет, то просто получайте удовольствие, играя в игру… пока.
Просто пытаюсь упростить. Но это вполне выполнимо, так как внутри Arduino используется C++.
Прохождение кода CircuitPython версии
Это руководство было впервые опубликовано 23 января 2017 года. обновлено 23 января 2017 г.
Эта страница (Структура структуры) последний раз обновлялась 19 января 2017 г.
Текстовый редактор на базе tinymce.