skee0r
January 25, 2025, 9:14am
1
Hallo,
Ich bin auf der Suche nach einem Ansatz, Zahlen im Binärformat anzuzeigen.
Oft geht es mir eben nur darum, bestimmte Zahlenwerte (Temperatur, Gewicht, etc) auszugeben, bzw anzuzeigen und dafür immer ein Display zu verwenden ist oft too much.
Mir würde es schon reichen, einfach ein paar LEDs zu haben und die im Binärformat zu beleuchten, um damit den Zahlenwert darzustellen.
Aber ich habe noch keinen Weg gefunden, eine Zahl in Binär umzuwandeln und daraus dann abzuleiten, welche LED ich an/aus schalte.
Hat jemand evtl eine Idee dafür?
Danke schonmal
combie
January 25, 2025, 9:19am
2
Klar!
Mit einer Schleife über alle Bits hinweg iterieren.
Hilfreich dabei: C++ Operator Precedence - cppreference.com
Rintin
January 25, 2025, 9:20am
3
Wenn du Binär darstellen willst, kannst du sowas machen:
pinLookup[] = {2,4,7,9,3,5,6,8};
for (x = 0; x < 8; x++)
{
on = (value >> x) & 1;
digitalWrite(pinLookup[x], on);
}
Aber bei einer Temperatur bietet es sich an, bei mehr Temperatur mehr LEDs anzuschalten.
2 Likes
Kai-R
January 25, 2025, 9:20am
4
Edit: habe es beim Anpassen kaputt gemacht... darum nochmal neu:
Run IoT and embedded projects in your browser: ESP32, STM32, Arduino, Pi Pico, and more. No installation required!
Code
namespace gc {
constexpr uint8_t ledPins[] {5,6,7,8,9,10,11,12};
}
//
// Display a bit string with leading zeros
//
template <typename T> void printBits(Stream &st, const T value) {
constexpr uint8_t maxBits = (sizeof(T) * 8);
constexpr T mask = (static_cast<T>(0x01) << (maxBits - 1));
st.print(value); st.print(" ");
uint8_t i = 0;
while (i < maxBits) {
st.print(((value << i++) & mask) ? 1 : 0);
// Output a space after each nibble.
if (!(i - ((i >> 2) << 2))) { st.print(" "); }
}
st.println();
}
//
// Light up LEDs
//
template <typename T, size_t N> void bitsToLed(const T value, const uint8_t (&leds)[N]) {
for (size_t i = 0; i < N; ++i) {
digitalWrite(leds[i],((value >> i) & 0x01));
}
}
void setup()
{
Serial.begin(115200);
randomSeed(analogRead(0)); // initialize the random number generator
for (auto &led : gc::ledPins ) {pinMode(led, OUTPUT);}
}
void loop()
{
uint8_t number = random(256);
printBits(Serial,number);
bitsToLed(number, gc::ledPins);
delay(10000);
}
Evtl. kannst Du Dir die Vorgehensweise von meinen erweiterten Printroutinen abschauen.
Gruß Tommy
noiasca
January 26, 2025, 11:04am
6
skee0r:
Oft geht es mir eben nur darum, bestimmte Zahlenwerte (Temperatur, Gewicht, etc)
...
Hat jemand evtl eine Idee dafür?
Ganze Zahlenwerte binär finde ich schon eher Umständlich ... 8 LEDs für 255 Werte.
Mit einer LED könntest du z.B. eine LED morsen lassen (und man lernt dabei noch was...)
Farbig mit Neopixl fällt mir auch noch ein, verbraucht nur einen Pin.
Wenns nur temporär gebraucht wird --> Ausgabe auf der Seriellen.
Wenn man es ohne PC sehen will --> ein "Testgerät" mit LCD und Serial In.
system
Closed
July 25, 2025, 12:57pm
8
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.