Reacties
- Omdat je alleen
1
s en0
s, je zou het ook kunnen converteren naar een driecijferig getal, en datSerial.write(out1*100 + out2*10 + out3);
- @Gerben: je bedoelt
Serial.println()
. - Correctie:
Serial.println(out1*100 + out2*10 + out3);
(bedankt @EdgarBonet)
Antwoord
Als u “gewoon naar serieel uitvoert, hoeft u deze niet aaneen te schakelen – druk gewoon elk bit afzonderlijk af, zoals:
Serial.print(out1); Serial.print(","); Serial.print(out2); Serial.print(","); Serial.println(out3);
U moet het gebruik van String vermijden, aangezien het niet goed is op apparaten met een kleine hoeveelheid geheugen zoals Arduinos. Inst ead als je echt getallen moet samenvoegen, moet je een C-string gebruiken en misschien snprintf
om de getallen erin op te maken:
char out[30]; snprintf(out, 30, "%d,%d,%d", out1, out2, out3);
Antwoord
Ik sluit aan bij Majenkos opmerkingen over het zo mogelijk apart afdrukken van de bits, en het vermijden van String
objecten.
Als je echter zon string moet bouwen (niet String-object, gewoon C-string), heb je sprintf()
, wat een vrij grote functie is: je kunt de string karakter voor karakter opbouwen. Bijvoorbeeld:
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);
Dit gebruikt de ternaire operator , wat hier betekent “if out1
is HIGH
, gebruik dan het teken "1"
, gebruik anders "0"
“.
Nu gebeurt het gewoon dat in Arduino HIGH
betekent 1 en LOW
betekent 0. En getallen van één cijfer kunnen worden omgezet in tekens door de numerieke code van teken “0” toe te voegen, wat 48 is, maar kan worden geschreven als "0"
in C ++. Dus je kunt schrijven:
out[0] = out1 + "0"; // convert number to character
En je kunt alles samenvoegen als:
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);
Antwoord
Serial.write (b) drukt één byte af, geen string. Gebruik print () om tekenreeksen en getallen af te drukken.
Serial.print(digitalRead(r1)); Serial.print(digitalRead(r2)); Serial.println(digitalRead(r3));