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
atof array ausgeben
27.11.2019, 10:52 (Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2019 10:57 von Pet.)
Beitrag #1
atof array ausgeben
Guten Tag ich habe ein Problem mit einem Projekt.

Ich lese mit dem Arduino eine Waage über RS232 Schnittstelle aus.

Die eingelesenen Daten werden in ein Array gespeichert,
anschließend sollen die Zahlen im Array in Float umgewandelt werden,
damit ich mit dem Microcontroller rechnen kann.
Der Microcontroller soll dann anhand des eingelesenen Gewichts eine Pumpe steuern.

Mein Problem: mittels atol oder atof gibt mir der Microcontroller nur das erste Zeichen des Arrays aus und nicht das ganze Array.

Das sieht dann etwa so aus:
Ascii --> 15.23
als Float wird 1.00 ausgegeben

/Ich weiß das es dazu schon einige Threads gibt, kann jedoch nicht meinen Fehler finden, ich hoffe ihr könnt mir weiterhelfen/

Ich habe jetzt etwa 3 Tage versucht die Zahlen die ich als ascii bekomme umzuwandeln und bekomme es nicht richtig hin.

Ich hoffe ihr könnt mir helfen, bin leider noch Anfänger.


Hier ist mein Programmcode

#include <SoftwareSerial.h>
#include <stdlib.h>


SoftwareSerial mySerial(10, 11); // RX, TX Pins at microcontroller
void setup()



{
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial)
{
;
}


Serial.println("Start Messwertaufzeichnung!");
mySerial.flush();
// data rate for the SoftwareSerial port
mySerial.begin(9600);
}



void loop()
{ // run over and over
Serial.flush();
char zeichen;
char zeichenkette_raw[20];
char zeichenanzahl = 0;
//float gewicht =0;
int Gewicht =0;

while(1)
{

if (mySerial.available())
{
zeichen = mySerial.read();

if((zeichen == '.') || (zeichen == '+') || (zeichen == '-') || ((zeichen >= '0')&&(zeichen <='9')))
{
//Serial.write(zeichen);
zeichenkette_raw[zeichenanzahl] = zeichen;
zeichenanzahl++;
zeichenkette_raw[zeichenanzahl++] = '\r';
zeichenkette_raw[zeichenanzahl] = '\n';
}

if( zeichen == '\n' || zeichen == '\r' && zeichenanzahl > 1)
{
Serial.write(zeichenkette_raw);

long gewicht = atol(zeichenkette_raw);
Serial.println(gewicht);

Serial.flush();
zeichenanzahl = 0;
}
}
}
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.11.2019, 11:33 (Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2019 11:39 von MicroBahner.)
Beitrag #2
RE: atof array ausgeben
Setze deinen Code bitte in Codetags, das geht auch nachträglich:
Cursor vor den Code, dann '#' oben rechts anklicken, dann den Cursor hinter den Code, und nochmal das '#' anklicken.

Hast Du den Sketch selbst geschrieben, oder von irgendwoher kopiert? Eine while(1)-Schleife hat im loop nichts zu suchen, loop() ist bereits deine Endlosschleife. Schau bitte mal in den Beispielen der IDE, wie ein Sketch aufgebaut wird.

Dein eigentliches Problem liegt in diesen beiden Zeilen:
Code:
zeichenkette_raw[zeichenanzahl++] = '\r';
zeichenkette_raw[zeichenanzahl] = '\n';
die müssen komplett raus, damit zerhackst Du dir deine empfangene Zahl, und die kann dann nicht mehr ungewandelt werden.
Ausserdem must Du noch ein Abschlußzeichen '\0' anfügen, wenn Du ein '\r' oder '\n' empfangen hast.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.11.2019, 11:46
Beitrag #3
RE: atof array ausgeben
[quote='Pet' pid='64140' dateline='1574848327']
Guten Tag ich habe ein Problem mit einem Projekt.

Ich lese mit dem Arduino eine Waage über RS232 Schnittstelle aus.

Die eingelesenen Daten werden in ein Array gespeichert,
anschließend sollen die Zahlen im Array in Float umgewandelt werden,
damit ich mit dem Microcontroller rechnen kann.
Der Microcontroller soll dann anhand des eingelesenen Gewichts eine Pumpe steuern.

Mein Problem: mittels atol oder atof gibt mir der Microcontroller nur das erste Zeichen des Arrays aus und nicht das ganze Array.

Das sieht dann etwa so aus:
Ascii --> 15.23
als Float wird 1.00 ausgegeben

/Ich weiß das es dazu schon einige Threads gibt, kann jedoch nicht meinen Fehler finden, ich hoffe ihr könnt mir weiterhelfen/

Ich habe jetzt etwa 3 Tage versucht die Zahlen die ich als ascii bekomme umzuwandeln und bekomme es nicht richtig hin.

Ich hoffe ihr könnt mir helfen, bin leider noch Anfänger.


Hier ist mein Programmcode

Code:
#include <SoftwareSerial.h>
#include <stdlib.h>


SoftwareSerial mySerial(10, 11); // RX, TX Pins at microcontroller
void setup()



{
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial)
  {
    ;
  }


  Serial.println("Start Messwertaufzeichnung!");
  mySerial.flush();
  // data rate for the SoftwareSerial port
  mySerial.begin(9600);
}



void loop()
{ // run over and over
   Serial.flush();
   char zeichen;
   char zeichenkette_raw[20];
   char zeichenanzahl = 0;
   //float gewicht =0;
   int Gewicht =0;

   while(1)
   {
  
   if (mySerial.available())
    {
      zeichen = mySerial.read();

      if((zeichen == '.') || (zeichen == '+') || (zeichen == '-') || ((zeichen >= '0')&&(zeichen <='9')))
       {
          //Serial.write(zeichen);
          zeichenkette_raw[zeichenanzahl] = zeichen;
          zeichenanzahl++;
          zeichenkette_raw[zeichenanzahl++] = '\r';
          zeichenkette_raw[zeichenanzahl] = '\n';
       }

    if( zeichen == '\n' || zeichen == '\r' && zeichenanzahl > 1)
     {
       Serial.write(zeichenkette_raw);
      
       long gewicht = atol(zeichenkette_raw);
       Serial.println(gewicht);
      
       Serial.flush();
       zeichenanzahl = 0;
     }
   }
  }
}
[code]
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.11.2019, 11:52
Beitrag #4
RE: atof array ausgeben
Oh vielen vielen Dank!!!
Ich habe nicht gedacht, das es daran liegen kann weil
die (zeichenkette_raw) richtig ausgegeben wurde.

Es funktioniert jetzt.
Soll ich den Thread löschen?
Oder kann ich das überhaupt?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.11.2019, 12:22
Beitrag #5
RE: atof array ausgeben
(27.11.2019 11:52)Pet schrieb:  Oh vielen vielen Dank!!!
Ich habe nicht gedacht, das es daran liegen kann weil
die (zeichenkette_raw) richtig ausgegeben wurde.

Es funktioniert jetzt.
Soll ich den Thread löschen?
Oder kann ich das überhaupt?

Nein du brauchst nichts löschen.
lgbk Moderator


An alle Neuankömmlinge hier, wenn ihr Code(Sketch) hier posten wollt dann liest euch bitte diese Anleitung durch.

Ich spreche fließend Schwäbisch, Deutsch das Notwendigste und für die Begriffsstutzigen erprobtes Tacheles mit direkten Hinweisen ohne Schnörkel...

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.11.2019, 12:32 (Dieser Beitrag wurde zuletzt bearbeitet: 27.11.2019 12:33 von MicroBahner.)
Beitrag #6
RE: atof array ausgeben
(27.11.2019 11:52)Pet schrieb:  Ich habe nicht gedacht, das es daran liegen kann weil
die (zeichenkette_raw) richtig ausgegeben wurde.
Das liegt daran, dass der serielle Monitor das Zeichen bei der Ausgabe ignoriert, deshalb siehst Du das da nicht.
Denke auch daran, dich über den richtigen Aufbau eines Sketches schlau zu machen. Auch wenn es jetzt funktioniert - bei späteren Erweiterungen wird dir das auf die Füsse fallen.

Löschen kannst Du den Thread nicht. Die Info ist ja vielleicht auch für andere Anfänger interessant.
N.B. Du hättest die Code-Tags auch in deinen ersten Beitrag nachträglich einfügen können - ohne einen neuen Post zu erzeugen.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.11.2019, 13:12
Beitrag #7
RE: atof array ausgeben
Alles klar vielen Dank für die Antworten.

Ich werde den Aufbau des Sketches nochmal überarbeiten.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Poti wert in Minuten auf dem LCD Display ausgeben senseman 80 2.453 Gestern 23:24
Letzter Beitrag: senseman
  Istwert auf LCD ausgeben no.ba 6 414 26.04.2021 15:21
Letzter Beitrag: no.ba
  Laserwert auf OLED Display ausgeben Blauepi 18 1.205 22.03.2021 14:00
Letzter Beitrag: Blauepi
  2. stellige Dezimalzahl Hex in H und L Nibbel ausgeben. Manny 4 524 31.12.2020 17:41
Letzter Beitrag: Manny
  Messwerte im Array süffi1234 19 1.242 09.12.2020 17:18
Letzter Beitrag: Guekard
  Auf Array einer Klasse zugreifen Nichtraucher 16 1.121 25.11.2020 20:26
Letzter Beitrag: Tommy56
  Verständnisfrage 2D Array hugofant 2 532 06.10.2020 07:35
Letzter Beitrag: hugofant
  Wers brauchen kann: Statischer Text auf 4fach 8x8 Matrix ausgeben kjoussen 1 747 18.08.2020 22:22
Letzter Beitrag: Bitklopfer
  Array Werte in einen String ChriscoGT 3 1.134 12.05.2020 15:41
Letzter Beitrag: Tommy56
  Array Harry 6 1.098 03.04.2020 20:06
Letzter Beitrag: Tommy56

Gehe zu:


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