char array omzetten naar float.

Arduino specifieke Software
Berichten: 15
Geregistreerd: 21 Feb 2013, 21:55

char array omzetten naar float.

Berichtdoor logger » 12 Okt 2016, 09:25

Hallo

ik lees een stream in van een site , die bestaat meestal uit de temperatuur, en soms een foutieve karakters
ik heb dan ook gekozen om deze stream binnen te halen als char array. Voor zover ik weet, als ik deze al parseFloat() binnen haal, gaat het alleen goed bij cijfers.


Maar ik wil graag een berekening uitvoeren met deze temperatuur die ik binnen haal
het volgende staat in mijn code

int numberOfChar
float actual
char outsideTemp[10]

numberOfChar = buienradarClient.readBytesUntil('"',outsideTemp,6);
outsideTemp[numberOfChar] = '\0';

actual = atof(outsideTemp);
dtostrf(actual, 3, 1, outsideTemp);


nu geeft de "atof" functie problemen in mijn code :
collect2.exe: error: ld returned 1 exit status

exit status 1

hoe kan ik op een andere manier een char array omzetten naar een float. of kan ik met een andere manier van uitlezen zien als het geen getal, zodat daar op in kan spelen

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: char array omzetten naar float.

Berichtdoor Koepel » 12 Okt 2016, 11:03

Een test sketch om het te proberen zou handig zijn.
Dit is voor een Arduino Uno, en het werkt.
Code: Alles selecteren
void setup()
{
  Serial.begin( 9600);
  Serial.println( "Started");

  int numberOfChar;
  float actual;
  char outsideTemp[10];

  // numberOfChar = buienradarClient.readBytesUntil('"',outsideTemp,6);
  strcpy( outsideTemp, "10.3");
  numberOfChar = 4;
 
  outsideTemp[numberOfChar] = '\0';

  actual = atof(outsideTemp);
  dtostrf(actual, 3, 1, outsideTemp);

  Serial.print(F( "outsideTemp="));
  Serial.println( outsideTemp);
  Serial.print(F( "numberOfChar="));
  Serial.println( numberOfChar);
  Serial.print(F( "actual="));
  Serial.println( actual);
}

void loop()
{
}


Hou je vast, hier komen mijn vragen :roll:
- Welk Arduino board gebruik je, een ESP8266 ?
- Welke Arduino IDE versie ? van Arduino.org of Arduino.cc ?
- Heb je een speciale core geinstalleerd (bijvoorbeeld voor de ESP8266) ? en welke ?
- Kun je de hele sketch laten zien, en vertellen waar de libraries vandaan komen, zodat we het zelf kunnen compileren ?
- parseFloat() stopt als het een teken binnenhaalt als dat geen cijfer is. Maar als er toch al een fout in de cijfers zit, kun je dat detecteren en die waarde niet gebruiken ?
- Is het mogelijk om altijd goede karakters binnen te halen ? Wat gaat er mis ?
- Ben je bereidt om naar de nieuwste Arduino.cc 1.6.12 over te stappen en je code daar voor aan te passen ?
- Heb je pas de nieuwe Arduino IDE geïnstalleerd ? Dan zitten er misschien nog onderdelen van de oude versie in de weg.

Berichten: 15
Geregistreerd: 21 Feb 2013, 21:55

Re: char array omzetten naar float.

Berichtdoor logger » 12 Okt 2016, 11:49

het vreemde is het het programma kan ik compileren , als de atof functie eruit is
En een klein programmatje zoals je voorbeeld werkt gewoon

betreffende je vragen
- mega2560 + shield
- versie 1.6.9 draai ik . van Arduino.cc
- geen speciale core ? ik selecteer het juiste board bij TOOLS
- parseFloat() stopt als het een teken binnenhaalt als dat geen cijfer is . Maar als er toch al een fout in de cijfers zit, kun je dat detecteren en die waarde niet gebruiken ?
Mmmh dat zou ook een mogelijkheid kunnen . Het probleem is , ik haal de temperatuur binnen van een site. En meestal is het gewoon een getal . maar die site geeft wel eens wat fouten, zoals een heel vreemd lang/groot getal of soms wel eens letters . Dit wil ik eruit filteren.
als het geen normale waarde is, zeg maar tussen -100.0 en 100.0 is goed, rest is fout.


- Ik heb 1.6.12 geprobeerd, maar omdat ik een newbee ben is het me niet goed gelukt . Programma heeft problemen 'day' etc niet gedefineerd is, ofwel kent blijkbaar de time lib niet , ondakt hij gelinked is
- nieuwe arduino IDE , heb de oude gedeinstalleerd en 1.6.9 geinstalleerd , waar zouden de oude spullen kunnen staan ?

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: char array omzetten naar float.

Berichtdoor Koepel » 12 Okt 2016, 18:54

Een gewoon Arduino Mega 2560 board, dat geeft weinig problemen.

Als je wilt dat ik het voor je compileer, dan zou ik alle code willen hebben, en willen weten welke libraries je gebruikt en waar je ze vandaan hebt.

Ik denk dat er een link error was, maar "atof()" werkt wel gewoon in een kleine sketch. Misschien heb je een library waar het dubbel in staat, of er is een conflict met de verborgen "Arduino15" map.

Het beste zou zijn om toch over te stappen naar de nieuwste versie, en de time libary weer werkend proberen te krijgen.

Je hebt nu waarschijnlijk stukken van oude en nieuwe door elkaar. Dus opschonen lijkt me wel nodig.
Je map met je projecten en custom libraries staat ergens in de map Documenten. Dat zo laten, maar kijk even in de map "libraries" naast je projecten. Zitten daar misschien ongebruikte of system libraries tussen ?

De verborgen "Arduino15" map wordt gebruikt door Arduino om nieuwe bestanden van het Arduino systeem in te zetten. Die map kun je weghalen voor een frisse start.

Zie ook hier:
http://www.arduinoforum.nl/viewtopic.php?f=14&t=2008&start=10#p14768
http://www.arduinoforum.nl/viewtopic.php?f=14&t=2022#p14851

De map "Arduino" onder de "Program Files" zou je kunnen verwijderen. En daarna een nieuwe versie installeren. Sommigen gaan libraries wijzigen of toevoegen in die map, en dan gaat het heel snel mis.

Als je versie 1.6.9 en 1.6.12 beide op je computer wilt hebben. Installeer dan niets. Dan hoort er dus ook geen "Arduino" map in de "Program Files" te staan. Download the zip files, pak ze beide uit, en zet ze op een handige plaats. Maak snelkoppelingen om ze op te starten.
De nieuwste versie heeft soms nieuwe drivers voor de usb-serial, dus in de map "drivers" zou je dat kunnen draaien om de drivers te updaten.

Berichten: 15
Geregistreerd: 21 Feb 2013, 21:55

Re: char array omzetten naar float.

Berichtdoor logger » 12 Okt 2016, 23:46

ik heb inmiddels de arduino15 directories verwijdert
maar helaas geen verbetering

ook heb ik 1.6.12 geinstalleeerd, maar deze geeft aan

exit status 1
'day' was not declared in this scope .. er zijn meerdere variabele not declared

vreemd , ik heb dezelfde libs toegevoegd als bij 1.6.9

na wat proberen , blijkt dat een lib verwijzig naar een lib niet werkt
ofwel in include time.h , en daarin staat #include "TimeLib.h" dit werkt dus blijkbaar niet in 1.6.12

nu dit opgelost is . kan ik met 1.6.12 ineens compileren! he bug fixes? ..
nu verder testen . alvast bedankt voor jullie hulp

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: ibamodewud en 93 gasten