Mi spiegate questo codice?

vorrei sapere il significato di questo codice, passo dopo passo. Grazie a chi lo farà


#include <LiquidCrystal.h>


LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int calcoloPosizione(String m, int caratTot){
  
  int posizione;
  int lunghezza = m.length();
  posizione = caratTot - lunghezza;
  posizione = posizione / 2;
  return posizione;
}

void setup() {
  lcd.begin(16, 2);
 
}

void loop() {
  String m2 = "hello";
  int colonne = 16;
  int position = calcoloPosizione(m2, colonne);
lcd.setCursor(position, 0);
  lcd.print (m2);
  delay(5000);
  String m3 = "hello, world";
  lcd.setCursor (position,0);
  lcd.print(m3);

}

Buonasera e benvenuto, :slight_smile:

essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione … possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il succitato REGOLAMENTO … Grazie. :slight_smile:

...poi in conformità al REGOLAMENTO , punto 7, cortesemente edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita :pencil2: che si trova in basso del tuo post), seleziona la parte di codice e premi l’icona </> nella barra degli strumenti per contrassegnarla come codice. Grazie.

*P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread e sistemato il codice come da regolamento, nessuno ti potrà rispondere, quindi ti consiglio di fare il tutto al più presto. :wink: *

ho fatto tutto quello che mi hai chiesto

#include <LiquidCrystal.h> //Includo la libreria per gestire lcd


LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Creo l'oggetto lcd e tra parentesi i nomi dei pin utilizzati
int calcoloPosizione(String m, int caratTot){// Funzione che mi calcola 
//la posizione dove stampare la stringa su lcd, riceve la strina e i numeri colonne dell'lcd
  
  int posizione;
  int lunghezza = m.length(); //lunghezza è uguale ai numeri caratteri della stringa
  posizione = caratTot - lunghezza; //posizione è uguale a numero colonne lcd, meno caratteri stringa diviso due
  posizione = posizione / 2;
  return posizione; //restituisco il calcolo
}

void setup() {
  lcd.begin(16, 2); //inizializzo lcd, con numero colonne e numero righe
 
}

void loop() {
  String m2 = "hello";
  int colonne = 16;
  int position = calcoloPosizione(m2, colonne); //calcolo dove stampare hello
lcd.setCursor(position, 0); //mi posizione a colonne, e prima riga
  lcd.print (m2);//stampo su lcd
  delay(5000);//pausa di 5 secondi
  String m3 = "hello, world"; //seconda stringa
 // QUI DOVREBBE CALCOLARE LA NUOVA POSIZIONE E MANCA UNA RIGA
  lcd.setCursor (position,0); // Mi posiziono
  lcd.print(m3);// stampo la seconda stringa

}

Grazie mille :smile:

Sarei grato se mi spiegaste passo per passo queste righe di codice, grazie a chi lo farà:)


#include <LiquidCrystal.h>


LiquidCrystal pippo(12, 10, 11, 5, 4, 3, 2);
int calcposizione(String m ){
  
  int lunghezzamessaggio = m.length();
  Serial.print (lunghezzamessaggio);
  int differenza = 16 - lunghezzamessaggio;
Serial.println (differenza);
  int posizionestart = differenza/2;
  return posizionestart;
}

void setup() {
  pippo.begin(16, 2);
  Serial.begin(9600);
 
}

void loop() {
  String msg = "ciaoo";
  int position = calcposizione (msg);
  pippo.setCursor (position, 0);
  pippo.print (msg);


}

Ma scusa le spiegazioni ricevute sull'altro topic non ti bastavano?
In più il cross posting è proibito dal regolamento

se vedi bene l'ho cambiato.

Ma cosa non capisci di quel codice?
L'hai scritto / copiato pensando che facesse una cosa e invece ne fa un'altra?

... è comunque "cross posting" e NON devi aprire thread differenti per lo stesso argomento (sempre di spiegazione di codice si tratta). Il "cross posting " è probito da regolamento.

Ho quindi riunito i due thread e continua qui. Grazie.

Guglielmo

scusami ma perché non potrei chiedere una cosa più volte? capisco che è una regola ma non capisco il senso. Se uno vuole rispondere risponde sennò nulla...

vorrei semplicemente che qualcuno mi faccia capire il funzionamento spiegandomi riga per riga.

Come da punto 13 del REGOLAMENTO (che forse non hai letto :roll_eyes:):

Non fate cross-posting! Lo sappiamo che siete impazienti di ottenere la risposta al vostro problema, ma ripubblicare la stessa domanda in più sezioni del forum o pubblicare un'altra domanda correlata alla precedente, duplica gli sforzi e riduce l'attenzione al vostro problema. Ottenete senz'altro una miglior risposta se tutti possono discutere il problema in un unico posto. Il cross-posting è veramente fastidioso nonché poco educato: i moderatori cancelleranno i messaggi extra (anche in sezioni di lingua diversa) e voi riceverete un richiamo e, in caso di recidività, un BAN. Perciò evitate i battibecchi e pubblicate una sola richiesta d'aiuto. Sarà apprezzato.

Quindi NON si aprono più thread relativi allo stesso argomento e il reiterare la cosa è anche causa di BAN.

Guglielmo

Allora, come diciamo sempre, qui NON teniamo corsi di C/C++ che NON sono argomento del forum ...

... se non conosci la sintassi o il linguaggio puoi cominciare con studiare QUESTO proseguire con QUESTO ed acquistare un buon libro (come QUESTO) ... vedrai che dopo tutto ti sarà più chiaro :slight_smile:

Guglielmo

Ah ... per tutto ciò che NON è specifico del C/C++, ma sono funzioni specifiche del framework "wiring" su cui è basato un programma Arduino, puoi anche consultare il REFERENCE che è completo di tutte le funzioini e classi.

Per le librerie standard Arduino invece puoi anche guardare QUI. :slight_smile:

Guglielmo

In pratica fa la stessa cosa del codice che hai postato la prima volta

esatto questo l'ho visto però dato che la funzione che ho creato è diversa da quelle precedente, volevo capire almeno quella

int calcposizione(String m ){
  
  int lunghezzamessaggio = m.length();
  Serial.print (lunghezzamessaggio);
  int differenza = 16 - lunghezzamessaggio;
Serial.println (differenza);
  int posizionestart = differenza/2;
  return posizionestart;
}

... esamina riga per riga, elemento per elemento e cerca di capire cosa fa ... se non ci riesci, vedi i miei due post sopra (#14 e #15) :wink:

Guglielmo

Guglielmo caro, ho capito che dovrei studiare ma purtroppo non tutti sono portati per tutte le materie. Rettifico: se non vuoi rispondermi con ciò che chiedo puoi non farlo, aspetterò ulteriori risposte.

... veramente dalla tua presentazione leggo:

Ciao a tutti sono Andrea. scrivo dalla Puglia. sono un appassionato dell'informatica, di Arduino. Spero di andare avanti in questo percorso e di imparare sempre cose nuove

Quindi, se vuoi andare avanti con Arduino, ed imparare, da buon appassionato di informatica, tocca che ti rimbocchi le maniche e ti metti a studiare :slight_smile:

Come ti ho detto NON è scopo di questo forum spiegare il inguaggio ... leggi bene il REGOLAMENTO, punto 16.1 ... noi possiamo aiutarti a correggere dei codici che tu scrivi o degli schemi con Arduino che tu fai ... NON fare lezioni di C/C++ :roll_eyes:

Guglielmo