messaggi VOCALI da MAIUSCOLE A MINUSCOLE

Buongiorno a tutti! Ho riscontrato un problemino con un progetto.
Trasmetto messaggi vocali da un app android ad arduino MEGA 2560.
Ma a volte le iniziali del messaggio sono MAIUSCOLE ed altre volte MINUSCOLE. (così facendo arduino fa distinzione)
Quindi per ovviare al problema stavo pensando di ricopiare tutti i comandi e mettere le stringhe lette con l'iniziale maiuscola, ricopiare tutto e mettere le stringhe con l'iniziale minuscola.

Dunque ero curioso: c'è un modo più semplice? Cioè comunicare ad arduino di non far differenza.

Vi ringrazio per l'attenzione.
Vi allego il codice (ancora non completo di tutti i comandi) :smiley:

 #include <Servo.h>
Servo servo1;//collo
Servo servo2;//occhi su e giu

String readString;
void setup() {
  
Serial.begin(38400);
pinMode(13, OUTPUT);
servo1.attach(8);//collo
servo1.write(90);
servo2.attach(9);
servo2.write(45);
}

void loop() {
  // put your main code here, to run repeatedly:
while(Serial.available()){
  delay(3);
  char c = Serial.read();
  readString+=c;
}

if(readString.length() >0)
{
  Serial.println(readString);
//------------- collo
   if(readString == "dritto")
  {
  servo1.write(90);
  }
   if(readString == "gira a destra")
  {
  servo1.write(75);
  }
  
   if(readString == "gira di più a destra")
  {
  servo1.write(55);
  }
     if(readString == "gira a sinisra")
  {
  servo1.write(105);
  }
  
   if(readString == "gira di più a sinistra")
  {
  servo1.write(125);
  }
  //------------ occhi 
  
   if(readString == "guarda dritto")
  {
  servo2.write(45);
  }
    if(readString == "guarda in alto")
  {
  servo2.write(5);
  }
  
   if(readString == "guarda in basso")
  {
  servo2.write(85);
  }
  
  readString = "";
}
}

Se non ti serve distinzione tra maiuscole e minuscole io creerei (o vedrei se già esiste "Guglielmo...Pensaci tuuuu") una funzione "minuscolizza" alla quale passi una stringa di caratteri qualsiasi, e se trova delle maiuscole le rende le corrispondenti minuscole.

Nel set ASCII le MAIUSCOLE vanno da 0x41 ('A') a 0x5A ('Z') mentre le minuscole vanno da 0x61 ('a') a 0x7A ('z') ...
... è quindi piuttosto facile vedere se un carattere è MAIUSCOLO ( c < 0x61) e trasformarlo in minuscolo sommando 0x20 al suo valore :slight_smile:

Ovviamente questo vale SOLO s si ricevono caratteri alfabetici, altrimenti occorre fare altri confronti oppure ...
... usare le due funzioni già fatte che sono in <string.h>, ovvero la strlw() e la strup() ;D

Guglielmo

gpb01:
Nel set ASCII le MAIUSCOLE vanno da 0x41 ('A') a 0x5A ('Z') mentre le minuscole vanno da 0x61 ('a') a 0x7A ('z') ...
... è quindi piuttosto facile vedere se un carattere è MAIUSCOLO ( c < 0x61) e trasformarlo in minuscolo sommando 0x20 al suo valore :slight_smile:

Ovviamente questo vale SOLO s si ricevono caratteri alfabetici, altrimenti occorre fare altri confronti oppure ...
... usare le due funzioni già fatte che sono in <string.h>, ovvero la strlw() e la strup() ;D

Guglielmo

Grazie mille mi potrebbe cortesemente indicare la modifica da fare al programma?
Poichè non ho capito come modificarlo :slight_smile:

Cosa non capisci di strlwr?

Ciao,
P.