Această întrebare are deja răspunsuri aici :
Comentarii
Răspuns
Dacă tocmai ieșiți în serie nu trebuie să concatenați – imprimați fiecare bit separat, precum:
Serial.print(out1); Serial.print(","); Serial.print(out2); Serial.print(","); Serial.println(out3);
Ar trebui să evitați utilizarea șirului, deoarece nu este bun pe dispozitive cu o cantitate mică de memorie, cum ar fi Arduinos. Inst ead dacă într-adevăr trebuie să concatenați numere, ar trebui să utilizați un șir C și poate snprintf
pentru a formata numerele în acesta:
char out[30]; snprintf(out, 30, "%d,%d,%d", out1, out2, out3);
Răspuns
Am al doilea punct al lui Majenko despre doar tipărirea biților separat dacă este posibil și evitarea String
obiecte.
Cu toate acestea, dacă trebuie să construiți un astfel de șir (nu obiect String, ci doar șir C simplu), nu aveți nevoie de sprintf()
, care este o funcție destul de mare: puteți construi șirul caracter cu caracter. De exemplu:
char out[4]; // 3 + 1 char for the termination character out[0] = out1==HIGH ? "1" : "0"; out[1] = out2==HIGH ? "1" : "0"; out[2] = out3==HIGH ? "1" : "0"; out[3] = "\0"; // add NUL termination Serial.println(out);
Aceasta utilizează operator ternar , care aici înseamnă „dacă out1
este HIGH
, atunci utilizați caracterul "1"
, altfel folosiți "0"
”.
Acum, se întâmplă doar că în Arduino HIGH
înseamnă 1 și LOW
înseamnă 0. Și numerele dintr-o singură cifră pot fi convertite în caractere doar prin adăugarea codului numeric al caracterului „0”, care este 48, dar poate fi scris ca "0"
în C ++. Astfel puteți scrie:
out[0] = out1 + "0"; // convert number to character
Și puteți pune totul împreună ca:
char out[4]; // 3 + 1 char for the termination character out[0] = digitalRead(r1) + "0"; out[1] = digitalRead(r2) + "0"; out[2] = digitalRead(r3) + "0"; out[3] = "\0"; // add NUL termination Serial.println(out);
Răspuns
Serial.write (b) tipărește un octet, nu un șir. Folosiți print () pentru a imprima șiruri și numere.
Serial.print(digitalRead(r1)); Serial.print(digitalRead(r2)); Serial.println(digitalRead(r3));