Arduino integer mit binärem Wert in decimal umwandeln?

2 Antworten

Wenn du die Zahl direkt im Binärformat (B) angibst, sparst du dir sämtliche Umwandlungen:

byte bits = B10000001;

digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, bits);
digitalWrite(latchPin, HIGH);
Woher ich das weiß:Hobby
Biberjumper 
Fragesteller
 19.02.2022, 21:24

Aber die Shift Out funktion nimmt ja bei 8Bit zahlen von 0-255 und shiftet sie in Bits raus oder? Also muss man ihr eine Decimalzahl geben?

0
TheSnowGlobe  19.02.2022, 21:30
@Biberjumper

In welchem Zahlensystem du die Zahlen angibst, ist egal. Wenn du das Programm kompilierst, wird sowieso alles in Binärzahlen umgewandelt, da der Mikrocontroller nichts anderes versteht. Ob du nun also B10000001 (binär) oder 129 (dezimal) oder 0x81 (hexadezimal) schreibst ... es ist die selbe Zahl.

0
Biberjumper 
Fragesteller
 19.02.2022, 21:32
@TheSnowGlobe

Ok. Aus irgend einem Grund funktioniert es trotzdem nicht. Jedes mal wenn ich strom anstecke bekomm ich einen selben Output

0
TheSnowGlobe  19.02.2022, 21:36
@Biberjumper

Da würde ich jetzt als erstes vermuten, dass die Verkabelung nicht korrekt ist.

0
Biberjumper 
Fragesteller
 19.02.2022, 21:40
@TheSnowGlobe

Die Verkabelung stimmt. Ich kann dir mal kurz den ganzen Code schicken.

//Pin connected to ST_CP of 74HC595
int latchPin = 10;
//Pin connected to SH_CP of 74HC595
int clockPin = 9;
////Pin connected to DS of 74HC595
int dataPin = 11;

int buttonPin = 0;

byte bits = B11111111;

int buttonState = 0;

void setup() {
//set pins to output so you can control the shift register
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(buttonPin, INPUT);
}

void pushValues() {
  // take the latchPin low so
  // the LEDs don't change while you're sending in bits:
  digitalWrite(latchPin, LOW);
  //Binary to decimal
  //Shift out Bits from decimal value
  shiftOut(dataPin, clockPin, MSBFIRST, bits);
  //take the latch pin high so the LEDs will light up:
  digitalWrite(latchPin, HIGH);
}

void loop() {
  buttonState = digitalRead(buttonPin);
  if (buttonState == HIGH) {
    // turn LED on:
    bits = B10000001;
    pushValues();
  } else {
    // turn LED off:
    bits = B01000010;
    pushValues();
  }
}
0
TheSnowGlobe  19.02.2022, 21:46
@Biberjumper

Ich kann in dem Programm keine Unstimmigkeiten entdecken. Sieht alles einwandfrei aus. Was ist denn das genaue Ergebnis, wenn du das Programm laufen lässt?

0
Biberjumper 
Fragesteller
 19.02.2022, 21:55
@TheSnowGlobe

Es sind immer zufällige LED's die angehen. Also immer andere die dann auch egal wie ich den Knopf drücke an bleiben

0
TheSnowGlobe  19.02.2022, 22:57
@Biberjumper

Also wenn nicht zufällig das Shift-Register defekt ist, kann ich mich nur wiederholen: da muss irgendwas mit der Verkabelung falsch sein. Wenn du magst, kannst du gerne ein Foto hier einstellen, sodass man das nochmal gegenprüfen kann.

0
TheSnowGlobe  19.02.2022, 23:31
@Biberjumper

Also so dürfte da gerade eigentlich gar nichts funktionieren. Der Mikrocontroller sitzt eine Reihe zu hoch. Wenn du ihn eine Reihe runtersetzt, dann sollten fast alle Anschlüsse stimmen. Nur der Pullup-Widerstand vom Taster muss noch in die richtige Reihe gesetzt werden.

1
Biberjumper 
Fragesteller
 19.02.2022, 23:39
@TheSnowGlobe

Oh shit ich bin so dumm. Das habe ich jetzt übersehen... Habe mich schon gewunert warum es davor geklappt hat. Vielen Dank, die Probleme sind jetzt alle gelöst :)

0

Mach es doch einfach mit einem String oder einem Array. Das macht das Problem viel einfacher als ein Integer.