Arduino Terminal (13 / 16 stap)

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

https://github.com/Seeed-Studio/Ethernet_Shield_W5...

Gerelateerde Artikelen

Arduino cellulaire Shield Tutorial

Arduino cellulaire Shield Tutorial

The Arduino cellulaire Shield kun je cellulaire telefoon bellen en SMS-berichten versturen. De hersenen van dit schild is de SM5100B die is een robuuste cellulaire module staat uit te voeren veel van de taken van de meeste standaard mobiele telefoons
Betrouwbaar, veilig, aanpasbare SMS afstandsbediening (Arduino/pfodApp) - geen codering vereist

Betrouwbaar, veilig, aanpasbare SMS afstandsbediening (Arduino/pfodApp) - geen codering vereist

Update: 19 mei 2015: gebruik de pfodParser bibliotheek Versie 2.5 of hoger. Het bevestigt een gemelde probleem van het niet toestaan van voldoende tijd voor het schild verbinden met het netwerk na omhoog het aandrijvenIntroductieHoe is pfodSMS afstan
ESP8266 + Arduino + Oled (clientbesturingselement IRC Chat) deel 1

ESP8266 + Arduino + Oled (clientbesturingselement IRC Chat) deel 1

Ik heb veel voorbeelden van hoe de Arduino op afstand te bedienen maar buitensporige instellingen vereisen en wanneer via ethernet LAN of WLAN communicatie in de meeste voorbeelden alleen werkt op een lokaal netwerk of intranet.Ik had geprobeerd voor
PSU-voeding van oude ATX met Arduino en LCD Monitor een proefbank

PSU-voeding van oude ATX met Arduino en LCD Monitor een proefbank

Hallo allemaal en welkom op mijn eerste Instructable.Ik wilde altijd een bankje PSU voor gemakkelijke toegang tot een bron van macht, en iets dat ik kan rekenen op wanneer u werkt aan verschillende projecten. Ik wilde een PSU dat:• biedt 3, 3V, 5v en
Eenvoudige Parking Sensor

Eenvoudige Parking Sensor

mijn auto heeft alleen parking sensor voor het omgekeerde, dus als ik binnenkom de Garage er geen manier om te weten is als ik ben dicht genoeg bij de muur om de deur te sluiten of te sluiten dat ik de muur met de auto kan raken. Dus, besloten om het
Self Balancing PT (huisgemaakte Segway)

Self Balancing PT (huisgemaakte Segway)

Dit Instructable is bedoeld om te delen mijn hobbyist-project: een Self-Balancing persoonlijke vervoer (SBPT), ook bekend als "huisgemaakte Segway". Het is een interessant project vereist een minimale kennis van elektronica en sommige handwerk v
Morse Code Encoder/Decoder met LinkIt One

Morse Code Encoder/Decoder met LinkIt One

Dit is het tweede project met behulp van de LinkIt een boord in de vorige instructable toonde ik u hoe te bouwen van een afstand meetlint.In deze tutorial ga ik om u te tonen hoe maak je een Morse Code Decoder/Encoder met de LinkIt One. De output kan
TurtleDuino Object vermijden Robot

TurtleDuino Object vermijden Robot

Hallo, in dit instructable ik zal tonen u stap voor stap hoe te bouwen van de TurtleDuino, een object vermijden robot, met een Arduino UNO microcrontroller aan boord. Ik ontwierp de TurtleDuino met behulp van materiaal van de hardware winkel (Home De
Geautomatiseerde auto

Geautomatiseerde auto

Dit instructable is bedoeld om een methode voor het omzetten van een afstandsbediening auto in een geautomatiseerde auto bieden. Het eindresultaat is een voertuig die kan reageren op zijn omgeving door middel van een sensor van de nabijheid en dus wo
Grote 7 Segment klok

Grote 7 Segment klok

Ik graag dingen. Maar, ik zal eerlijk met u. Ik was niet begiftigd met eindeloze ideeën. Gebrek aan creativiteit? Nee, ik zal probleem oplossen. Gebrek aan tijd/geld/energie? Altijd. Daarnaast moet ik maken sommige nuttig doel dienen. Creëren van een
Python Terminal voor goedkope Pi Arduino verbinding

Python Terminal voor goedkope Pi Arduino verbinding

De Raspberry Pi is een Linux-machine, dus waarschijnlijk er een ton van de terminal toepassingen voor het zijn. Maar ik heb een nieuwe transactie in Python, waarom heb ik moeite geschreven? Lees verder. Als je aan het doen zijn een project dat zowel
Arduino nano met Terminal connectoren!

Arduino nano met Terminal connectoren!

u door het aansluiten van de arduino met jumpers moe bent!! Hier is hoe te maken van de Arduino met Terminal connectoren.Stap 1: Onderdelen die vereist zijn * Koper geplateerd bestuur* Ferro chloride* boor bits .8mm* boor pistool* CD markerStap 2: Ma
Terminal met een 2.2" TFT Arduino seriële UART schuiven weer

Terminal met een 2.2" TFT Arduino seriële UART schuiven weer

Ik heb het maken van projecten gebaseerd rond een 2.2" TFT display die gebruik maakt van de ILI9341 driver chip, dit display kan worden aangesloten op en gecontroleerd door een Arduino UNO. Als een beetje achtergrond lezen van u kan vinden mijn instr
Arduino seriële Terminal Oled met bibliotheek van Adafruit SSD1306

Arduino seriële Terminal Oled met bibliotheek van Adafruit SSD1306

Ik gebruikte de bibliotheek en de afbeeldingen Adafruit_GFX Adafruit_SSD1306 ik het platform van de Arduino gebruikt als seriële terminal maakteen de tekens ontvangen atravez een mini OLED-scherm, dit is alleen het eerste deel van een iets meer compl