INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
[Anfänger] Char Array Problem
06.01.2019, 23:34
Beitrag #1
[Anfänger] Char Array Problem
Hallo an alle fleissigen Programmierer und Bastler hier Smile

Ich habe ein Problem mit einem Char Array, das ich erstellt habe. Vor lauter suchen und googeln schiele ich mittlerweise.. Bin noch Anfänger, und bitte um Hilfe und Tipps zu meinem folgenden Problem:

Ich baue mir ein Barometer mit alten VFD Röhren. Diese Uhren und Thermometer und so gibts schon massig. Aber es soll mal ein Barometer sein Big Grin, das den echten Luftdruck über NN anzeigt und ggf. später auch im Wechsel dann die Luftfeuchte + Temperatur.

Die Software vom Barometer läuft gut auf meinem kleinen Nano. Nun bin ich dabei, mit einfachen Mitteln den Luftdruckwert (5 Zahlen) in einen Binärstring ( 20 Bits im BCD Code ) umzuwandeln.

Diesen String schicke ich dann alle 10 Minuten in ein Schieberegister 74HC595, und im nächsten Schritt geht das durch zum BCD to 7 Segment Decoder / Treiber 74LS141, der dann die VFD Röhren antreibt.

Auf eine Multiplexierung Smile habe ich mal bewusst verzichtet.

Aktuell habe ich zum Beispiel den Luftdruck als Wert so: 1031.5 hPa
Im nächsten Schritt zerlege ich diese Zahl in einzelne Ziffern. Da ich kein Dezimalpunkt brauche, aber die 5. rechte Ziffer, sieht es dann so aus: 10315

Diese Zahl habe ich in einzelne Ziffern zerlegt und bekomme jeweils dazu die Bin angezeigt ( nur zum Testen ):

Serial.println("Anzeige der Einer Stelle:");
int Einer = Luftdruck_Ue_NN *10;
Serial.print("Dec: ");
Serial.println(Einer%10);
Serial.print("BIN: ");
Serial.println((Einer%10), BIN);

*************** Serieller Monitor Ausgabe *************
Luftdruck ueber NN: 1031.5 hPa

(also 10315 wird verarbeitet in: "Fuenfter Stelle" links bis "Erster Stelle" rechts ))

Anzeige nur der Fuenfer Stelle:
Dec: 1
BIN: 1

Anzeige der Vierer Stelle:
Dec: 0
BIN: 0

Anzeige der Dreier Stelle:
Dec: 3
BIN: 11

Anzeige der Zweier Stelle:
Dec: 1
BIN: 1

Anzeige der Einer Stelle:
Dec: 5
BIN: 100

Anzeige der Sechser Stelle: <---6. Stelle dient nur als Platzhalter im Schieberegister
1111

( Diese Werte schreibe ich danach in ein Array und sollten so erscheinen:
1111 0001 0000 0011 0001 0100 ) kommen aber als DEC zahlen aus dem Array )

Binärausgabe Seriell:
1111 0001 0000 0003 0001 0004

**********************************************************
Hier mal das Probe Array zum Test:

char Ausgabe25[30];

sprintf(Ausgabe25,"%04d %04d %04d %04d %04d %04d",Sechser, (Fuenfer%10), (Vierer%10), (Dreier%10), (Zweier%10), (Einer%10) );
Serial.println("Binärausgabe Seriell:");
Serial.println(Ausgabe25);

Sorryy, wenns total falsch ist, aber nirgends steht es mal gut beschrieben, oder mit einem Beispiel Sad((((

Uff.... Jetzt habe ich vorerst nur 2 Fragen / Probleme:

1. Problem: die Binärziffern 1-7 erscheint immer OHNE führende Nullen Sad

Dec 1= 1
Dec 2= 10
Dec 3= 11
Dec 4= 100
Dec 5= 101
Dec 6= 110
Dec 7= 111
Dec 8= 1000
Dec 9= 1001

( Im Array konnte ich das Problem bei den DEC Zahlen lösen mit %04d )

Das hätte ich gerne geändert, das die Binärziffer immer 4 stellig ist.

2. Problem:

Ich schreibe die jeweiligen Decimal Zahlen ins Array ( außer der Platzhalter 1111 Sechster ). Und Decimal bekomme ich sie auch wieder auf dem Serial monitor angezeigt.

Ich brauche aber alles in 4 Stelligem Binär Code ( wie mein Beispiel )
1111 0001 0000 0011 0001 0100

Die Leerzeichen lösche ich dann noch später raus und übergebe es nach dem Auslesen so:
111100010000001100010100 ans Schieberegister.

Würde mich echt sehr über eine Hilfe freuen, und danke Euch schonmal im Vorraus

Euer FP.Blues2013
Frank




.ino  VFD_Barometer_Arduino_Nano_V1_0.ino (Größe: 11,38 KB / Downloads: 27)    

Idea War es nicht Edison, der unter einem Kronleuchter saß und nachdachte, und dem dann eine Glühbirne auf den Kopf fiel? Tongue
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
07.01.2019, 13:06 (Dieser Beitrag wurde zuletzt bearbeitet: 07.01.2019 14:37 von Tommy56.)
Beitrag #2
RE: [Anfänger] Char Array Problem
Die fehlenden 0-Bits sind ein reines Ausgabeproblem von print. Im Byte sind sie vorhanden. Da musst Du entweder die führenden 0en selbst ausgeben oder printf/sprintf benutzen.

2 Byte in BCD:

Höherwertige Zahl h = B00001001
Niederwertige Zahl n = B00001100

Ergebnis: h << 4 | n = B10011100

Für den Rest entsprechend.

Gruß Tommy

Edit printf & co. können binär nicht.

Hier mal eine mögliche Ausgabefunktion mit führenden Nullen.
Code:
// Ausgabe eines Bytes binär mit Vornullen
// Params: st Ein Abkömmling von Stream (Serial, lcd, ...) wo die Ausgabe hin soll
//              b das auszugebende Byte
//            len die Länge in Bit (4/8, Default 8) bis zu der mit Vornullen aufgefüllt werden soll
void printByteBin(Stream &st, byte b, byte len=8) {
char puf[9];
byte filter, idx;
  memset(puf,0,sizeof(puf)); // leeren
  if (len == 4) filter = B1000;
  else if (len == 8) filter = B10000000;
  else {
    st.println("Error");
    return;
  }
  for (byte i=0; i<len;i++) {
    puf[i] = (b & filter) ?  '1' : '0';
    filter >>= 1;
  }  
  st.print(puf);
}

void setup() {
  Serial.begin(115200);
  Serial.println("Start");
  printByteBin(Serial,3,4); Serial.println();
  printByteBin(Serial,129); Serial.println();
  printByteBin(Serial,3,8); Serial.println();
}

void loop() {}

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  PZS Problem mit Ausgang schalten Flötzinger 0 454 28.06.2019 15:53
Letzter Beitrag: Flötzinger
  Array mit Wochentage füllen Hoffmakl 5 724 23.06.2019 18:57
Letzter Beitrag: Hoffmakl
  Anfänger: Fehlermeldung expected primary-expression before Reiseeck 5 505 31.05.2019 12:09
Letzter Beitrag: amithlon
  Textlänge (char) Array Blende8 3 441 08.04.2019 18:08
Letzter Beitrag: Tommy56
  Char in Int variable wandeln Rockman 5 575 06.03.2019 23:22
Letzter Beitrag: Tommy56
  Problem mit UniversalTelegramBot edi_ying 8 764 09.02.2019 15:11
Letzter Beitrag: Tommy56
Question (Denk)Problem mit char array[] ? ManfredH 3 509 05.02.2019 12:01
Letzter Beitrag: ManfredH
  USB Problem mit Linux HeikeF 5 681 03.02.2019 17:04
Letzter Beitrag: Tommy56
  Drehgeber wie Iduino SE055 - Software- oder Hardware-Problem? Arduinero 12 894 24.01.2019 13:55
Letzter Beitrag: Bitklopfer
  Kann auf A.Uno nichts hochladen - Anfänger sucht Hilfe ardeche 25 2.050 21.01.2019 22:06
Letzter Beitrag: ardeche

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste