Binär in dezimal umwandeln und damit rechnen -Anfängerfrage-

Hallo,

ich lese mit einem Schieberegister (74HC165) 8 bit ein und gebe die Werte in Dezimal auf ein LC-Display aus.

#include <LiquidCrystal.h>

// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

// Define Connections to 74HC165
// PL (74hc165)pin 1 assync parallel load in
int load = 9;
// CE (74hc165)pin 15 clock enable
int clockEnablePin = 10;
// Q7 (74hc165)pin 7 data in
int dataIn = 11;
// CP (74hc165)pin 2 clock in
int clockIn = 12;

int val = 0;

void setup()
{

  // Setup 74HC165 connections
  pinMode(load, OUTPUT);
  pinMode(clockEnablePin, OUTPUT);
  pinMode(clockIn, OUTPUT);
  pinMode(dataIn, INPUT);
  
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  
  // Print a message to the LCD.
  lcd.print("Pin Status:");

}


void loop()
{
 // Write pulse to load pin
  digitalWrite(load, LOW);
  delayMicroseconds(5);
  digitalWrite(load, HIGH);
  delayMicroseconds(5);
 
  // Get data from 74HC165
  digitalWrite(clockIn, HIGH);
  digitalWrite(clockEnablePin, LOW);
  int incoming = shiftIn(dataIn, clockIn, LSBFIRST);
  digitalWrite(clockEnablePin, HIGH);
  
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  val = incoming, DEC;
  if (val<10000) lcd.print(' ');
  if (val<1000) lcd.print(' ');
  if (val<100)  lcd.print(' ');
  if (val<10)   lcd.print(' ');
  
  //lcd.setCursor(0, 2);
  //lcd.print("   ");
  
 //int ergebnis = (incoming, DEC);
  lcd.print(incoming,DEC);     
   delay(200);
 }

Mit lcd.print(incoming, DEC); kann ich mir die Werte auch in Dezimal anzeigen lassen, soweit funktioniert ja alles ganz gut.
Nur ich möchte die Dezimal-Werte berechnen, bzw mit einem Faktor versehen und dann mir anzeigen lassen.
Ist das mit einer Ergänzung des lcd.print Befehl möglich?

Vielen Dank im Vorraus

Nur ich möchte die Dezimal-Werte berechnen, bzw mit einem Faktor versehen und dann mir anzeigen lassen.

Faktor?
Hört sich nach Multiplikation an...
Üblicherweise verwendet man dafür den * Operator.

Ist das mit einer Ergänzung des lcd.print Befehl möglich?

Multiplizieren kann ein LCD eher nicht.
Anzeigen schon.

val = incoming, DEC;

Das ist unsinnig.
Der Anweisungsverkettungsoperator ist da fehl am Platze und tut mit Sicherheit nicht, was du dir wünscht!

lcd.print(incomming * 123)

Gruß Tommy

val = incoming, DEC;

Das ist nicht falsch, nur Unsinn.

print ist kein Befehl, sondern eine Funkion/Methode.
Wahlweise mit einem Ganzzahl-Prameter. (int)

Der Asudruck incoming * 5 liefert eine Ganzzahl, wenn incoming eine ist.

Also geht auch lcd.print(incoming*10);

Werte können dezimal, hexadezimal, oktal, binär oder wie auch immer angezeigt werden. Dafür ist der optionale zweite Parameter bei print gedacht.

Das ist nicht falsch, nur Unsinn.

Sagte ich was anderes?

warning: right operand of comma operator has no effect [-Wunused-value]

Aber, wenn du es schon so ansprichst...

Ja, ich halte unisinnigen/wirkungslosen Code für falsch.

Hallo,

@ TO:
der Wert von incoming bleibt gleich, egal ob du ihn dir dezimal oder binär anzeigen lässt. Es ändert sich nur die Darstellungsform. Da für print die dezimale Anzeige Standard ist, muss du nicht zusätzlich das Attribut/Parameter DEC angeben. Wenn doch schadet es jedoch auch nicht.

Eine Variable namens DEC zu definieren ist jedoch wirklich an der Stelle falsch.

Deine beiden DEC's haben nichts miteinander zu tun!
(Hatte einen Datentypen gesehen der nicht vorhanden ist, dass führte zur falschen Behauptung.)

Eine Variable namens DEC zu definieren ist jedoch wirklich an der Stelle falsch.

Da wird nirgendwo ein DEC definiert.

Deine beiden DEC's haben nichts miteinander zu tun!

Es gibt keine 2 DECs

Hat sich erledigt!

OMG ::slight_smile: , ja es ist genau so wie ich es haben wollte.
Ich war immer davon ausgegangen das für die dezimale Darstellung immer DEC angegeben weden muss. Nur da konnte ich nicht mit rechnen... Nur (incoming * 10 ) z.B. und dann rechnen... ist doch so einfach...... DANKE

CPU und Controller rechnen intern mit Binärzahlen weil die ganze digitale Logik aus 2 Zuständen aufgebaut ist.
Zur Darstellung für den Menschen wird aus einer oder mehreren Binärzahlen eine Dezimalzahl, aber auch eine Oktal, oder Hexadezimalzahl, von Buchstaben, Zeichen, Farben, Formen, Tönen, Bildern und Videos ganz zu schweigen.
Grüße Uwe

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.