Logikproblem

Gast #3328242
Lesenswert?

Hallo Leute,

Ich arbeite mich erst in C++ und MC Technik ein.
Nun möchte ich folgende Aufgabenstellung lösen und weiss nicht mehr 
weiter.

Ich möchte die Bytereihung beibehalten und über die serielle augeben.

ich erhalte aber immer folgende Ausgabe "01110000",ich möchte aber
"00001110" ausgeben.

Der Fehler liegt sicher hier "byte mask = 0x01; mask; mask <<= 1"
was muss ich ändern dass sich die Ausgabe dreht ?

lg eddi


#include <SoftwareSerial.h>

    void setup()
    {
    Serial.begin(57600);
    }



    void loop()
    {
     byte test = 00001110;

     for (byte mask = 0x01; mask; mask <<= 1)
      {
        if (test & mask) // wähle das  bit
           Serial.print("1"); // send 1
        else
           Serial.print("0"); // send 0
      }
    }
Gast #3329336
Lesenswert?

Leider hänge ich bei meinem Problem noch immer etwas fest.

Obige Lösung funktioniert aber nur mit einem Wert in einer Varianblen
   Warum bekomme ich dann verschiedene Werte ob ich den wert aus einer 
Variablen nehme oder aus einem Array ?

lg ed

#include <SoftwareSerial.h>

    void setup()
    {
    Serial.begin(57600);
    }


     unsigned long Long_Array1[2] = {918016,9502976};

     uint8_t i;

    void loop()
    {
   // Ausgabe Long_Array1

    long test;
    long mask = 0x800000;
    for (i=0; i<2; i++);
    {
     // test = Long_Array2[i];   // nehme ich die Daten aus dem Array 
bekomme ich folgende Ergebnis: 000000000010010110000000
     test = 918016;          // nehme ich die Daten direkt aus der 
Variablenrehalte ich das Richtige Ergebins: 000011100000001000000000
    do{
      if (test & mask) // wähle das  bit
         Serial.print("1"); // send 1
      else
         Serial.print("0"); // send 0
      mask >>= 1;
    }while(mask);

    }
    Serial.println(" ");
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren