Göra interaktiva Microcontroller Apps i minuter (2 / 4 steg)

Steg 2: Menyn Definition



jag tror inte jag någonsin träffat någon som verkligen uppskattar att lära sig ännu en programmering språksyntax (särskilt med hotande tidsfrister!), men den här syntaxen är lite annorlunda. Detta är inte en generell programmering språk, men en välriktad syntax känd som Domän specifika språk (DSL ). DSLs i allmänhet är kraftfulla verktyg som kan avsevärt amp upp din förmåga att kommunicera effektivt med datorn framför dig och deras mycket begränsat scope bidra till hastighet din behärskning av dem.

Nu ta en stund att titta på menyn design fil (bild nedan) som användes för att skapa menyer för tunern.

Menyn filen är en kompakt specifikation som berättar den koden generera en hel del om hur du kommer att interagera med programmet. --i synnerhet det:

• Definierar textraderna för en eller flera menyer
• Definierar fält inom de linjer som ska kopplas till variabler i programmet
• Definierar kommandon som ska anropas när ett fält ändras eller när du ritar ett fält
• Definierar typerna för tillhörande faktorer samt gränser eller acceptabelt ingångar för fälten
• Associerar vissa knappen ingångar med kommandon som ska köras eller menyer för att aktiveras

Menyerna har denna form:

<MenuName > {[MenuCommand ] *

"MenuLine " [LineCommand ] *
}

MenuName
Menynamnet alltid anges inuti vinkelparenteser oavsett om det är definiera menyn, eller agerar som mål för en åtgärd (t.ex. växla till < DisplaySettingsMenu >). Översta menyn är alltid heter HomeMenu.

MenuCommand
MenuCommands kan ske i form av ett no_cursor direktiv:

[no_cursor]

Detta säger kodgeneratorn att ingen markören ska visas på den här menyn. Mer allmänt, kommer MenuCommands dock ta form av en händelse länk som associerar en knappen input med en viss åtgärd. Åtgärder kan vara att byta till en annan meny t.ex.:

[long_back -> < DisplaySettingsMenu >]

Detta orsakar tillståndsdatorn att växla till DisplaySettingsMenu om back-knappen hålls ned för en full sekund eller mer.

Eller en händelse länkåtgärd kan enkelt användas för att utlösa ett anrop till en förbrukaren-utviklet funktion t.ex.:

[sel -> (toggleStrobe)]

Möjliga händelser inkluderar:

SEL, tillbaka, upp, ner, long_sel, long_back

MenuLine
MenuLines är strängar som anger vad som ska visas på displayen och också identifierar fält som ska associeras med variabler via LineCommands. Vanligtvis kommer du har markören aktiverad anger den markerade raden. När visas markören visas som en större-än underteckna i den första kolumnen, så du måste se till att lämna ett tomt utrymme i första positionen i varje rad. Notera också kommentarraden som hjälper till att hålla reda på maximal linjebredden--16 i detta fall, men det beror på den skärm du använder. Fälten är utstakad genom att placera en sträng med tecken som är unikt inom den linje som kommer att matchas av den tillhörande LineCommands--notera att du måste se till att storlek i det här fältet innehåller det maximala antalet tecken för varje möjligt fältvärdet.

LineCommand
LineCommand är kanske den mest komplexa delen av syntax, men tack och lov, detta är den sista. LineCommand följer alltid linjen det modifierar och dess uppgift är att både definiera linjespecifika Välj händelse åtgärder, och att associera fält med variabler och ange vilka typer av dessa variabler så den genererade koden kan hantera variablerna på ett typ-lämpligt sätt.

Linjespecifika utvalda händelser är exakt som menynivå händelserna ovan förutom att här händelsen select-knappen är enda tillgängliga som de andra knapparna inte är vanligtvis förknippas med en viss linje. Om definitionen, åsidosätter en linjespecifika Välj händelse menyn-global select händelsen om markören finns på den aktuella raden.

Fältet variabel föreningar ta detta formulär

[FieldString riktning mål :typ ]

FieldString
Den FieldString vi har redan diskuterat--det är den linje-unika teckensträng som markerar platsen och längden på ett visst område inom MenuLine.

Riktning
Riktningen anger huruvida vi associerar ett mål med en ingång användarhändelse (->), eller en ritning händelse (<-) eller båda (<> -).

Mål
Målet kan vara en variabel, en uppsättning eller en draw funktion, eller en variabel och en värde-förändrats-callback-funktion.

Rikta variabel (<-| -> | <> -): [min <> - timer_minutes]

Rikta in funktion (->): [spd -> (SetSpeed)]

Rikta Rita funktion (<-): [nnn <-(DrawNum)]

Rikta variabel w/motringning (-> | <> -): [xxx -> SetContrast(LCD_Contrast)]

[strobeMode <> - SetStrobeMode(strobeMode)]

Observera att det i sista fallet ovan (bi-directional variabel w/motringning fallet), värdet ändras återuppringning ignoreras i när du ritar fältet.

Typ
Typ modifieraren ansvarar för att identifiera variabeltyp och gränser eller möjliga värden.
Tillgängliga typer inkluderar binary coded decimal, signerade eller osignerade heltal i 8, 16 eller 32 bitar eller 8-bitars uppräkningar. Syntaxen för dessa typer är följande:

• BCD8, BCD16, BCD32
• U8, U16, U32
• S8, S16, S32
• enum

Typ modifieraren har form:

:Typ (gränser )

Observera att (gränsvärden) är valfritt för alla utom enum-typer.

Exempel:

: BCD8(0,0x99)

: U16(8,1000)

: enum ("None", "Linjär", "Log")

: S16(-1000,1000)

: U32

Och det är det. Det är hela manualen för definition menyspråket!

Nästa ska vi titta på en källkoden krävs för att avsluta gitarr tuner. Vi ska ta bort läget input eftersom det komplicerar koden lite utan erbjudande mycket mer ur ett lärande perspektiv. 3 x läge arbetade också, mycket bättre än de andra lägen som vi experimenterade med, så det inte vettigt att erbjuda dem.

Se Steg
Relaterade Ämnen

Hur man gör en Android App Demo Video

App Demo videor är ett bra sätt att marknadsföra din nya android app eftersom de ger en inblick på dess funktioner och design för potentiella kunder och affärspartners. Även om demo video kan ibland vara dyrt och komplicerat att skapa, ska jag ge dig...

Bluetooth-kommunikation med MSP430 microcontroller via MIT App Inventor

Syftet med detta projekt var att använda en mikrokontroller för att skapa en modulerad ljus cykel av någon period, och, med de extra funktionerna att någon pekar i modulering cykeln kan avbrytas och omprogrammeras från en smart telefon. Anta exempelv...

Kontrollera quadcopter från telefonen i 30 minuter! [ESP8266 + A7105 + Blynk App för iOS/Android]

Jag drömde om att göra denna typ av projekt ganska länge. Men komplexiteten i telefonintegration var skrämmande mig. Och det skulle vara svårt att återanvända arbetet för min framtida idéer.Nu blev detta superenkelt med Blynk :)Så jag tillbringade 1...

Smoothboard interaktiva skrivtavla på mindre än en minut

I den här videon visar vi dig hur du sätter din skärm till en interaktiv Whiteboard på mindre än en minut. Allt du behöver är en Wiimote, en Bluetooth adapter och en infraröd penna.För mer information, besök oss på http://www.smoothboard.net eller gå...

PIXEL - interaktiva LED Art

I detta Instructable, ska jag tala om PIXEL som för närvarande är på kicken (skamlös plugg). Och även hur en kille med en dagjobb kan ta en idé och förvandla det till en verklig produkt.Kicken för PIXEL innehåller också DIY Kit version av detta proje...

Skrämmande knep använder Arduino-LDR-BlueAct app

Med ett litet roliga trick starta skämtar med dina vänner på uttråkad på nätterna & göra många tricks med en sak att vi alla har som är smartphones eller tabletter... här hittade jag en app på PlayStore som kan hjälpa i dessa tricks och här är en tut...

Papper prototypen för en mobil App

För mitt första projekt i en intensivkurs i UX design fick jag 3 dagar att skapa en papper prototyp av en mobil app för en partner i min klass och till mina klasskamrater och lärare.Detta kanske låter som gott om tid, men alla i min klass är verklige...

VBS datum räknaren App

IntroduktionHar du någonsin undrat vad datum och dag i veckan skulle det i X antal dagar från idag? Hur många dagar det är från idag till framtiden? Vad sägs om antalet dagar mellan två datum?Låt oss titta på några praktiska tillämpningar för en Date...

Interaktiva Instagram kostym

Halloween. Min favorit "holiday" år. ingen resa över hela landet på en av de värsta resa dagarna av året, inte oroa dig för vilken gåva att få för som, inte oroa dig för att vara "den killen/tjejen" utan ett datum (för oss enda folk dä...

Interaktiv Multitouch skärm

mellan Apple iPhone och Microsofts interaktiv tabell, multi-touch visar är i ropet. Detta instructable visar dig hur du sätter din LCD-projektor till en interaktiv multi-touch display tabell med några billiga komponenter lätt tillgängliga från järnaf...

Interaktiva ledde bordlägger

här är en guidad instructable om hur man gör egna interaktiva LED tabell med hjälp av en av Kit från Evil Mad Sciencitst.Här är en video av min finalbordet i aktion i mörkret, och en bild av hur det ser ut:Steg 1: Välj din storlek och skapa en Ond ga...

Introduktion till installera web apps.

Webbapplikationer är en välsignelse för datormiljön. Traditionellt skulle du ladda dator program lokalt på varje system. Även med program för automatiserad kan distribution system, fortfarande vara stödja intensiva. Med web-applikationer kan du läsa...

Din egen Linux kommando i 5 minuter

Intressant påstående, rätt? Har du någonsin velat sprida ordet om din lilla script som gör fantastiska saker tillbaka till samhället? Har du någonsin tänkt att ditt manus är alltför hacky gå ute eller ens utdata eller sätt att använda det ser illa ut...

Interaktiva spinner soffa

Katt formade jätte soffor har gjorts tidigare. Klappa en katt kan vara terapeutiskt och strök flurry tigrar är kända för att vara avkopplande. I det här projektet visar vi en soffa som spinner när det är linjerade med målet att utforska nya begrepp i...

3D tryckt Microcontroller Dice Roller

Detta är ett bara-på-skoj projekt jag gjorde i Digilent MakerSpace. Oftast när jag spelar brädspel använder jag en tärning-rullande smartphone app eftersom tärningarna är så lätt att förlora. Jag tänkte jag skulle prova att göra min egen Hårdvaruvers...

Arduino/App kontrollerade skrivbord ljus

För detta projekt jag ville ha något som skulle tillåta mig att lära mig mer om elektronik/mjukvara, något jag inte riktigt fått in ännu... Jag bestämde mig för en ljus skulle vara en bra plattform för detta.Designen jag kom med var för en uplighter...

Hur man laddar ner apps på Windows 8/RT

i denna tutorial, im kommer att visa dig hur man laddar ner apps på Windows 8.1/RT använder Windows Store. Detta är lätt och hoppas ni gillar detSteg 1: Öppna Windows Store Klicka/Klicka på app med en påse med windows app att öppna Windows StoreSteg...

10 mobila tillväxten hackar det kommer att öka din App tillväxt 2016

Tillväxt hacka för mobila apps? AJ! Mobile App tillväxt är Tactical!Det är enkelt att bygga en app. Men det är svårare att marknadsföra en.Fungerar som en mobil app marketing evangelist med WeDigTech, en mobil app företag i Indien. Jag är ständigt te...

App till kontroll Raspberry Pi (GPIO, automation, kamera...

Instructables gemenskapen har redan tittade på smarta hem projekt med Raspberry Pi och Prota OS mer än 85 000 gånger!Det är en utmärkt prestation och en stor inspirationskälla för oss att gå vidare med vårt Prota projekt och idag vi kommer att göra j...