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
conversion 4 bit binary in dezimal
26.04.2016, 20:50 (Dieser Beitrag wurde zuletzt bearbeitet: 29.04.2016 22:29 von Bitklopfer.)
Beitrag #1
conversion 4 bit binary in dezimal
ich bin absolut neu in diesem Forum und habe ueber Arduino C++ gelernt (obwohl mit Pascal und Delphie Erfahrung)
Ich habe zwei Arduino 2560 parael laufen, da ich sehr viele inputs und outputs zu bedienen habe. Der eine Arduino (Display Processor) laeuft so wie ich mir das vorstelle, der andere (CTRL-Processor) macht an folgender Stelle ein Problem, das mehr oder weniger identisch auf dem Display Processor laeuft:

// Check if unit B changed its state -------------------------
void Check_B(){
int ch; // decimal value
int ch_tmp[4]; // binary input 4 Bit

B_on_off = digitalRead(B_on_off_Pin);
if (B_on_off == HIGH) {
for (int i = 0; i < 4; i++){
ch_tmp[i]=digitalRead(ch_B[i]); // get 4 bits from unit B

ch=ch_tmp[0]+2*ch_tmp[1]+4*ch_tmp[2]+8*ch_tmp[3]; // calculate values as decimal number

if (ch_tmp[0] == HIGH) (Test_blink(100));

if (ch != ch_B_prev) (ch_B_prev = ch); // save state
}
}
}
// end of Check B ----------------------------------------------

die Zeile mit
if ch=ch_tmp[]... Testblink
benutze ich nur, da ich nur den einfachen Arduino Editor habe und keine breakpoints setzen kann.
das bit 1 und das bit 3 sind gesetzt (Kann ich messen oder mit eine LED anzeigen lassen) und damit muesste ch decimal 10 oder in hex "a" ergeben;

Das identische beim Display Processor schaltet die LED Nr 10 ein; aber ... identisch wird es wohl nicht sein, sonst muesste ich hier nicht fragen.
Vielleicht hat jemand einen Tip fuer mich, Dank im Voraus
Florian
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.04.2016, 21:59
Beitrag #2
RE: conversion 4 bit binay in dezimal
Hallo Florian,
teste mal folgende Funktion und schicke die Werte aus den ch_tmp - Elementen rein. Läuft bei mir ohne Probs.
Grüße Ricardo
Code:
void setup() {
  Serial.begin(9600);
  Serial.println(b2d(B1010));
}
void loop() {}
int b2d(byte b)
{
  int dec = 0;
  int power = 1;
  byte mask;
  int weight;
  for (mask = 0x01; mask; mask <<= 1)
  {
    if (b & mask)
    {
      weight = 1;
    }
    else
    {
      weight = 0;
    }
    dec = dec + (power * weight);
    power = power * 2;
  }
  return dec;
}

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.04.2016, 17:04
Beitrag #3
RE: conversion 4 bit binay in dezimal
hallo Ricardo,
ich habe gestern von der Klinik aus geantwortet, aber das ist wohl schief gegangen; auch heute sehe ich fast nur auf einem Auge;
vielen Dank jedenfalls, dass Du Dich um meinen Beitrag bemueht hast.

Allerdings komme ich mit zwei statements ncht kla, was wohl an meinem C++ Vestaendnis liegt;
1) Du defninierst int b2d(byte b), das heisst fuer mich Du definierst ein Integer b2d, aber was bedeutet dann die Uebergabe Variable byte b, mit der Du dann weiter arbeitest
2) Auch mit der for Schleife for (mask = 0x01; mask; mask <<= 1) komme ich nicht klar; (finde auch <<=1 nicht im grossen Arduino Referenzbuch)
Du nimmst die mask als 0x01, aber wo steht, wie oft die Schleife durchlaufen wird? bei mask >>=1?

Entschuldige bitte meine Unkenntnis; aber vielleicht kannst Du mir auch sagen, wo ich so etwas nachsehen kann; Ich habe das grosse Arduino Referenzhand buch mit 912 Seiten,a ber irgendwo veraufe ich mich.
Vielleicht hast Du eine weniger umfangreiche Antwort. Danke im Voraus
Florian
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.04.2016, 20:23
Beitrag #4
RE: conversion 4 bit binay in dezimal
Hallo Florian,
Zitat:auch heute sehe ich fast nur auf einem Auge
was immer dahinter steckt, ich wünsche dir gute Besserung!
Zu 1)
Zitat:int b2d(byte b)
Du wolltest einen 4 Bit Binary in das dezimale Format bringen.
Ein Integer ist eine Dezimalzahl. Das int bedeutet die Funktion gibt einen Integer zurück.
byte b -> An die Funktion wird ein byte-Wert (8 Bits) übergeben, darin sind deine 4 Bits enthalten.
Dargestellt wird das zB. durch "B1010". Das "B" bedeutet dass es sich um eine binäre Zahl handelt. Die "1010" sind die Elemente aus deinem Array
Zu 2)
Schau dir mal das an: https://de.wikipedia.org/wiki/Bitweiser_Operator
Speziell den Absatz "Bitweise Verschiebungen"
Zitat:Entschuldige bitte meine Unkenntnis
Wir haben alle klein angefangen und ich bin ganz sicher auch nicht groß.
Kürzer ging es nicht Smile
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.05.2016, 16:39
Beitrag #5
RE: conversion 4 bit binary in dezimal
hallo Ricardo,
erst mal herzlichn Dank fuer Deine Hilfe; ich habe damit eine ganze Menge gelernt ueber die Syntax von C++ und Arduino;
jetzt laeuft alles, auch wenn ich immer noch Zeit brauche, die unterschiedlichen Klammern an die richtige Stelle zu positionieren;
In Fortran oder Delphi ist das anders, um nicht zu sagen einfacher;
aber jetzt komme ich damit klar;
Danke und Gruss Florian
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.05.2016, 08:24
Beitrag #6
RE: conversion 4 bit binary in dezimal
Hallo Florian,
Zitat:auch wenn ich immer noch Zeit brauche, die unterschiedlichen Klammern an die richtige Stelle zu positionieren;
Die Klammern kannst du an die richtige Stelle setzen indem du, wenn du den Code geschrieben hast, einfach STRG+T drückst. Dann werden einerseits die Klammern so gesetzt, dass man den code besser lesen kann, passiert das andererseits nicht, wird wohl die Anzahl öffnender / schließender Klammern unterschiedlich sein, also irgendwo eine Klammer fehlen.
Weiterhin kannst du den Cursor hinter eine öffnende/schließende Klammer setzten.
Die IDE zeigt dir dann die zugehöriige "Gegenklammer" an.

Übrigens kann man bei for, while und if Anweisungen auch wie folgt vorgehen:
Beispiel:
anstatt
Code:
if (vergleich)
{
  genau ein befehl;
}
kann man auch
Code:
if (vergleich) genau ein befehl;
schreiben.
Soll bedeuten, dass man bei genau einem Befehl für for, while, if / else man die geschweiften Klammern auch weglassen kann.
Soweit erst einmal.
Wenn du Hilfe brauchst melde dich.
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.05.2016, 11:08
Beitrag #7
RE: conversion 4 bit binary in dezimal
Hallo Ricardo,
das mit CTRL T ist grossartig; das erspart die lange Sucherei; das mit dem Cursor hinter der Klammer habe ich auch gefunden; ich bneutze auch Notepad++ und da werden die Klammern sogar farbig angezeigt; besten Dank fur die Tipps;

Die Klammernregeln mit "geschwungen" bei if, while und else habe ich durch Zufall schon herausgefunden; Vermutlich gibt es aber noch weitere solcher Tricks;

Was ich bei Arduino vemisse ist die Moeglichkeit der breakpoints. Das hat sogar das (dumme) Visual Basic. Im WEB habe ich gefunden, dass man dazu Visual Studio 2015 installieren muesse, dann C++ und dann noch das Arduino Plugin; ersteres habe ich gemacht, aber Visual Studio ist ein Monster; weiter bin ich noch nciht gekommen und C++ habe ich auch nicht; (wie gesagt, Pascal, Delphi, Visual Basic, aber kein C++) Vielleicht werde ich es mir noch anschaffen. Arbeitest Du mit breakpoints und wenn ja wie bzw. mit welcher Umgebung?
Danke, dass ich mich auch wieder bei Dir melden kann.
Gruesse Florian
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.05.2016, 13:46
Beitrag #8
RE: conversion 4 bit binary in dezimal
Yup, da gebe ich dir Recht. Visual Micro und Co. sind Monster. Huh
Haben bei mir im Schnitt 5 Minuten auf dem PC existiert, danach wieder runter geschmissen Smile
Breakpoints sind ja kein Teil des Codes selbst, sondern "Code-Marken" die im Debugger gesetzt werden. Von daher gehen Breakpoints eben nur mit IDEs die Debuggen (eben die fetten Teile).

Bleibt nur die Ausgabe von Informationen auf dem SerialMonitor (oder eben LEDs die unter bestimmten Bedingungen blinzeln).

Man kann sich das Leben ein bischen erleichtern, wenn man versucht in der loop() sowenig wie möglich "operativen" Code zu schreiben, sondern nur Funktionsaufrufe die nach bestimmten Bedingungen: Zeiten etc. ausgeführt werden. Die Funktionen sollten dann so kleinteilig wie möglich gehalten werden. Beispiel eine Sensorfunktion die den Sensor liest und die Werte ausgibt lieber in eine Lese- und eine Ausgabefunktion teilen. Vorteil: man kann passendere "Debuginformationen" ausgeben lassen und wenn man es geschickt macht die Funktionen über Parameter für verschiedene Sensoren benutzen.

Mehr Möglichkeiten habe ich auch nicht, versuche sie aber zu beachten.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  invalid conversion from 'const char*' to 'char' toto1975 8 878 31.03.2016 12:49
Letzter Beitrag: hotsystems

Gehe zu:


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