Arduino struct: Структуры и перечисления

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»

И та же ошибка для всех остальных элементов массива.

Я попытался изменить amii[20] на указатель с помощью *amii[20]. Это привело меня к этой ошибке:

скобки вокруг скалярного интилизатора типа «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

. Ценности приходят вместе с поездкой. И их не спутать с какими-то другими значениями. Если нам нужна еще одна 2D-точка, мы просто создаем еще одну переменную или, еще лучше, их массив.

В коде 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.

Arduino #19: структуры файлов – Курс

Политика конфиденциальности

Какую информацию мы собираем?
Мы собираем информацию от вас, когда вы регистрируетесь на нашем сайте или размещаете заказ. При заказе или регистрации на нашем сайте, в зависимости от обстоятельств, вас могут попросить ввести: имя, адрес электронной почты или почтовый адрес.
Для чего мы используем вашу информацию?
Любая информация, которую мы получаем от вас, может быть использована одним из следующих способов: Чтобы персонализировать ваш опыт (Ваша информация помогает нам лучше реагировать на ваши индивидуальные потребности) Для улучшения нашего сайта (мы постоянно стремимся улучшить предложения нашего веб-сайта на основе информации и отзывов, которые мы получаем от вас) Для улучшения обслуживания клиентов (Ваша информация помогает нам более эффективно реагировать на ваши запросы обслуживания клиентов и потребности в поддержке) Для обработки транзакций Ваша информация, будь то общедоступная или частная, не будет продаваться, обмениваться, передаваться или передаваться какой-либо другой компании по какой бы то ни было причине без вашего согласия, кроме как для явной цели доставки приобретенного продукта или запрошенной услуги. Для администрирования конкурса, рекламной акции, опроса или другой функции сайта Для отправки периодических электронных писем Адрес электронной почты, который вы предоставляете для обработки заказа, будет использоваться только для отправки вам информации и обновлений, касающихся вашего заказа.
Как мы защищаем вашу информацию?
Мы применяем различные меры безопасности для обеспечения безопасности вашей личной информации, когда вы размещаете заказ или вводите, отправляете или получаете доступ к своей личной информации. Мы предлагаем использование безопасного сервера. Вся предоставленная конфиденциальная/кредитная информация передается с помощью технологии Secure Socket Layer (SSL), а затем зашифровывается в нашу базу данных поставщиков платежных шлюзов, чтобы быть доступной только для тех, кто имеет специальные права доступа к таким системам, и они обязаны сохранять конфиденциальность информации. После транзакции ваша личная информация (кредитные карты, номера социального страхования, финансовые данные и т. д.) не будет храниться в файле более 60 дней.
Используем ли мы файлы cookie?
Да (файлы cookie — это небольшие файлы, которые сайт или его поставщик услуг передает на жесткий диск вашего компьютера через веб-браузер (если вы разрешаете), что позволяет сайтам или системам поставщиков услуг распознавать ваш браузер, а также собирать и запоминать определенную информацию Мы используем файлы cookie, чтобы помочь нам запомнить и обработать товары в вашей корзине, понять и сохранить ваши предпочтения для будущих посещений, отслеживать рекламу и собирать сводные данные о трафике сайта и взаимодействии с ним, чтобы мы могли предложить лучший опыт работы с сайтом и инструменты в будущее. Мы можем заключить договор со сторонними поставщиками услуг, чтобы помочь нам лучше понять посетителей нашего сайта. Этим поставщикам услуг не разрешается использовать информацию, собранную от нашего имени, кроме как для помощи в ведении и улучшении нашего бизнеса. Если вы предпочитаете, вы можете выбрать, чтобы ваш компьютер предупреждал вас каждый раз, когда отправляется файл cookie, или вы можете отключить все файлы cookie в настройках своего браузера. Как и на большинстве веб-сайтов, если вы отключите файлы cookie, некоторые из наших сервисов могут работать неправильно. Тем не менее, вы все еще можете размещать заказы, связавшись со службой поддержки клиентов. Google Аналитика Мы используем Google Analytics на наших сайтах для анонимных отчетов об использовании сайта и для рекламы на сайте. Если вы хотите отказаться от отслеживания Google Analytics вашего поведения на наших сайтах, воспользуйтесь этой ссылкой (https://tools.google.com/dlpage/gaoptout/)
Раскрываем ли мы какую-либо информацию внешним сторонам?
Мы не продаем, не обмениваем или иным образом не передаем третьим лицам вашу личную информацию. Это не включает доверенных третьих лиц, которые помогают нам в работе нашего веб-сайта, ведении нашего бизнеса или обслуживании вас, если эти стороны соглашаются сохранять конфиденциальность этой информации. Мы также можем разглашать вашу информацию, когда мы считаем, что разглашение необходимо для соблюдения закона, обеспечения соблюдения политик нашего сайта или защиты наших или чужих прав, собственности или безопасности. Однако информация о посетителях, не позволяющая установить личность, может быть предоставлена ​​другим сторонам для маркетинговых, рекламных или других целей.
Регистрация
Минимальная информация, необходимая нам для регистрации, — это ваше имя, адрес электронной почты и пароль. Мы будем задавать вам дополнительные вопросы по различным услугам, в том числе по стимулированию сбыта. Если не указано иное, вы должны ответить на все регистрационные вопросы. Мы также можем задать некоторые другие добровольные вопросы во время регистрации в определенных службах (например, в профессиональных сетях), чтобы мы могли получить более четкое представление о том, кто вы. Это также позволяет нам персонализировать услуги для вас. Чтобы помочь нам в нашем маркетинге, в дополнение к данным, которые вы предоставляете нам при регистрации, мы также можем получать данные от доверенных третьих лиц, чтобы помочь нам понять, что вас может заинтересовать. Эта «профилирующая» информация создается из из различных источников, включая общедоступные данные (например, списки избирателей) или из таких источников, как опросы и опросы, в отношении которых вы дали разрешение на передачу ваших данных. Вы можете отказаться от передачи таких данных Guardian из этих источников, войдя в свою учетную запись и изменив настройки в разделе конфиденциальности. После того, как вы зарегистрируетесь, и с вашего разрешения, мы можем отправлять вам электронные письма, которые, по нашему мнению, могут вас заинтересовать. Информационные бюллетени могут быть персонализированы на основе того, что вы читали на theguardian.com. В любой момент вы можете принять решение не получать эти электронные письма и сможете «отписаться». Вход в систему с использованием учетных данных социальной сети Если вы входите на наши сайты, используя учетную запись Facebook, вы предоставляете Facebook разрешение на передачу нам ваших данных пользователя. Это будет включать ваше имя, адрес электронной почты, дату рождения и местонахождение, которые затем будут использоваться для формирования личности Хранителя. Вы также можете использовать свою фотографию из Facebook как часть своего профиля. Это также позволит нам и Facebook делиться вашими сетями, идентификатором пользователя и любой другой информацией, которую вы решите предоставить в соответствии с настройками вашей учетной записи Facebook. Если вы удалите приложение Guardian из настроек Facebook, у нас больше не будет доступа к этой информации. Если вы входите на наши сайты, используя учетную запись Google, вы предоставляете Google разрешение на передачу нам ваших данных пользователя. Это будет включать ваше имя, адрес электронной почты, дату рождения, пол и местонахождение, которые мы затем используем для формирования личности Хранителя. Вы можете использовать свою фотографию из Google как часть своего профиля. Это также позволяет нам делиться вашими сетями, идентификатором пользователя и любой другой информацией, которую вы решите предоставить в соответствии с настройками вашей учетной записи Google. Если вы удалите Guardian из настроек Google, у нас больше не будет доступа к этой информации. Если вы входите на наши сайты, используя учетную запись Twitter, мы получаем ваш аватар (небольшое изображение, которое появляется рядом с вашими твитами) и имя пользователя Twitter.
Соблюдение Закона о защите конфиденциальности детей в Интернете
Мы соблюдаем требования COPPA (Закон о защите конфиденциальности детей в Интернете), мы не собираем никакой информации от лиц моложе 13 лет.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *