Stap 13: Code!
Bij de bouw van een project, is software wat verbindt het project samen. Je zou kunnen hebben een geweldig uitziende terminal, maar het doet niets. Dat is niet wat je kwam hier om te bouwen. U kwam hier voor een uitbreidbaar, werken terminal. En dat is wat gaat doen.
Bijgevoegd is een link naar een Github met sommige code, die een paar commando's heeft. Het niet doen ook veel op de manieren van geavanceerde berekeningen en voorspellen wanneer de volgende keer dat u naar beneden de trap zal vallen, maar misschien zou u het doen! De opdrachten gaan als volgt:
helpen - geeft alle opdrachten die u kunt doen. Voorbeeld: helpen
rfile directory/file.extension - uitgangen de inhoud van een bestand aan de weergave. Laat de map/mappen leeg als je gewoon wilt lezen van een bestand in de root-map van de SD kaart. Voorbeeld: rfile folder/test.txt
lfile directory - geeft alle bestanden en mappen met maten om weer te geven. Maten zijn rechts van bestand, en is een '/' als het een directory. Voorbeeld: lfile map/another_folder
reset - Equivalent aan het klikken op de 'Reset' knop op uw Arduino/elke schilden die wellicht een. Voorbeeld: opnieuw instellen
cls - het scherm opschoond, duurt circa 2,5 seconden voor het wissen van boven naar beneden en is klaar voor het typen van opdrachten weer.
Opmerking: Zodat alles werken, moet u sommige bibliotheken te installeren. Deze bibliotheken zijn aan de onderkant van deze stap, met mijn Github pagina.
Toevoegen-opdrachten zijn zo eenvoudig als volgt:
Bij lijn ongeveer 138 van Terminal.ino is er een functie genaamd 'runCommand(String args)'
Dit is waar al uw opdrachten gaan. Laten we eens kijken naar de opdracht 'rfile' op lijn 154.
U ziet iets als dit:
String tmp; String tmp2; tmp2 = args; if (args.indexOf(" ") > -1) { tmp = args.substring(args.indexOf(" ")); tmp2.replace(tmp, ""); tmp2.replace(" ", ""); // first was " -" tmp = tmp2; } else { tmp = args; } ... if (tmp == "rfile") { if(args.indexOf(" ") == 5) { String temp = args.substring(6); Tft.drawString("Opening file.", getX(), getY(), 1, RED); setY(getY() + 10); setX(0); fileFunct("read", temp); temp = ""; } else { Tft.drawString("Try: rfile file.txt", getX(), getY(), 1, RED); setY(getY() + 10); setX(0); } } ... else { Tft.drawString("Unknown!", getX(), getY(), 1, RED); setY(getY() + 10); setX(0); }
Laten we dit doorbreken naar de kale botten.
We beginnen met de code aan het begin:
String tmp; String tmp2; tmp2 = args; if (args.indexOf(" ") > -1) { tmp = args.substring(args.indexOf(" ")); tmp2.replace(tmp, ""); tmp2.replace(" ", ""); tmp = tmp2; } else { tmp = args; }
Om te beginnen,
String tmp; String tmp2;
Zijn gewoon de instelling variabelen, tmp en tmp2. Deze zijn telkens een opdracht is gepasseerd, vandaar de naam van de abreviated, 'tijdelijk' reset.
tmp2 = args;
Maakt een kopie van wat is ingevoerd wanneer de ENTER-knop is ingedrukt, zoals 'args' als de kern input wordt doorgegeven.
Dit kleine stuk van code:
if (args.indexOf(" ") > -1) {
Controleert dat de spatie index meer dan -1, AKA er is een spatie is. Opdrachten zonder argumenten beschikken niet over deze voorziening.
Nu tijd om te kijken naar dit:
tmp = args.substring(args.indexOf(" ")); tmp2.replace(tmp, ""); tmp2.replace(" ", ""); tmp = tmp2;
Dit, doet in volgorde van lijnen, zoiets als dit:
Stel de tekenreeks 'tmp' alles na en inclusief de spatie.
Vervolgens krijgen de kopie van de gehele opdracht, tmp2, en verwijderen van het argument de tekens, zodat u wordt verlaten met enkel de hoofdopdracht, zonder argumenten.
Nu vervangen door die vervelende spatie niets.
Vervolgens stelt u de tekenreeks tmp aan de waarde van tmp2.
Na dat kleine codeblok zult u het volgende zien:
else { tmp = args; }
Die zegt, omdat er geen args, stelt u de variabele 'tmp' naar de waarde van 'args' dus 'tmp' kan worden geregistreerd.
De code is nu klaar om te controleren welk commando is hem. Nu tijd voor het volgende blok van code.
if (tmp == "rfile") { if(args.indexOf(" ") == 5) { String temp = args.substring(6); Tft.drawString("Opening file.", getX(), getY(), 1, RED); setY(getY() + 10); setX(0); fileFunct("read", temp); temp = ""; } else { Tft.drawString("Try: rfile file.txt", getX(), getY(), 1, RED); setY(getY() + 10); setX(0); } }
De code:
if (tmp == "rfile") {
Controleert dat de tekenreeks 'tmp' (de hoofdopdracht blok) is de opdracht 'rfile'.
Bewegen op,
if(args.indexOf(" ") == 5) {
Zorgt ervoor dat er een ruimte is op de index van 5, die in deze opdracht direct na de 'rfile is'. Aangezien codering en nummers bij de index van 0 beginnen, moet dit nummer worden de lengte van de opdracht. Een voorbeeld hiervan zou zijn:
r -> 0
f -> 1
Ik-2 >
l -> 3
e -> 4
[Spatie] -> 5
String temp = args.substring(6);
Deze code maakt u een nieuwe String, weer herstellen telkens wanneer de functie command wordt uitgevoerd, is gelijk aan één geheel getal meer dan het aantal u hebt gebruikt in het laatste deel. Ex: Als de nummer 5, zoals we vroeger werd dit nummer zal e 6. Hiermee maakt u de tekenreeks temp argumenten. Ex: als de opdracht, de rfile map, werd ingevoerd, zou temp mapzijn.
Nu, zoals de volgende code is niet nodig in het maken van je eigen commando's met andere functies, ik zal kort scheren over dit.
Tft.drawString("Opening file.", getX(), getY(), 1, RED); setY(getY() + 10); setX(0); fileFunct("read", temp); temp = "";
In orde, lijn door lijn, dit is wat de code doet:
Het trekt String "Opening bestand." naar de laatste X en Y waarde reeks.
Dit stelt de Y-waarde voor gebruik van de volgende keer dat iets wordt weggeschreven naar het scherm 1 brief (of 10 pixels) naar beneden.
De X-waarde is ingesteld op 0, dus de volgende keer dat iets wordt weggeschreven naar het scherm, het begint aan de rand van het scherm.
Dit is de belangrijkste functie van de opdracht rfile. Dit is een ongeldig type functie, waarmee twee snaren, die de eerste heeft te "lezen", en de bestandsnaam is temp, of de argumenten.
Dit net reset temp, in het geval dat iets vreemds gebeurt dat is onverwacht.
De code is nu bijna klaar voor deze opdracht. Er is twee kleine onderdelen links, die ziet er als volgt:
else { Tft.drawString("Try: rfile file.txt", getX(), getY(), 1, RED); setY(getY() + 10); setX(0); }
Die heet als is het teken van niet ruimte, of het op de verkeerde plaats hebt ingevoerd.
Dit wordt weergegeven op het scherm, "proberen: rfile bestand.txt" in het rood, maakt u een nieuwe regel.
else { Tft.drawString("Unknown!", getX(), getY(), 1, RED); setY(getY() + 10); setX(0); }
Dit wordt aangeroepen wanneer de opdracht onbekend is.
Dit wordt weergegeven op het scherm, "Unknown!" in het rood, dan wordt een nieuwe regel gemaakt.
Nou, dat is echt het voor de werking van de opdrachten, ik zal binnenkort het toevoegen van opmerkingen overal in de code op Github, vertellen wat alles doet.
Github:
https://github.com/RubbaBoy/ArduinoTerminal
Opmerking: Ik zal het toevoegen van veel meer functies aan dit project, en bijwerken van dingen, dus maak je geen zorgen als iets niet goed werkt, of een nieuwe opdracht wilt.
Bibliotheken:
PS/2 toetsenbord bibliotheek:
http://www.pjrc.com/teensy/arduino_libraries/PS2Ke...
Seeed Studio 2.8'' TFT Touch Shield V1.0 bibliotheek:
https://github.com/Seeed-Studio/TFT_Touch_Shield_V...
Seeed Studio Ethernet-Shield V2.0