char array omzetten naar float.
5 berichten
• Pagina 1 van 1
char array omzetten naar float.
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
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
Re: char array omzetten naar float.
Een test sketch om het te proberen zou handig zijn.
Dit is voor een Arduino Uno, en het werkt.
Hou je vast, hier komen mijn vragen
- 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.
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
- 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.
Re: char array omzetten naar float.
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 ?
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 ?
Re: char array omzetten naar float.
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.
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.
Re: char array omzetten naar float.
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
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
5 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: ibamodewud en 93 gasten