Sådan sammenlignes strenge på Arduino med strcmp() og alternativer

  • strcmp() sammenligner streng med streng baseret på ASCII-værdier.
  • Alternativer som memcmp() giver dig mulighed for at sammenligne hukommelsesblokke uden null-terminatorer.
  • Korrekt brug af disse funktioner optimerer projekter med begrænsede ressourcer.
  • Fejl er normalt relateret til strenge, der ikke er afsluttet korrekt.

Arduino IDE RISC-V

Når du arbejder med strenge i Arduino, er der flere måder at sammenligne dem på. En af de mest nyttige funktioner er strcmp(), som hører til C-standardbiblioteket, cstring. Denne funktion giver dig mulighed for at sammenligne to tegnstrenge (strenge) på en direkte måde, hvilket returnerer en værdi, der fortæller os, om strengene er ens, eller om der er nogen forskel mellem dem.

I Arduino håndteres karakterstrenge almindeligvis gennem objekter i klassen String, selvom det også er en mulighed at arbejde med tegnarrays, især hvis vi ønsker at optimere ressourcer eller arbejde med kode med lav hukommelse. Lad os dykke ned i, hvordan du bruger funktionen korrekt strcmp() og andre alternativer, der også er nyttige i dette miljø.

Hvad er strcmp() og hvordan virker det på Arduino?

Funktionen strcmp() Det har ret simpel adfærd: det tager to strenge af tegn, sammenligner dem tegn for tegn og returnerer en værdi baseret på denne sammenligning. Metoden evaluerer ASCII-værdier af karaktererne, hvilket er vigtigt at huske på. De mulige resultater af denne sammenligning er følgende:

  • Hvis kæderne er de samme, strcmp() Hent tilbage 0.
  • Hvis det første tegn, der adskiller sig, har en lavere ASCII-værdi i den første streng, vender funktionen tilbage et negativt tal.
  • Hvis den første strengs umatchede karakter er større, vender den tilbage et positivt tal.

Et praktisk eksempel på brug af funktionen strcmp() er at sammenligne to strenge, som vi introducerer eller genererer ved hjælp af andre funktioner. For eksempel kan vi lave et program, der indsamler brugerdata og sammenligner med en lagret streng, validerer, om oplysningerne er korrekte.

Vigtige forskelle mellem strcmp() og andre funktioner

Når du arbejder med strenge i Arduino, er der andre alternativer til strcmp() der bedst passer til dine behov. En af dem er memcmp(), som udfører en sammenligning på hukommelsesniveau, nyttigt, når vi ikke ønsker at stole på en nulterminator i vores strenge. I modsætning til strcmp(), som er designet til at arbejde med nulterminerede strenge, memcmp() den sammenligner simpelthen et bestemt antal bytes.

Lad os se på dens grundlæggende syntaks:

if (memcmp(payload, "cadena", longitud) == 0) { // Ejecuta la acción}

På grund af dens fleksibilitet er det en meget nyttig mulighed, hvis du arbejder med bidder af data eller beskeder med fast længde, der skal sammenlignes byte for byte.

Konkrete use cases: strengovervågning og sammenligning i realtid

Forestil dig, at du arbejder på et projekt, hvor du modtager information i realtid, og du skal sammenligne dem med en bestemt værdi. Funktionen strcmp() Det er et nøgleværktøj i denne type situationer. For eksempel, hvis du sammenligner data modtaget fra en sensor og ønsker at validere, om de matcher en foruddefineret værdi, strcmp() vil give dig mulighed for at gøre dette effektivt.

I dette kodestykke sammenligner vi, om værdien modtaget fra en pH-sensor matcher visse kalibrerede værdier:

if (strcmp(inputString, "CAL,4") == 0) { // Acción cuando se recibe el valor de calibración}

Denne type sammenligning er afgørende i applikationer, hvor dataene kan variere, og vi skal træffe beslutninger baseret på resultaterne af aflæsningerne.

Andre metoder til at arbejde med strenge

Bortset fra strcmp(), kan du også bruge andre funktioner i Arduino-økosystemet. Funktionen compareToer for eksempel en del af klassen String og gør det nemmere at sammenligne objekter i den pågældende klasse. Skønt strcmp() Det er mere almindeligt i implementeringer på lavt niveau eller med karakterarrays, compareTo nyttigt, hvis du allerede arbejder med objekter String.

Her er nogle yderligere metoder, du kan bruge:

  • sammenligne med(): Sammenlign to objekter String og returnerer en sammenligningsværdi som i strcmp().
  • lige med(): Kontrollerer, om to strengobjekter er nøjagtigt ens, returnerer sandt eller falsk.

Almindelige problemer og hvordan man løser dem

En af de mest almindelige fejl ved brug strcmp() på Arduino sørger ikke for, at strengene er korrekt afsluttet med en \0 (nultegn). Hvis strengen ikke afsluttes korrekt, vil funktionen fortsætte med at sammenligne i hukommelsen ud over, hvad du forventede, hvilket kan føre til uventede fejl eller uregelmæssig adfærd.

Hvis du har mistanke om, at dine strenge ikke er afsluttet korrekt, kan du ty til løsninger som f.eks memcmp(), som ikke er afhængig af et null for at afgrænse strengen, og giver dig mulighed for at angive et specifikt antal bytes til sammenligning.

Et andet problem, du kan støde på, er, når du sammenligner strenge, som du muligvis har modtaget via seriel input. Du bør altid sørge for at rense og formatere strengene, før du forsøger at sammenligne.

Fuldstændig implementeringseksempel

For at illustrere, hvordan disse værktøjer fungerer i et rigtigt projekt, er her et eksempel, der kombinerer strengsammenligning med funktionen Serial.println() Sådan viser du resultaterne på Arduino seriel monitor:

#include <string.h> void setup() { Serial.begin(9600); char str1[] = "Hola"; char str2[] = "Hola"; int result = strcmp(str1, str2); if (result == 0) { Serial.println("Las cadenas son iguales"); } else if (result > 0) { Serial.println("La primera cadena es mayor"); } else { Serial.println("La segunda cadena es mayor"); } } void loop() { }

Denne kode sammenligner to strenge og viser resultaterne på skærmen. Det er et godt eksempel på den praktiske brug af strcmp() i rigtige Arduino-applikationer for at sammenligne tekststrenge effektivt.

Ud over sammenligningen kan du bruge output af strcmp() inden for betingede strukturer som if at udføre bestemte handlinger, når strengene matcher eller ej.

Optimering i projekter med begrænsede ressourcer

Som du måske allerede har bemærket, er brugen af strcmp() og lignende funktioner er en meget effektiv mulighed, når vi har projekter med hukommelsesbegrænsninger, hvilket er ret almindeligt i Arduino-projekter. Når du bruger tegnarrays i stedet for objekter String, optimerer vi hukommelsesforbruget, hvilket er vigtigt, når du arbejder på mikrocontrollere med lille lagerkapacitet.

Endelig er det vigtigt at fremhæve, at i projekter, hvor man arbejder med sensorer, interfaces eller kommunikationsmoduler, er det essentielt at validere hver modtagne data for at undgå fejl i udførelsen eller uønsket adfærd.

Alle de ovenstående, strcmp() Det er et meget alsidigt værktøj, der tilpasser sig flere scenarier, fra de enkleste til meget mere komplekse applikationer, hvor det er nødvendigt at optimere ressourcer og træffe beslutninger baseret på kædesammenligninger.


Start samtalen

Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.