
Stringid Arduinos on väga kasulikud tööriistad, mis Sa pead seda oma tahvli programmeerimiseks kasutamaSeetõttu on oluline teada, milleks need funktsioonid on mõeldud ja Mis tüüpi stringid on olemas? mida leiate.
Selleks peate selle artikli lõpuni lugema, sest Selgitame, mis tüüpi stringid on olemas ja millist süntaksit peaksite kasutama. et nende tööst aru saada.
Aga see pole veel kõik, leiad ka juhendi, kuidas seda kasutada String (objekt) ja nimekiri parimatest isetegemise projektidest, mida saate harjutamiseks teha.
Mis on string Arduino programmeerimises ja milleks neid seda tüüpi riistvara programmeerimisel kasutatakse?
En Arduino programmeerimine, Stringid on tööriistad, mida kasutatakse tähemärkide stringide salvestamiseks. Seetõttu ei peeta seda nöör mitte iseenesest faktina, vaid neist sõltuva klassina. Nende lõpp toimub nullmärgi abil. Lisaks iseloomustab neid teatud hulga mälumahu reserveerimine. Arduino plaat puhvri loomiseks ja selle intensiivseks kasutamiseks funktsioonid, mida nad kasutajatele pakuvad.
Stringitüübid Arduino programmeerimisel: millised tüübid üldse eksisteerivad?
Võib leida erinevat tüüpi stringid mida kasutatakse programmeerimisel Arduino.
Näitame teile igaüks neist allpool:
Märkide massiiv
Märkide massiivid on märgimaatriksid, mida kasutatakse pikkades tekstistringides.See tähendab, et iga kord, kui töötate C++-s stringiga, mis lõpeb väärtusega 0 (\0), loote järjestikuseid mälu kompositsioonistruktuure, mis seetõttu hõivavad vähem mälu ja kui mitte tuvastaks stringi tähemärginaOluline on märkida, et string peab alati lõppema nullmärgiga ja viidata saab üksikutele märkidele, mida string sisaldab.
objekt
Kui te ei tööta suure hulga tekstiga Saate kasutada stringiobjektiNeed klassid Andmed parandavad meetodite abil märgijadade käsitlemist mida kasutajad kasutavad kahe stringi võrdlemiseks, konkreetsete märkide leidmiseks, stringi elementide liitmiseks ja lisamiseks ning muude funktsioonide hulgas.
Stringide operaatorid
Operaatorid on sümbolid, mis Neid kasutatakse konkreetse juhise loomiseks. al Keel Sel viisil saab luua toiminguid stringis oleva teatud märgi lisamiseks, eraldamiseks ja kontrollimiseks, kas see on tõene või mitte.
Stringi (märkimassiivi) süntaks: kuidas mõista selle deklaratsioone ja kasutustingimusi?
Kui kasutate pikk tekstijada Sa pead kasutama a Märkide massiiv.
Selleks näitame teile, kuidas sellega toime tulla:
Deklaratsioonid
Stringi puhul kehtivad stringilaused on järgmised:
- märk Str1[14]; Seda süntaksit kasutatakse massiivi üldiseks initsialiseerimiseks.
- char Str2[4] = {'a', 'u', 'i'}; Sellisel juhul määratakse täiendavad märgid ja kompilaator lisab nullmärgi.
- char Str3[4] = {'a', 'u', 'i', '\0'}; Kui eelistate ja soovite nullmärgi käsitsi lisada, peate kasutama seda struktuuri.
- märk Str4[] = «ipap"; Stringi saab initsialiseerida konstandiga, kasutades ülakomasid. IDE määrab massiivi suuruse.
- märk Str5[8] = «ipap"arduino"; Kui määrate suuruse käsitsi ja määrate konstandi, peate kasutama seda süntaksit.
- märk Str6[15] = «ipap"arduino"; See struktuur võimaldab lisada suurema stringi, kuna jääb tühi koht.
Tühistatud lõpetamine
Kasutatakse nulllõppe et määrata, kus kett lõpebSelleks on vaja lisada tühimärk, ning ASCII kood , funktsiooni lõpus. Selle saab käsitsi lisada, tippides «\0» või automaatselt, nii et see on olnud Arduino IDE poolt tõlgendatud.
Stringmaatriksid
Maatriksit kasutatakse selleks, et konfigureerige stringe, mis sisaldavad suurt hulka tekstiSee lihtsustab tööd, kuna vähendab käsitsemise keerukust.
Õpi samm-sammult, kuidas Arduino's programmeerida stringide (objektide) abil
Stringi kasutamiseks IDE-s peate toimima järgmiselt.
Süntaks
Esimene asi, mida peate tegema saabel on see, kuidas toime tulla struktuur, millel on string.
Selleks peate arvestama stringi (objekti) süntaksiga:
- nöör(väärtus)
- nöör(väärtus, baas)
- nöör(väärtus, kümnendkohad)
Parameetrid
Järgmisena peate rakendama parameetrid, mida kasutatakse ülaltoodud süntaksis:
- väärtus: See viitab muutujale, mida tuleb stringi saamiseks vormindada. Nende parameetrite toetatud andmetüübid on byte, char, double, float, int, long, string, unsigned int ja unsigned long.
- alus: See parameeter on valikuline ja määrab muutuja vormindamise baasi. Vaikimisi on see baas 10, kuid seda saab kasutada ka heksadetsimaalses ja binaarsüsteemis. Näiteks String(14, HEX) ja String(13, BIN).
- kümnendkohad: Ujukoma- või topeltväärtuste kasutamisel tuleb määrata kümnendkoht.
funciones
Lõpuks peate seda tegema kaasata funktsioonid al Keel
Arduino IDE-s kasutatavad funktsioonid on:
- charAt(): Seda funktsiooni kasutatakse stringi kindlale elemendile juurdepääsuks.
- võrdle(): See tööriist võimaldab teil võrrelda kahte stringi ja seega määrata, kas need on võrdsed või mitte.
- concat(): Kui teil on vaja stringile elementi või parameetrit lisada, peate seda funktsiooni kasutama.
- c_str(): Seda muutujat kasutatakse siis, kui on vaja string C-tüüpi stringiks teisendada.
- lõpeb(): Seda kasutatakse selleks, et kontrollida, kas antud string lõpeb kindla märgiga.
- võrdub(): Seda funktsiooni saab kasutada kahe stringi võrdlemiseks ja võrdsuse leidmiseks.
- equalsIgnoreCase(): Nagu eelmine funktsioon, kasutatakse seda muutujat kahe stringi võrdlemiseks, kuid suur- ja väiketähti arvestamata.
- getBytes(): võimaldab stringist märke kopeerida.
- index(): Seda funktsiooni kasutatakse stringil, kui on vaja otsida stringi või väärtust stringis.
- viimaneIndeks(): Seda kasutatakse tähemärgi või stringi leidmiseks.
- pikkus(): Kui mul on vaja teada stringi pikkust, peate seda funktsiooni kasutama.
- eemalda(): eemaldab või muudab märke.
- asenda(): saab stringis ühe tähe teisega asendada.
- reserv(): Seda funktsiooni saab kasutada plaadi mälu puhverdamiseks, võimaldades seega protsessidel töötada ilma riistvara jõudlust mõjutamata.
- setCharAt(): See aitab kaasa tegelaskuju kaasamisele.
- algab tähega (): Selle funktsiooni iseloomulikuks jooneks on kontrollimine, kas see algab teatud elemendiga.
- alamstring(): Juba nimi ütleb kõik, seda funktsiooni kasutatakse stringi sees oleva alamstringi saamiseks.
- CharArray(): See võimaldab valitud puhvris olevate märkide kopeerimist, et mälus oleks ruumi.
- kahekordistama(): Kui string on kehtiv, saab seda kasutada selle dubleerimiseks.
- Int(): Stringi saab teisendada täisarvuks, kui see on kehtiv.
- Ujuks(): See suudab stringi ujuvaks märgiks teisendada.
- väiketähtedega(): Kui string on kirjutatud suurtähtedega ja see tuleb väiketähtedeks teisendada, tuleks seda funktsiooni kasutada.
- Suurtähtedega(): See on eelmise funktsiooniga vastupidine olukord.
- kärpima(): Selle tööriista abil saab Stringi versiooni algusesse või lõppu tühja koha lisada.
Parimad stringipõhised programmeerimisprojektid, mida saate ise harjutamiseks teha
Allpool näitame teile parimaid projekte, mis Saate ennast stringide abil programmeerida.
Alustame:
Kiirreageerimisseade
Mis Arduino UNO plaatPaigaldamiseks on vajalikud komponendid nupp, makett, LED-ekraan ja 10k takisti. Saate luua ekraani, kus sisestate küsimuse ja saate juhusliku vastuse. Selle lisamiseks Küsimuste ja vastuste puhul tuleks kasutada stringi.
Koodid, mida pead kasutama:
#lisa #lisa #lisa #lisa
Nüüd peate lisama muutujad ja konfigureerima need ekraanil:
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 32 #define STRING_ARRAYSIZE 10 // I2C-ga (SDA, SCL pinid) ühendatud SSD1306 kuvari deklaratsioon - Arduino UNO: A4(SDA - Data ), A5(SCL - Clock) #define OLED_RESET 4 // Lähtestamise pin # (või -1, kui jagatakse Arduino lähtestamise pinni) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Nupu muutujate konfigureerimine:
const int buttonPin = 2; int buttonState = 0; int lastButtonState = 0; int randomNumber = 0; String mainText = "Küsi"; void setup() { // Jadapordi seadistamine begin(9600); // OLED seadistamine // SSD1306_SWITCHCAPVCC = genereerib ekraanipinge sisemiselt 3.3 V pingest if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Aadress 0x3C 128x32 jaoks println(F("SSD1306 allokatsioon ebaõnnestus")); for(;;); // Ära jätka, tsükkel igavesti } displayTextOnOLED(mainText); // Nupu seadistamisele pühendatud PIN pinMode(buttonPin, INPUT); // kui analoogsisendi pin 0 on ühendamata, siis juhuslik analoogmüra põhjustab randomSeed() kutse, mis genereerib // iga kord, kui visand käivitatakse, erinevad seemnenumbrid. // randomSeed() segab seejärel juhuslikku funktsiooni. randomSeed(analogRead(0)); } // eesmärk on kuulata nupu olekut // ja vajutamisel kuvada OLED-ekraanil erinev tekst // vabastamisel näidata setup() text void loop() { // loeb nupu oleku väärtust: buttonState = digitalRead(buttonPin); if ( buttonState != lastButtonState ){ if (buttonState == HIGH) { displayTextOnOLED(randomText()); } else { displayTextOnOLED(mainText); } } lastButtonState = buttonState; } void displayTextOnOLED(String str) { clearDisplay(); setTextSize(2); // Joonista 2X skaalas tekst setTextColor(SSD1306_WHITE); setCursor(0,0); println(str); display(); // Näita algteksti }
Kasutage stringi:
String randomText(void) { String texts[STRING_ARRAYSIZE] = {"Da", "Nu", "Nu stiu!", "Nu vreau!", "Du-te naibii!","Varule","Te pup!","Sigur!", "Sigur ca nu!","Nah!"}; if ( buttonState != last ButtonState ) { juhuslik arv = juhuslik(1, 10); tagastavad tekstid[juhuslik arv]; } else { tagasta tekstid[juhuslik arv]; } }
Radarijaam
Selle projekti jaoks vajate Arduino plaati, mudeli ultraheliandur HC-SR04, Teil on vaja servomootorit, juhtmeid ja 10k takistit. Andur tuleb ühendada plaadi tihvtidega 10 ja 11 ning seejärel servomootori tihvtiga 12.
Järgmisena peate need koodid stringide abil sisestama:
#lisa const int trigPin = 10; const int echoPin = 11; pikk kestus; int vahemaa;
Servomootori juhtimiseks peate looma servoobjekti:
Servo minuServo; void setup() { pinMode(trigPin, OUTPUT); outputPinMode(echoPin, INPUT); begin(9600); attach(12); } void loop() { }
Programmeerige servomootori pöörderaadius vahemikku 15 kuni 165 kraadi:
for (int i = 15; i <= 165; i++) { write(i); delay(30); distance = calculateDistance(); print(i); print(","); print(distance); print(".."); } for (int i = 165; i > 15; i -) { write(i); delay(30); distance = calculateDistance(); print(i); print(","); print(distance); print(".."); } } int calculateDistance() { digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = duration * 0.034 / 2; return distance; } Kasutage SerialEvent() funktsiooni kauguse ja nurga väärtuste saamiseks: empty drawRadar() { pushMatrix(); translate(960,1000); noFill(); strokeWeight(2); stroke(98,245,31); arc(0,0,1800,1800, PI, TWO_PI); arc(0,0,1400,1400, PI, TWO_PI); arc(0,0,1000,1000, PI, TWO_PI); arc(0,0,600,600, PI, TWO_PI); nurkjoon(-960,0,960,0); line(0,0, -960 cos(radiaani(30)), -960 sin(radiaani(30))); line(0,0, -960 cos(radiaani(60)), -960 sin(radiaani(60))); line(0,0, -960 cos(radiaani(90)), -960 sin(radiaani(90))); rida(0,0, -960 cos(radiaani(120)), -960 sin(radiaani(120))); rida(0,0, -960 cos(radiaani(150)), -960 sin(radiaani(150))); rida(-960 * cos(radiaani(30)), 0,960,0); popMatrix(); }
Joonista jooned, mis radaril nähtavad on:
void drawLine() { pushMatrix(); strokeWeight(9); stroke(30,250,60); translate(960,1000); locationLine(0,0,950 cos(radiaani(iNurk)), -950 sin(radiaani(iNurk))); popMatrix(); } Radar-Print-Screen-04
Nüüd peate joonistama objektid, mida radar tuvastab:
void drawObject() { pushMatrix(); translate(960, 1000); strokeWeight(9); stroke(255, 10, 10); pixsDistance = iDistance 22.5; if (iDistance < 40) { // joonistab objekti nurga ja kauguse järgi line (pixsDistance cos(radians(iAngle)), -pixsDistance sin(radians(iAngle)), 950 cos(radians(iAngle)), -950 * sin(radians(iAngle))); } popMatrix(); }
Lisa ekraanile sõnu:
tühi draw() { fill(98, 245, 31); textFont(orcFont); noStroke(); fill(0, 4); rect(0, 0, width, 1010); fill(98, 245, 31); // roheline värv drawRadar(); Joonista joon(); drawObject(); drawText(); }
Radari programmeerimine:
import processing.serial.*; import java.awt.event.KeyEvent; import java.io.IOException; Serial minuPort; String nurk = ""; String kaugus = ""; String andmed = ""; String noObject; float pixsDistance; int iAngle, iDistance; int index1 = 0; int index2 = 0; void PFont orcFont; void setup() { size(1920, 1080); smooth(); minuPort = new Serial(this, "COM4", 9600); bufferUntil('.'); orcFont = loadFont("OCRAExtended-30.vlw"); } void draw() { fill(98, 245, 31); textFont(orcFont); noStroke(); fill(0, 4); rect(0, 0, laius, 1010); } fill(98, 245, 31); drawRadar(); DrawLine(); drawObject(); drawText(); } void serialEvent(Serial minuPort) { andmed = minuPort.readStringUntil('.'); andmed = andmed.substring(0, andmed.length() - 1); indeks1 = andmed.indexOf (","); nurk = andmed.substring(0, indeks1); vahemaa = andmed.substring(index1 + 1, andmed.length());
Sel hetkel peate stringimuutujad teisendama täisarvudeks:
iAngle = int(angle); iDistance = int(distance); } void drawRadar() { pushMatrix(); translate(960, 1000); noFill(); strokeWeight(2); stroke(98, 245, 31); // joonistame kaarejooni arc(0, 0, 1800, 1800, PI, TWO_PI); arc(0, 0, 1400, 1400, PI, TWO_PI); arc(0, 0, 1000, 1000, PI, TWO_PI); arc(0, 0, 600, 600, PI, TWO_PI); // joonistame joone angle(-960, 0, 960, 0); line(0, 0, -960 cos(radians(30)), -960 sin(radians(30))); rida(0,0, -960 cos(radiaani(60)), -960 sin(radiaani(60))); rida(0,0, -960 cos(radiaani(90)), -960 sin(radiaani(90))); rida(0,0, -960 cos(radiaani(120)), -960 sin(radiaani(120))); rida(0,0, -960 cos(radiaani(150)), -960 sin(radiaani(150))); rida(-960 cos(radiaani(30)), 0,960,0); popMatrix(); } void drawObject() { pushMatrix(); translate(960,1000); strokeWeight(9); stroke(255,10,10); pixsDistance = iDistance 22.5; if (iDistance < 40) { // joonistame objekti vastavalt nurga ja kauguse joonele (pixsDistance cos(radians(iAngle)), -pixsDistance sin(radians(iAngle)), 950 cos(radians(iAngle)), -950 sin(radians(iAngle))); } popMatrix(); } void drawLine() { pushMatrix(); strokeWeight(9); stroke(30,250,60); translate(960,1000); locationLine(0,0,950 cos(radians(iAngle)), -950 sin(radians(iAngle))); popMatrix(); }
Lisa ekraanile tekst:
void drawText() { pushMatrix(); if (iDistance > 40) { noObject = "Vahemikust väljas"; } else { noObject = "Vahemikus"; } fill(0, 0, 0); noStroke(); rect(0, 1010, width, 1080); fill(98, 245, 31); textSize(25); text("10 cm", 1180, 990); text("20 cm", 1380, 990); text("30 cm", 1580, 990); text("40 cm", 1780, 990); textSize(40); text("Object:" + noObject, 240, 1050); text("Angle:" + iAngle + "°", 1050, 1050); tekst("Vahemaa:", 1380, 1050); if (iVahemaa < 40) { tekst("" + iVahemaa + "cm", 1400, 1050); } tekstiSuurus(25); fill(98, 245, 60); translate(961 + 960cos(radiaani(30)), 982-960sin(radiaani(30))); rotate(-radiaani(-60)); tekst("30°", 0, 0); resetMatrix(); translate(954 + 960cos(radiaani(60)), 984-960sin(radiaani(60))); rotate(-radiaani(-30)); tekst("60°", 0, 0); resetMatrix(); translate(945 + 960cos(radiaani(90)), 990-960sin(radiaani(90))); rotate(radiaani(0)); text("90°", 0,0); resetMatrix(); translate(935 + 960 cos(radiaani(120)), 1003 - 960 sin(radiaani(120))); rotate(radiaani(-30)); text("120°", 0,0); resetMatrix(); translate(940 + 960 cos(radiaani(150)), 1018 - 960 sin(radiaani(150))); rotate(radiaani(-60)); text("150°", 0,0); popMatrix(); }
Niiskuseandur
pane üks Arduino UNO R3 plaatMakettplaadi, niiskusanduri, juhtmete ja takisti abil saate ehitada jaama, mis sisaldab niiskuse andur.
Peate ühenduse looma, kasutades allolevat pilti:
Pärast seda peate need koodid stringide abil sisestama:
#lisa const int RHT03_DATA_PIN = 0; RHT03 rht; void configuration() { begin(9600); begin(RHT03_DATA_PIN); } void loop() { int updateRet = rht.update(); // Edu korral tagastab update() funktsioon väärtuse 1, vastasel juhul on väärtus <0 if (updateRet == 1) { float latestHumidity = rht.humidity(); float latestTempC = rht.tempC(); float latestTempF = rht.tempF(); }
Nüüd peate tulemused välja printima:
println("Niiskus:" + String(viimaneNiiskus, 1) + "%"); println("Temp(F):" + String(viimaneTempF, 1) + "klass F"); println("Temp(C):" + String(viimaneTempC, 1) + "klass C"); } { viivitus (RHT_READ_INTERVAL_MS); } viivitus(1000); }


















