Tastaur Eingabe wird als ASCII Code ausgegeben

Moin,

ich möchte einer int variablen einen Wert zuweisen. Wenn ich über den seriellen Monitor eine Zahl eingebe (über den Befehl var = Serial.read(); )wird mir die Zahl der ASCII Tabelle ausgeben.

Also ich gebe eine 4 ein und es wird ein 52 gespeichert.

Ich weiß, dass die Eingabe ein char ist, aber wie kann ich den eingegebenen Wert als solchen integer abspeichern?

Serial.read() - '0'

macht aus den Zeichen '0' ... '9' eine Zahl im Bereich 0 ... 9
Beantwortet das deine Frage schon?

Dass '0' das gleiche wie 48 ist, braucht man sich gar nicht zu merken.
Wichtiger ist eher, was man mit {kein Zeichen, andere Zeichen, mehrere Zeichen} macht.

prinzipiell ja

nur bekomme ich jetzt eine leere Ausgabe im seriellen monitor, wenn ich mir die variable anzeigen lassen möchte (über den Befehl DEBUG_PRINTLN(var); )

Edit: Ich möchte über den seriellen Monitor eine Anzahl für x Schleifendurchläufe eingeben

den Befehl DEBUG_PRINTLN(var);

... kenne ich nicht.

Bitte ein (möglichst weit vereinfachtes aber komplettes) Beispiel, das deine bisherigen Erkenntnisse und das verbleibende Problem vorführt.

Wie gesagt, ich würde mir gerne über den seriellen Monitor eine Anzahl für x Schleifendurchläufe eingeben

Also gebe ich die Zahl (von 1-9 langt erst einmal) ein und die integer Variable wird dann in einer for Schleife eingefügt um die Anzahl der Schleifendurchläufe zu bestimmen

DEBUG_PRINTLN(var); sollte nur als Kontrolle dienen ob die Variable wirklich den Wert angenommen hat. Vorher wurde mir der Wert damit angezeigt

Ja, das habe ich schon ungefähr so geraten, aber ich verstehe nicht, warum du das nicht machst.
Auch verstehe ich nicht, wo du da eine leere Ausgabe herbekommst, die du nicht haben willst.

Bitte ein (möglichst weit vereinfachter aber kompletter) Sketch, der deine bisherigen Erkenntnisse und das verbleibende Problem vorführt.

Und noch ein Tip: Wenn du Variablendefinitionen weglässt, versteckst du vermutlich das Problem.
Das wird dir (spätestens nach diesem Tip) übel genommen.

Ansonsten, herzlich willkommen. Wir beißen nicht, wir wollen nur spielen.

ich habe die variable in die Schleife eingefügt und es passt

also Danke dafür!

Warum ich die variable über den Befehl DEBUG_PRINTLN(var); nicht mehr ausgelesen bekomme verstehe ich zwar nicht ist aber auch nicht weiter von belang :wink:

Wo habe ich Variablendefinitionen weggelassen?

Wo habe ich Variablendefinitionen weggelassen?

Du hast bisher alles weggelassen.

ich habe die variable in die Schleife eingefügtwelche Variablen / welche Schleife / wie hast du deine Funktion DEBUG_PRINT definiert?

Nein danke, will ich nicht wissen, wenn das Thema für dich erledigt ist, ist es schön.

ich habe mich aufs wesentlich beschränkt, was auch zielführend war :wink:

Es ging immer nur um eine variable was aus dem Kontext hervorgeht. Selbiges gilt für die besagte Schleife.

Ich bin dir dankbar für deine Hilfe, finde deinen letzten Satz aber unverschämt. Fragen zu stellen und im nächsten Satz zu sagen dass du es gar nicht wissen willst.

Hi

Er wollte Dir nur damit signalisieren, daß Du Ihm darauf nicht wirklich antworten musst, da Er eh keine Antwort von Dir erwartet - Er hat Das halt noch nie anders von Dir erlebt.

Man kann aber auch mehrstellige Zahlen eingeben - wenn's Mal größer als Neun werden soll.

MfG

ich habe mich aufs wesentlich beschränkt, was auch zielführend war :wink:

void setup() 
{
  Serial.begin(9600);
  Befehl  var = Serial.read()
}

void loop() 
{

}

Ausgabe:

sketch_mar14a:6:3: error: 'Befehl' was not declared in this scope
    6 |   Befehl  var = Serial.read()
      |   ^~~~~~

postmaster-ino:
Er hat Das halt noch nie anders von Dir erlebt

Danke für die Unterstützung, aber so krass wollte ich das nicht formulieren und habe es auch nicht so gemeint.
Obwohl postmaster mit diesem Satz auch Recht hat.

Auch rhetorische Fragen haben ein Fragezeichen am Ende, erwarten aber eigentlich keine Antwort und sind auch nicht immer “unverschämt” gemeint.
Und mein “wenn das Thema für dich erledigt ist, ist es schön” war bitte buchstäblich so gemeint.

Eine Frage hätte ich noch, wofür steht die 0 bei

Serial.read() - '0'

bzw. was passiert wenn ich dort eine andere Zahl eintrage

Schau Dir mal eine ASCII-Tabelle an.

Gruß Tommy

@msc306;
Lies dazu auch nochmal Post #1 sorgfältig durch. Michael_X hat es da eigentlich sehr genau beschrieben, was das Serial.read() - '0' bewirkt. Zusammen mit Tommys Vorschlag, Dir eine ASCII-Tabelle anzuschauen, sollten evt. Unklarheiten beseitigt sein.

LG Stefan

Die ASCII Tabelle ist mir bekannt. Ich verstehe, dass Serial.read() - '0' die Zeichen 0 bis 9 in zahlen umwandelt aber was macht Serial.read() - '1' oder was bewirkt ein anderer Buchstabe/Zahl der dort eingefügt wird.

Dann rechne doch selbst mal nach, was das machen würde. Muss man hier jeden Pups vorkauen?

Gruß Tommy

Das ist eine ganz normale Subtraktion. Und hinter den Zeichen steckt nur deren Zahlenwert. - '1' ist aber Unsinn. Wenn du verstehst was - '0' macht, wieso willst jetzt was anderes abziehen?

Andere Subtrahenden ergeben nur in anderen Zahlensystemen wie Hexadezimal Sinn. z.B. um von 'F' oder 'f' auf 15 zu kommen

Serenifly:
Das ist eine ganz normale Subtraktion. Und hinter den Zeichen steckt nur deren Zahlenwert. - '1' ist aber Unsinn. Wenn du verstehst was - '0' macht, wieso willst jetzt was anderes abziehen?

Andere Subtrahenden ergeben nur in anderen Zahlensystemen wie Hexadezimal Sinn. z.B. um von 'F' oder 'f' auf 15 zu kommen

Danke für die Erklärung, hab's jetzt verstanden.

Tut mir leid, dass ich für euch banale Sachen nicht auf Anhieb verstehe. Ich versuch meine Fragen klar zu formulieren, allerdings helfen mir Kommentare wie schau die ASCII Tabelle an nicht wirklich weiter.

msc306:
allerdings helfen mir Kommentare wie schau die ASCII Tabelle an nicht wirklich weiter.

Ok. Ich hatte angenommen, dass Du

48 - 48 = 0
49 - 48 = 1
...
57 - 48 = 9

rechnen kannst, zumal Du die Ergebnisse schon kanntest. Sorry, wenn dem nicht so ist.

Gruß Tommy