Som @KiraSan sa, trenger du noe større enn en byte på 9 bits. Imidlertid:
intally; tally = 0; for (char pin = 1; pin< = 9; pin ++) {if (digitalRead (pin) == HIGH) {tally | = 1<< (9 -nål); }}
Dette gjøres fra minnet og er uprøvd. Hvis noen oppdager noen feil, gi meg beskjed.
Forklaring: summen er summen (du bør gjøre noe med dette på slutten, åpenbart, eller det har ingen effekt). Den er definert og satt til 0. Les deretter pin for hver pin (1-9); hvis pinnen er høy: ta tallet '1', og dobl det (9-pinners) ganger; så hvis pin = 9, blir den doblet 0 ganger; for pin = 2, blir den doblet en gang (totalt 2), og så videre. Sett denne biten på tellingen.
Merk at dette leser digital pin 1 (som tilfeldigvis er den andre pin, den første pin 0) - dette bør merkes som "tx" for å sette i den første bit, ikke den som er referert til som "pin1" (som kan være en konstant eller en variabel, og derfor kan peke på en gitt pin). Denne metoden antar også at pinnene er i orden - du kan enkelt endre den til å starte fra 0 eller 7, men de må være i orden.
Hvis du vil ha vilkårlige pinner, eller variable pinner, kan du prøv dette:
const PIN_COUNT = 9; char pins [PIN_COUNT] = {13,2,5,4,3,6,7,8,9}; intally; tally = 0 ; for (char pin = 0; pin<PIN_COUNT; pin ++) {if (digitalRead (pins [pin]) == HIGH) {tally | = 1<<pin; }}
Endringer: legg til PIN_COUNT som en konstant i starten, angi rekkefølgen på pinnene (som kan omfatte alle digitale pinner, inkludert å gjenta en gitt pinne hvis du føler deg så tilbøyelig, til og med etter starten av koden.). Du kan også endre dem ved å gjøre: pins [0] = 1;
- merk at de er nummerert fra 0-8 for 9 pins. Siden de nå starter ved 0, blir linjen med << nå justert tilsvarende, og det samme er linjen som starter med for ...
.