for Schleife will nicht so wie ich will

Gast #4910824
Ahoi!

Ich versuche, den binären Wert der Pins D2 bis D10 ein eine Variable 
einzulesen, um damit später die Busadresse meines Geräts festlegen zu 
können. Ich verwende einen Arduino Nano. Pin D2 hat dabei den Wert 1, 
Pin D10 den Wert 256.
1
int StAdr;
2

3
void setup(  ) {
4
  Serial.begin(9600);
5
  for(int i = 2; i < 11; i++){
6
    pinMode( i, INPUT_PULLUP );
7
    }
8
}
9

10
void loop(  ) {
11
  StAdr = 0;
12
  for( int i = 0; i < 9; i++ ){
13
    if( digitalRead(i+2) == 0 ){
14
      StAdr = StAdr + pow( 2, i );
15
      }
16
    }
17
  Serial.println(StAdr);
18
}

Verbinde ich nun Masse mit Pin D2, kommt der gewünschte Wert von 1. Wenn 
ich nun aber einen Binärwert höher als Drei anlege, ist der Wert um eins 
zu niedrig (die 3 kommt doppelt vor)

Also so:
1
Angelegter Wert:      0 1 2 3 4 5 6 7 ...
2
Seriell übert. Wert:  0 1 2 3 3 4 5 6 ...

Ich habe die For-Schleife nun für i von 1 bis 3 durchgerechnet und 
theoretisch sollte es gehen. Hat jemand einen Tipp für mich? Liegt es an 
der pow(base,exponent)-Funktion?

Mit freundlichen Grüßen
Valentin
Gast
wenn Du wirklich double pow(double x, double y) verwendest statt (1<<i), 
dann solltest Du dich einlesen über

- interger und floating-point Typen
- implizite Typumwandlungen
- Größenordnung von Rechenleistungen für Operatoren
- rundungsfunktionen

Ansonsten: Ja. Also runde oder nimm um Himmels willen das statt von 
oben.
Gast
Sorry. War in der Tat das Falsche Forum.

In der Zwischenzeit habe ich meinen Fehler gefunden. Wie in [1] 
beschrieben wird, bigt pow() floats aus. Wenn ich 0.5 zum Wert Addiere, 
wird aufgerundet und der Wert passt.

MfG
Valentin

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.