Fjärrstyrd Multifunktion resultattavlan bygger på Arduino, ESP8266 och uPanel firmware: gränssnitt utveckling (3 / 5 steg)

Steg 3: gränssnitt



Gränssnittet består av 6 skärmen paneler som visas i Figg. 6 till 11.

Några av dem är statiska paneler, dvs de ändrar inte deras utseende vid körning medan andra är dynamiska och ändra deras utseende vid körning på grundval av Arduino skiss variabelvärden. Ett bra exempel på dynamisk panel visas i Fig.8; denna panel simulerar vad som visas på verkliga MfSen reproducera den statiska layout utformad på steg 2.

Användning av paneler som simulerar verkliga objektstatus (i detta fall MFS status) rekommenderas under design, utveckling och test av µPanel-gränssnittet för att slutföra både gränssnittet och Arduino skiss (eller någon annan microcontroller programvara) undviker att använda riktig hårdvara.

I Fig.12 visas de möjliga övergångarna mellan panelerna.

För att göra enkel paneler utvecklingen en on-line finns panel simulator på http://www.miupanel.com/Panel-Design/ONLINE-PANEL...

Vid tidpunkten för offentliggörandet av detta Instructables raden på är panelen simulator endast tillgänglig för visualisering av en sträng som definierar Kontrollpanelens layout. Strukturera av den sträng som beskriver en panel och alla grafiska alternativen är mycket väl förklaras på http://www.miupanel.com/. Här är det tillräckligt att ange att en panel har en layout strukturerad som en matris och varje element i matrisen, kallas behållare, kan struktureras som en matris också och så vidare. Visualisering alternativ kan anges för varje vektorelement eller för grupper av arrayelement. Makrot kan också användas för upprepade operationer.

Utveckla en panel rekommenderas är det nödvändigt att uppmärksamma det stora antalet brakets som leder lätt till ett misstag så, för att lagra den sträng som beskriver en panel, det att använda en textfil och en top-down design strategi.

Följande process har använts för att definiera panel visas i Fig7.

Panelen har varit indelade i stora behållare med några alternativ för dimensioner, stilar, bakgrund och förgrund färger.

D! F90 {^ {-r30! 228,114% 90 {T:SEZIONE1;}} _ {-r30! 228,114% 90 {T:SEZIONE2;}} _ {-r30! 228,114% 90 {T:SEZIONE3;}} _ {-r30! 228,114% 90 {T:SEZIONE4;}} _ {T:SEZIONE5;}}

Kopiera och klistra in strängen i online-panelen simulatorn panelen visas i Fig. 13a erhålls. Den tillgängliga orange (!. F90) område är indelad i 2 stora behållare. Förra innehåller ytterligare 4 behållare med blu spridde ut bakgrunden (! 228,114), vit rundad (r30) kontur (-) och dimension 90 procent (90%) av hela horisontella dimensionen av behållaren som innehåller dem. 4 behållarna är arrangera i rak linje (_). Den sistnämnda behållaren innehåller, för tillfället bara text.

Den sista panelen uppnås då beskriver innehållet och stilen i varje behållare som beskrivs i följande och visas i Fig från 13a till 13h.

Avsnitt 1 ({T:SEZIONE1;}) har varit uppdelat i 2 delar på olika rader och samma sak för avsnitt 2 ({T:SEZIONE2;}):

{T:SEZIONE1;}:--> {{T:SEZIONE1.1;} _ {T:SEZIONE1.2;}}

{T:SEZIONE2;}:--> {{T:SEZIONE2.1;} _ {T:SEZIONE2.2;}}

Ersätta varje delsträng panelen visas i Fig.13b erhålls.

Avsnitt 1.1 ({T:SEZIONE1.1;}) har varit detaljerade 4 behållare i 2 rader (_) och 2 kolumner (|) innehåller knappar för att öka och minska den match poängen:

{T:SEZIONE1.1}:--> {fb * 10 {^ B5% 40, 10r80! FFF:LOCALI +, _B6% 40, 10r80! FFF:LOCALI-; {^ B7% 40, 10r80! FFF:OSPITI+, _B8% 40, 10r80! FFF:OSPITI-;}}

Avsnitt 1.2 ({T:SEZIONE1.2;}) har varit detaljerade att inkludera 2 par 3 gröna siffror i 2 kolumner:

{T:SEZIONE1.2}:--> {* 10 {-r30! 228,114 {LI5:0; & L15:0; & L25:0;}} | {& &} | {-r30! 228,114 {LJ5:0; & L35:0; & L45:0;}}}

Fig.13c visar resultatet.

Fortsätter att i detalj alla behållare...

{T:SEZIONE2.1}:--> {fb * 10 {^ B9% 30, 10r80! FFF:CRONO; |L9G:0;} | {LAG: 0; | ^ BA % 30, 10r80! FFF:TIMEOUT;}}

{T:SEZIONE2.2}:--> {^ * 10 {-r30! 228,114 {L55:0; & L65:0;}} | {& &} | {-r30! 228,114 {L75:0; & L85:0;}}}

{T:SEZIONE3;}:--> {fb * 10 {^ BB % 26, 10r80! FFF:SUPPL.; | LBG:0;} | {LCG:0; | ^ BC % 26, 10r80! FFF:RIGORI;}}

{T:SEZIONE4;}:--> {fb * 10 {^ B3% 40, 10r80! FFF:TEMPO;} | {^ B3% 40, 10r80! FFF:DISPLAY;}}

{T:SEZIONE5;}:--> {fb {* 15 {^ BI % 40, 10r80! FFF:SIMULA;}} | {* 15 {^ BH % 40, 10r80! FFF:ESCI;}}}

... vi får resultatet visas i Fig.13f.

I detta fall är det möjligt att undvika vågrätt och lodräta rullningslister försöka anpassa panelen till enhet dimensioner med formatmallen w (Dw! F90, i stället för D! F90;).

Resultatet visas i Fig.13g (Fig. 13h justerar bara kontur radie).

Arduino skiss implementerar den dynamiska versionen av panelen visas i Fig. 13 h via ett anrop till en funktion som dela upp panelen strängen i delsträngar och inkluderar runtime variabler värden.

void sendMatchPrimaryScreen () {

Serial.Print (P ("$P: D! F90; {^ {-r30! 228,114% 90 {{fb * 10 ^ {B5% 40, 10r80! FFF:LOCALI +, _B6% 40, 10r80! FFF:LOCALI-;} "));

Serial.Print (P ("| { ^ B7% 40, 10r80! FFF:OSPITI +, _B8% 40, 10r80! FFF:OSPITI-;}} _ {* 10 {-r10! 228,114 {LI5:0; & L15:0;"));

Serial.Print (P ("& L25:0;}} | {& &} | {-r10! 228,114 {LJ5:0; & L35:0; & L45:0;}}} "));

Serial.Print (P ("_ {-r30! 228,114% 90 {{fb * 10 {^ B9% 30, 10r80! FFF:CRONO; |L9G:0;} | {LAG: 0; | ^ BA % 30, 10r80! FFF:TIMEOUT;}} "));

Serial.Print (P ("_ {^ * 10 {-r10! 228,114 {L55:0; & L65:0;}} | {& &} | {-r10! 228,114 {L75:0; & L85:0;}}} _"));

Serial.Print (P ("{-r30! 228,114% 90 {fb * 10 {^ BB % 26, 10r80! FFF:SUPPL.; | LBG:0;} "));

Serial.Print (P ("| { LCG:0, |BC % 26, 10r80! FFF: "));

om (defGame == 0) {Serial.print(P("RIGORI"));}

om (defGame == 1) {Serial.print(P("RIGORI"));}

om (defGame == 2) {Serial.print(P("TIRI"));}

om (defGame == 3) {Serial.print(P("***"));}

om (defGame == 4) {Serial.print(P("RIGORI"));}

om (defGame == 5) {Serial.print(P("RIGORI"));}

Serial.Print (P (";}}} _ {-r30! 228,114% 90 {fb * 10 {^ B3% 40, 10r80! FFF:TEMPO;} "));

Serial.Print (P ("| { B3% 40, 10r80! FFF:DISPLAY;}}} _ {fb * 15 {{^ BI % 40, 15r80! FFF:SIMULA;}} | {{^ BH % 40, 15r80! FFF:ESCI;}}} "));

Serial.println("");

om (screenId == startScreenId) {/ / aktuella skärmen är starta skärmen

handleStart();

};

screenId = matchPrimaryScreenId;

};

Den sista panelen visas i Fig.13h.

Den kompletta snören av Fig.13h är som följer.

DW! F90; {^ {-r30! 228,114% 90 {{fb * 10 {^ B5% 40, 10r80! FFF:LOCALI +, _B6% 40, 10r80! FFF:LOCALI-;} | {^ B7% 40, 10r80! FFF:OSPITI +, _B8% 40, 10r80! FFF:OSPITI-;}} _ {* 10 {-r10! 228,114 {LI5:0; & L15:0; & L25:0;}} | {& &} | {-r10! 228,114 {LJ5:0; & L35:0; & L45:0;}}} _ {-r30! 228,114% 90 {{fb * 10 {^ B9% 30, 10r80! FFF:CRONO; |L9G:0;} | {LAG: 0; | ^ BA % 30, 10r80! FFF:TIMEOUT;}} _ {^ * 10 {-r10! 228,114 {L55:0; & L65:0;}} | {& &} | {-r10! 228,114 {L75:0; & L85:0;}}} _ {-r30! 228,114% 90 {fb * 10 {^ BB % 26, 10r80! FFF:SUPPL.; | LBG:0;} | {LCG:0; | ^ BC % 26, 10r80! FFF:TIRI;}}} _ {-r30! 228,114% 90 {fb * 10 {^ B3% 40, 10r80! FFF:TEMPO;} | {^ B3% 40, 10r80! FFF:DISPLAY;}}} _ {fb {* 15 {^ BI % 40, 10r80! FFF:SIMULA;}} | {* 15 {^ BH % 40, 10r80! FFF:ESCI;}}}

Samma teknik har använts för definitionen av de andra panelerna. I synnerhet definieras skärmen resultattavlan i Fig. 9 statiskt enligt följande (se Fig. 14):

DW! F90; {^ {! 000% 98 {{-r10% 95, 10 * 15 {Tfbi #FF0:ATLETICO S. ANNA ;}} _ {-r10% 95,50 {{% 95,10 {{% 20 * 10M1fbi #F00:RETI;} | {% 20 * 10M2fbi #F00:CRONO;} | {% 20 * 10M3fbi #F00:TEMPO;} | {% 20 * 10M4fbi #F00:TIMEOUT;}}} _ {% 95 * 12 {^ % 45 {LI5:0; L15:0; L25:0;}} | {^ % 45 {LJ5:0; L35:0; L45:0;}}} _ {% 95,10 {{> % 30 * 15M5fbi #0F0:LOCALI;} | {& & & & & & & & & & & & &} | {< % 30 * 15M6fbi #0F0:OSPITI;}}} _ {! 228,114% 98 {{-r10% 95 {fb * 10 {^ B5% 40, 10r80! FFF:LOCALI +, _B6% 40, 10r80! FFF:LOCALI-;} | {& & &} | {^ B7% 40, 10r80! FFF:OSPITI +, _B8% 40, 10r80! FFF:OSPITI-;}}} _ {-r10% 95 {fb * 10 {^ B9% 30, 10r80! FFF:CRONO; |L9G:0;} | {LAG: 0; | ^ BA % 30, 10r80! FFF:TIMEOUT;}}} _ {fb * 15 {^ B2% 40, 10r80! FFF:EXIT;}}}

Vid körning hanteras på panelen dynamiskt av ett anrop till en funktion att ta hänsyn till värden för variabler:

void sendScoreboardScreen () {

Serial.Print (P ("$P: D! F90; {^ {! 000% 98 {{-r10% 95, 10 * 15 {Tfbi #FF0: "));

Serial.Print(logo2);

Serial.Print (P (";}} _ {-r10% 95,50 {{% 95,10 {{% 20 * 10M1fbi #"));

om ((läge == 0 & & uppgift == 1) || (mode == 1)) {Serial.print(P("F00"));} annat {Serial.print(P("000"));};

Serial.Print (P (": RISULTATO;} | {% 20 * 10M2fbi #"));

om ((läge == 0 & & uppgift == 2) || (mode == 2)) {Serial.print(P("F00"));} annat {Serial.print(P("000"));};

Serial.Print (P (": CRONO;} | {% 20 * 10M3fbi #"));

om ((läge == 0 & & uppgift == 3) || (mode == 3)) {Serial.print(P("F00"));} annat {Serial.print(P("000"));};

Serial.Print (P (": TEMPO;} | {% 20 * 10M4fbi #"));

om ((läge == 0 & & uppgift == 4) || (mode == 4)) {Serial.print(P("F00"));} annat {Serial.print(P("000"));};

Serial.Print(P(":timeout;}}}"));

Serial.Print(P("_{%95*12{^%45{"));

om (Ab2! = OFF_EXTRA) {

Serial.Print(P("LI5:"));

om (Ab2 == UNO_EXTRA) {Serial.print("1");} annat {Serial.print(Ab2);};

Serial.Print(P(";"));

};

om (Ab1! = OFF) {

Serial.Print(P("L15:"));

Serial.Print(AB1);

Serial.Print(P(";"));

};

om (Ab0! = OFF) {

Serial.Print(P("L25:"));

Serial.Print(Ab0);

Serial.Print(P(";"));

};

Serial.Print (P ("}} | {^%45{"));

om (Bb2! = OFF_EXTRA) {

Serial.Print(P("LJ5:"));

om (Bb2 == UNO_EXTRA) {Serial.print("1");} annat {Serial.print(Bb2);};

Serial.Print(P(";"));

};

om (Bb1! = OFF) {

Serial.Print(P("L35:"));

Serial.Print(Bb1);

Serial.Print(P(";"));

};

om (Bb0! = OFF) {

Serial.Print(P("L45:"));

Serial.Print(Bb0);

Serial.Print(P(";"));

};

Serial.Print(P("}}}_{%95,10{{%20*15M5fbi#"));

om ((läge == 0 & & uppgift == 1) || (mode == 1)) {Serial.print(P("0F0"));} annat {Serial.print(P("000"));};

Serial.Print (P (": LOCALI;} | {& & & & & & & & & &} | {% 20 * 15M6fbi #"));

om ((läge == 0 & & uppgift == 1) || (mode == 1)) {Serial.print(P("0F0"));} annat {Serial.print(P("000"));};

Serial.Print(P(":OSPITI;}}}"));

Serial.Print (P ("_ {! 228,114% 98 {{-r10% 95 {fb * 10 {^ B5% 40, 10r80! FFF:LOCALI +, _B6% 40, 10r80! FFF:LOCALI-;} "));

Serial.Print (P ("| { & & &} | {^ B7% 40, 10r80! FFF:OSPITI +, _B8% 40, 10r80! FFF:OSPITI-;}}} _ {-r10% 95 {fb * 10 {^ B9% 30, 10r80! FFF:CRONO; |L9G: "));

Serial.Print(timer);

Serial.Print (P (";} | {LAG: "));

Serial.Print(timeout);

Serial.Print (P ("; | ^ BA % 30, 10r80! FFF:TIMEOUT;}}} _ {fb * 15 {^ B2% 40, 10r80! FFF:ESCI;}}} "));

Serial.println("");

screenId = scoreboardScreenId;

};

Se Steg
Relaterade Ämnen

Bygga en Arduino Shield för nRF24L01 + sändtagaren

NRF24L01 + sändtagaren är ett utmärkt låg kostnad sätt att lägga till trådlösa funktioner för alla projekt. Men den negativa sidan av den nRF24L01 + är det kan vara jobbigt att prototypen med. I detta instructable vi titta på hur man bygger en Arduin...

Mobile Robotics med repa: bygga en Arduino-baserad insekt-liknande Walker och programmera den med Scratch

Låt oss springa runt? Detta är en Arduino-baserad, lätt att bygga version av insekt-liknande walker med klädhängare tråd och ursprungligen skapades av Jerome Demers (se också detta instructable) och Gareth Branwyn. Det finns i två versioner:en fristå...

ESP8266 (fristående) väderstation med hjälp av Arduino IDE och GadgetKeeper moln plattform

Detta är en uppgradering av mitt tidigare projekt GadgetKeeper-väderstation. I detta projekt bygger jag samma funktioner men bara använder ESP8266 WiFi SoC fristående med DHT11 temperatur och luftfuktighet sensor. I det tidigare projektet använde jag...

BaW-Bot del 1: Bygga en Arduino på ett bräde

Detta är den första delen av våra BaW-Bot (klockor och visselpipor Bot) bygga-5 separata instructables som undersöka olika Arduino-relaterade tekniker, kombinera för att skapa en Bot med alla klockor-och-visselpipor.Del 1: Bygga en Arduino på ett brä...

Hur man bygger en Arduino Uno på en skärbräda

Om du är som och mig och njuta av elektroniska byggprojekten då du kanske har arbetat med Arduino Uno. Arduino uno är den mest populära micro controller i serien och har en stor samling bibliotek vilket göra att arbeta med det mycket lätt. Så det sku...

Tweeting sensordata med Arduino / RedBoard och SparkFun BME280 och SparkFun ESP8266 sköld

Material:SparkFun BME280 atmosfäriska SensorSparkFun WiFi sköldSparkFun RedBoardLödkolvEn dator med en USB-Port och Arduino programvaraEtt Twitter-kontoEn Internet-anslutning (WPA2 - bara för att vara säker)Cirka 15 minuterSe till att testa din ESP82...

Bygga en Arduino

I detta instructable jag ska visa dig hur man bygger en Arduino använder en atmeg328 IC, jag vet att detta låter komplicerat men är ganska lätt att göra. Detta projekt är om du behöver en arduino i projektet men du inte vill använda arduino UNO eller...

DIY världen klocka och väder bot (Arduino + ESP8266)

Heji denna instuctable kommer du lära dig hur man gör världen klocka väder bot använda Arduino Mega och ESP8266 (på-läge).Funktioner:• personlig bot med LCD-skärm som mun, potentiometer som näsa och gröna lysdioderna som ögon• att välja ville stad/la...

Skicka mail med ESP8266 och Arduino UNO

Hur man får Adafruits "send_email_smtp.ino" till Skicka e-post med ESP8266 och Arduino UNO.Och eliminera problemet med "inget svar från modul" många har.Modulen fungerar på 3.3V logik enligt dokumentationen, men jag hade inga problem m...

WIFI växt övervakningssystem baserade på Arduino MEGA och ESP8266

Idag ska vi visa dig vårt första experiment på Sakernas Internet. I detta syfte beslutade vi att använda en Arduino MEGA i stället för en Arduino UNO. Det beror på Arduino MEGA har mer än en seriell port och detta faktum ger oss möjlighet att använda...

Bygga en Arduino Gripper Robot med en DynamixShield.

I detta instructable jag kommer att visa dig hur du snabbt och enkelt bygga en fjärrkontroll gripdon med hjälp av robot och Arduino noll och en DynamixShield. DynamixShield är en ny tillägg för antingen Arduino Due, noll eller Mega som jag är att frä...

Arduino ESP8266 Modbus TCP IP Scada industriella Opto22

Har gjort en integration av Arduino + ESP8266 + programvara Opto22, genomföra dess miljö scada rakt igenom IP och Modbus TCP Modbus RTU, tanken är att genomföra denna hårdvara i branschen för övervakning och kontroll.Mer information om detta projekt:...

Hur man bygger en Arduino synth

detta är en super enkel och lätt anpassningsbara lilla synt. Detta är min första gången du använder Arduino och också med akryl, båda I hittade mycket roligt att arbeta med men. Detta är också min första Instructables så förhoppningsvis har jag förkl...

Bygga "RevIO" (Arduino klon) min väg

uppdaterad 23 Aug 2012Tre månader sedan jag lämnat in instructables till en av utmaningarna, och valdes att fått gratis 3D skriva ut. Jag valde att ha min 3 x 3 x 3" 3D utskrift i stället för en berömda 3D instructable robot.Min 3D utskrift fick leve...

Frisk, Smart & naturliga luft renare med Arduino, WIFI och Blynk

Hej, och Välkommen till detta Instructable!Vi hör mycket om föroreningsproblem idag. När jag gjorde en del forskning om effekten av dålig luft för vår hälsa, upptäckte jag lite statistik om hur illa är det inomhus jämfört med uteluften. Vår lägenhet...

Bygga en rörlig och spårning Portal torn

Det är gulligt, det är artigt och det är verkligen dödliga. Det är ett torn från portalen. Det rör sig, har ljus, har ljud, och något att min tidigare Portal projektet inte hade: kameraspårningsinformation.Tornet är kontrollerat med en Arduino och en...

Styra åtkomsten till din låsa distans med Arduino, SensorMonkey och RF modul

styra åtkomsten till din dörr från någonstans på planeten med hjälp av din telefon, Tab eller PC.Denna inställning har två huvudsegment, har en GUI med hjälp av jQuery, SensorMonkey, Freeduino (Arduino kompatibel utveckling styrelsen) och en sändare....

DIY hemgjord bärbara Arduino kaffe-och dalbana med temperatur indikator LED

Många saker hända bara genom att dricka kaffe. Big business framgångsrika idéer kommer medan människor chattar med kaffe. Jag älskar att ha kaffe speciellt när jag är på kontoret. Jag är ganska säker på att alla där ute älskar kaffe. Men när jag gör...

Pimpa din choklad med Arduino IDE och ATtiny13

Idén till projektet kom till mig på väg till papperskorgen. Jag fick i uppdrag att kasta bort en ruta som bara har tömts på sitt ursprungliga Ferrero Rocher sötma innehåll av min kära fru. Detta var strax efter alla hjärtans dag. Så jag fick spendera...