Hey, mal eine kruze Frage: warum kann ich nur maximal eine 4 stellige Zahl via string zum Arduino senden??
![]()
KonstantinFast:
Hey, mal eine kruze Frage: warum kann ich nur maximal eine 4 stellige Zahl via string zum Arduino senden??
Sieh dir doch mal die Beispiele in der IDE an, da wirst du einiges finden.
Eine 4-stellige Zahl oder 4 Byte einer Variablen?
Grüße Uwe
KonstantinFast:
warum kann ich nur maximal eine 4 stellige Zahl via string zum Arduino senden??
Das ist eine schwere Frage, die man nicht beantworten kann, ohne die Hardware und Software zu kennen, mit der du die Zahl schickst.
Ich kann mit Putty z.B. so gut wie alles seriell zum Arduino schicken.
Oder ist deine Frage eher, wieso empfängt der Arduino nur 4 Stellen/Bytes/char? Dann solltest du deinen Sketch herzeigen.
KonstantinFast:
warum kann ich nur maximal eine 4 stellige Zahl via string zum Arduino senden??
Weil du was falsch machst.
Also ich hab das sketch im internet gefunden und bin gerade dabei es ein wenig für meine Bedürfnisse zu modifizieren. nein, ich bin kein Programmierer und nein ich hab nicht wirklich ahnung was ich hier mache aber ich hab wirklich lange gesucht und nichts gefunden. villeich weil ich auch nach dem falschen suche.
char val1[4]; //Max. Zahl "9999"
lautet eine zeile. ich brauch aber mehr als 9999 steps für mein vorhaben. klar dachte ich mir mache ich einfach den String größer, und den intiger lasse ich auch höher laufen als 5. das bring aber nicht da er dann eine 5 stellige zahl in eine 4 stellige und eine Ziffer umwandelt. also prich aus -20005 macht er erst -2000, dann 5.
#include <Stepper.h>
// change this to the number of steps on your motor
#define STEPS 200
// create an instance of the stepper class, specifying
// the number of steps of the motor and the pins it's
// attached to
Stepper stepper(STEPS, 5, 6, 7, 8);
//int previous = 0;
int previous;
int val;
char val1[10]; //Max. Zahl "9999"
int i;
int j;
int k;
void step(int steps)
{
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
stepper.step(steps);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
}
void setup()
{
Serial.begin(9600);
// set the speed of the motor to 30 RPMs
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
stepper.setSpeed(100);
}
void loop()
{
if (Serial.available() > 0) {
{
Serial.flush();
delay(5);
i=0;
while(i<5)
{
val1 = Serial.read();
-
i++;*
-
}*
-
Serial.flush();*
-
if ((val1[1] == 'P') && (val1[2] == 'O') && (val1[2] == 'S') )*
-
{*
-
Serial.println(val1);*
-
}*
-
else*
-
{*
-
val = atoi(val1);*
-
Serial.println(val);*
-
j = (val - previous);*
-
k = 0;*
-
while(k!=j)*
-
{*
-
// if signal von lb dann k = j*
-
// else continue*
-
if (j>k)*
-
{*
-
step (1);*
-
k ++;*
-
}*
-
else*
-
{*
-
step (-1);*
-
k--;*
-
}*
-
}*
-
}*
-
}*
-
}*
-
// remember the previous value of the sensor*
-
previous = val;*
}
char val1[4]; //Max. Zahl "9999"
Wenn du das irgendwo gefunden hast, kann es gut sein, dass dich das auf Glatteis führt.
In char val1[4] passen üblicherweise nur 3 Zeichen rein, damit Platz für eine Endekennung bleibt.
Auch die Verwendung von Serial.flush() macht deine Quelle nicht vertrauenswürdiger.
val1 = Serial.read();
ist schlicht falsch und sollte mindestens eine Warnung beim Übersetzen liefern.
Aber vermutlich steht da im Original val1 [ i ] = Serial.read();
und du kriegst hiermit erstmal die Newbie-Ohrfeige : Code Tags benutzen !
Ist aber trotzdem Mist, wie dein gefundener Sketch das macht: Das delay(5) passt nur bei der Geschwindigkeit 9600 zum Einlesen von 5 Zeichen.
Ausserdem ist in der Schleife while (i < 5) eine Begrenzung, die du eventuell anpassen willst, damit
du einen Text wie "-2000" sowie evtl. Zeilenende-Zeichen komplett liest.
danke! ja stimmt. im original steh: val1 [ i ] = Serial.read();
ja sketch ist mist.. mir egal hauptsache es funktioniert irgendwie.
Dass ich die while Schleife: while (i < x); sowie die größe des chars: char vla1 [x] schon verändert habe, was nichts brachte hab ich ja schon geschrieben.
wenn noch jemand einen hilfreichen Tipp hat wie ich mehr als 9999 steps als Befehl eingeben kann: sehr gerne.
blöde Kommentare über meine Programierfähigkeiten die einen nicht weiter helfen.. sehr ungern!
if (Serial.available() > 0) {
{
Serial.flush();
delay(5);
i=0;
while(i<5)
{
val1[i] = Serial.read();
i++;
}
.... blöde Kommentare über meine Programierfähigkeiten die einen nicht weiter helfen.. sehr ungern!
Wenn mehr als Null Zeichen da sind, lese 5 Zeichen.
Das ist unlogisch und damit Fehler behaftet.
Ändere das
KonstantinFast:
.....ja sketch ist mist.. mir egal hauptsache es funktioniert irgendwie.
......wenn noch jemand einen hilfreichen Tipp hat.....
Ja, gewöhn dir doch nicht auch noch schlechte Art zu programmieren an.
Wie du ja selbst schreibst, ist der Sketch mist, warum machst du das dann.
So lernst du nie sauberen Code zu schreiben.
Hi
@TO
Wenn Du hier ankommst und uns Einen vorheulst, daß Du kein Programmierer bist (und Deine Shift-Taste wohl auch einen Defekt aufweist), musst Du Dich nicht wundern, daß Dir zu Deinem irgendwo gefundenem Sketch (Quelle??) was erzählt wird - eben auch, daß Er Mist ist.
Du wolltest aber so einen Müll ja gar nicht lesen, Deine Frage war ja, wie Du MEHR als diese 4 Zeichen einlesen kannst: Indem Du Das richtig machst.
Ok, wolltest Du jetzt auch nicht lesen, aber vll. bringt Dich diese trockene Antwort dazu, hier MITzuarbeiten.
Fertigen Code gab's hier bisher nur 1 Mal - und meines Wissen hat sich der damalige Karnevalist danach auch nie mehr gemeldet - befürchte, Das war ein einmaliges Schauspiel.
Zeige uns, was Du wie geändert hast, was Du Dir von dieser Änderung versprochen hast und was Du bekommen hast.
Vll. bekommen wir so Deinen INet-Fund so weit, daß zumindest Du damit mehr als 4 Stellen eingelesen bekommst.
MfG