![Робот Arduino Otto с държавна машина: 4 стъпки Робот Arduino Otto с държавна машина: 4 стъпки](https://i.howwhatproduce.com/images/011/image-32751-j.webp)
Съдържание:
2025 Автор: John Day | [email protected]. Последно модифициран: 2025-01-23 14:36
![Image Image](https://i.howwhatproduce.com/images/011/image-32751-2-j.webp)
![](https://i.ytimg.com/vi/pEzC1D3wuBI/hqdefault.jpg)
Резюме на Проекта
В този проект искам да ви покажа начин за програмиране на Otto Robot, който е базиран на Arduino DIY робот. С помощта на YAKINDU Statechart Tools (безплатни за некомерсиални) можем лесно да използваме състоятелни машини за графично моделиране на поведението на Otto Robot и генериране на C/C ++ код. Ще използваме един от техните примери, за да разширим поведението по наш вкус.
За хората, които не знаят какво е държавна машина и не искат да ровят из сложната статия в Уикипедия, ето малко обяснение:
Машината на състоянието е само възли и пътища между тези възли. Имате начален възел и можете да поемете по пътищата до други възли в зависимост от техните защитници, които могат да бъдат представени от събития. Тези събития се повдигат или от самата машина на състоянието, или отвън (като функция и т.н.).
Самият инструмент използва интерфейс за плъзгане и пускане и език, специфичен за домейна. Ще го разгледам вместо вас, така че не е нужно да ровите в тяхната документация, за да стартирате вашия Ото. Настройването на IDE не е твърде трудно, защото всички приставки и т.н. трябва да се инсталират автоматично.
Консумативи
Ото робот или робот Зоуи
И двата робота работят по същество еднакво и използват един и същ API. Otto Robot е робот „Направи си сам“със своите части онлайн, готов за отпечатване с 3D принтер, ако случайно имате такъв. Алтернативата е роботът Zowi, който може да бъде закупен онлайн и готов за употреба.
Инструменти за диаграми на състоянието на YAKINDU
Инструментът, който ще използваме за моделиране на машината на състоянието. Можете да започнете с 30-дневен пробен период и след това да получите безплатен лиценз за некомерсиална употреба.
Eclipse C ++ IDE за Arduino Plugin
Не е нужно да го изтегляме ръчно, защото IDE го прави вместо нас. Все още си мислех, че би било хубаво да го изброя тук.
Стъпка 1: Настройване на всичко
![Разбиране как да взаимодействаме с Ото Разбиране как да взаимодействаме с Ото](https://i.howwhatproduce.com/images/011/image-32751-3-j.webp)
След като инсталирате IDE, стартирайте го и настройте работно пространство навсякъде на вашия компютър (настройката е идентична с използването на Eclipse за първи път). Когато програмата стартира напълно, щракнете далеч от страницата за добре дошли и щракнете върху „Файл -> Ново -> Пример…“и след това изберете „Примери на диаграма на състоянието на YAKINDU“, изчакайте малко и потърсете „Вградени системи -> Zowi (C ++) "пример.
ВАЖНО: Кликнете върху горния десен бутон, наречен „Инсталиране на зависимости …“! Това инсталира всичко за вас, така че не е нужно да се притеснявате за библиотеки, приставки и други подобни. Изтеглете примера, следвайте инструкциите в примера „Вградени системи -> Zowi (C ++)“и след това продължете със следващата стъпка.
Стъпка 2: Разбиране как да взаимодействаме с Otto
Отидете във ".sct" файла и редактирайте машината на състоянието по ваш вкус. Вдясно е меню с всички налични елементи. Интересуват ни само състоянията и преходите.
На снимката можете да видите, че съм написал някои неща за преходите; "след X s" е доста обяснително и "винаги" означава само, че отива там веднага след приключване на кода от държавата. "Входът /" означава, че кодът трябва да бъде изпълнен веднага след влизане в състоянието.
IDE компилира машината на състоянието на C ++, която е съвместима с Arduino. За да използваме функциите на Otto, трябва сами да свършим малко работа, като получим достъп до интерфейса.
Следните ключови думи могат да се използват за определяне на неща, които държавната машина да използва:
константи, които държат стойности и не могат да бъдат променяни
променливи, които държат стойности и могат да бъдат променяни
операции, които ще бъдат генерирани във виртуални C ++ методи за изпълнение
интерфейс:
const PIN_YL: integer = 2 const PIN_YR: integer = 3 const PIN_RL: integer = 4 const PIN_RR: integer = 5 const звук: integer = 2 const mouth_heart: integer = 13 const mouth_happyOpen: integer = 11 операция zowi_init (YL: цяло число, YR: integer, RL: integer, RR: integer) операция zowi_home () операция zowi_putMouth (mouthType: integer) операция zowi_sing (songName: integer) операция zowi_walk (стъпки: real, T: integer, dir: integer) операция zowi_shakeLeg ()
Професионален съвет: ако не знаете какво да въведете някъде или изглежда, че има грешка, натиснете „ctrl+интервал“, за да получите подсказки за това какво можете да въведете.
Освен това трябва да разгледате примерите, те също имат някакъв код! Можете също така да ги използвате като структура за просто редактиране на модела, което е единствената част, която ни интересува в момента.
Стъпка 3: Попълване на празнините
![Попълване на празнините Попълване на празнините](https://i.howwhatproduce.com/images/011/image-32751-4-j.webp)
След като промените нещата в модела, можете да щракнете с десния бутон върху „zowiSCT.sgen -> Generate Code Artefacts“. Това генерира виртуалните функции в C ++, които са декларирани в машината на състоянието в папката "src-gen", която след това реализираме, използвайки нормален C ++.
Просто създайте тези два файла в папката "src", за да получите функционалността, която искаме от Otto.
Първо Impl.h
#ifndef SRC_IMPL_H_
#define SRC_IMPL_H_ #include "../src-gen/ZowiSCT.h" class Impl: public ZowiSCT:: DefaultSCI_OCB {public: Impl (); virtual ~ Impl (); невалиден zowi_init (sc_integer YL, sc_integer YR, sc_integer RL, sc_integer RR); void zowi_home (); void zowi_putMouth (sc_integer mouthType); void zowi_sing (sc_integer songName); void zowi_walk (sc_real стъпки, sc_integer T, sc_integer реж.); void zowi_shakeLeg (); }; #endif / * SRC_IMPL_H_ * /
След това Impl.cpp
#include „Impl.h“
#include "../Zowi/Zowi.h" Zowi zowi = нов Zowi (); Impl:: Impl () {} Impl:: ~ Impl () {} void Impl:: zowi_home () {zowi.home (); } void Impl:: zowi_init (sc_integer YL, sc_integer YR, sc_integer RL, sc_integer RR) {zowi.init (YL, YR, RL, RR); } void Impl:: zowi_putMouth (sc_integer mouthType) {zowi.putMouth (mouthType); } void Impl:: zowi_sing (sc_integer songName) {zowi.sing (songName); } void Impl:: zowi_walk (sc_real steps, sc_integer T, sc_integer dir) {zowi.walk (стъпки, T, dir); } void Impl:: zowi_shakeLeg () {zowi.shakeLeg (); }
Стъпка 4: Направете танца на Ото
Когато сте доволни от вашия продукт, кликнете върху чука в горния ляв ъгъл и изчакайте процесът да приключи. След това кликнете върху зелената стрелка вдясно от чука и вижте как Ото танцува!
Ако искате, можете да разгледате някои други примери: Инструменти за диаграми на състоянието на YAKINDU
Препоръчано:
Държавна машина на Arduino - пешеходен светофар: 6 стъпки (със снимки)
![Държавна машина на Arduino - пешеходен светофар: 6 стъпки (със снимки) Държавна машина на Arduino - пешеходен светофар: 6 стъпки (със снимки)](https://i.howwhatproduce.com/images/001/image-298-39-j.webp)
State Machine на Arduino - пешеходен светофар: Здравейте! Ще ви покажа как да програмирате пешеходен светофар за Arduino в C ++ с машина за крайни състояния, като използвате YAKINDU Statechart Tools. Това ще демонстрира силата на държавните машини и може да се използва като план за по -нататъшни
HX1 -DM - Upcycled Arduino DUE Powered DIY барабанна машина (направена с мъртва машина MK2): 4 стъпки
![HX1 -DM - Upcycled Arduino DUE Powered DIY барабанна машина (направена с мъртва машина MK2): 4 стъпки HX1 -DM - Upcycled Arduino DUE Powered DIY барабанна машина (направена с мъртва машина MK2): 4 стъпки](https://i.howwhatproduce.com/images/001/image-1381-157-j.webp)
HX1 -DM - Upcycled Arduino DUE Powered DIY Drum Machine (направен с Dead Maschine MK2): Спецификацията. Хибриден Midi контролер / барабанна машина: Arduino DUE захранван! 16 подложки за чувствителност на скоростта с много ниска латентност 1 > ms 8 копчета, които потребителят може да назначи за всяка Midi #CC команда 16ch Вграден секвенсор (не е необходим компютър !!) MIDI вход/изход/чрез функция
Държавна машина и многозадачност на Arduino с SPI разширители: 3 стъпки
![Държавна машина и многозадачност на Arduino с SPI разширители: 3 стъпки Държавна машина и многозадачност на Arduino с SPI разширители: 3 стъпки](https://i.howwhatproduce.com/images/003/image-7721-14-j.webp)
Държавна машина и многозадачност на Arduino с SPI разширители: Миналата седмица исках да създам система за пилотни фойерверки с arduino. Имаше нужда от около 64 изхода за контрол на пожарите. Един от начините да направите това е да използвате IC разширители. Така че са налични 2 решения:- I2C разширител, но той се нуждае от инвертор, когато
Балансиращ робот / робот на 3 колела / STEM робот: 8 стъпки
![Балансиращ робот / робот на 3 колела / STEM робот: 8 стъпки Балансиращ робот / робот на 3 колела / STEM робот: 8 стъпки](https://i.howwhatproduce.com/images/005/image-12193-11-j.webp)
Балансиращ робот / робот на 3 колела / STEM робот: Създадохме комбиниран робот за балансиране и три колела за учебни цели в училища и след училищни образователни програми. Роботът е базиран на Arduino Uno, персонализиран щит (предоставени са всички подробности за конструкцията), Li Ion батерия (всички конструкции
[Робот Arduino] Как да си направим робот за улавяне на движение - Робот Thumbs - Серво мотор - Изходен код: 26 стъпки (със снимки)
![[Робот Arduino] Как да си направим робот за улавяне на движение - Робот Thumbs - Серво мотор - Изходен код: 26 стъпки (със снимки) [Робот Arduino] Как да си направим робот за улавяне на движение - Робот Thumbs - Серво мотор - Изходен код: 26 стъпки (със снимки)](https://i.howwhatproduce.com/images/001/image-1599-93-j.webp)
[Робот Arduino] Как да си направим робот за улавяне на движение | Робот Thumbs | Серво мотор | Изходен код: Thumbs Robot. Използва се потенциометър на серво мотор MG90S. Много е забавно и лесно! Кодът е много прост. Има само около 30 реда. Изглежда като заснемане на движение. Моля, оставете всеки въпрос или обратна връзка! [Инструкция] Изходен код https: //github.c