Hello
I have some Core devices and would like to use them for small applications. Unfortunately if I use device Core this line does not accept it (setPoint = arg.toFloat () in a particle.function. The Cores all have firmware 1.4.4. Is there a workaround so that I can enter the temperature in my case either from the console or from the mobile app?
Thanks Valentino
What is the error message and what is the definition of setPoint
?
Itâs probably best to post your entire Particle.function()
callback to see whatâs going on.
BTW, when posting ânormalâ text you would not use the preformatted text block feature (```). Thatâs typically used for code blocks.
Hello @ScruffR
Iâm using part of the code corrected by you, itâs simple, during the Christmas holidays I wanted to make panettone and I was missing a leavening cell (for bread, panettone, etc.) with the respective adjustment of temperature. So I took the code and made it simple for my knowledge. The PID code that you corrected in December I am not able to make it work, for now step by step I want to try again.
When I compile the code it tells me Error: Could not compile. Please review your code.
The code is attached.
Thanks Valentino
#include <math.h>
#include "Particle.h"
#include <OneWire.h>
#include <DS18.h>
//*** Dati Umidita***
double sensorUm = 0.0;
float voltUM=0.0;
double UmidTRH;
double UmidV;
float HHconstant=0.1515; // from HIH5030 data sheet
//*** Sensori Temp
DS18 pinTempSensor(D3); // sensore 1
float TV1;
double temp;
int pinRelay = D0;
bool stato = true;
double setPoint;
//String Ora;
void setup() {
Particle.function("newSetPoint", newSetPoint);
Particle.variable("Temp", temp);
Particle.variable("Umi", UmidV);
Serial.begin(9600);
pinMode(pinRelay, OUTPUT);
setPoint = 22;
}
void loop(){
if (pinTempSensor.read()) {
TV1 = pinTempSensor.celsius();
}
temp = TV1;
if (TV1 < setPoint) {
digitalWrite(pinRelay, HIGH);
stato = true;
}
else {
digitalWrite(pinRelay, LOW);
stato = false;
}
//***Calcolo Dati Umidita***
sensorUm = analogRead(A0);
UmidV = ((sensorUm / 4095) - 0.1515) / 0.00636;
UmidTRH = (UmidV) / (1.0546 - 0.00216 * TV1);
//*****
//Serial.print("Ora:"); Serial.print(Ora);
Serial.print("Stato:"); Serial.print(stato); Serial.print(" ");
Serial.print("temp:"); Serial.print(TV1); Serial.print(" ");
Serial.print("Set:"); Serial.print(" "); Serial.print(setPoint); Serial.print(" ");
Serial.print("Umi:"); Serial.println(UmidV, 2);
//Pubblicare i valori
/*char dataImp[21];
snprintf(dataImp, sizeof(dataImp), "T:%.1f,S:%.1f,U:%.1f", TV1, setPoint, UmidV);
Particle.publish("Valori", dataImp, PRIVATE);*/
delay(1000);
}
int newSetPoint(String arg) {
setPoint = arg.toFloat();
return setPoint;
}
In that case you should hit the red SHOW RAW button near the error message to get a more verbose description of the underlying issue.
You can post that output here too.
Just some coding tips too
if (TV1 < setPoint) {
digitalWrite(pinRelay, HIGH);
stato = true;
}
else {
digitalWrite(pinRelay, LOW);
stato = false;
}
can be written shorter as
stato = (TV1 < setPoint);
digitalWrite(pinRelay, stato);
or even as one-liner
digitalWrite(pinRelay, stato = (TV1 < setPoint));
althouth the two-liner is easier to read
I'm also not sure, why you still opt for multiple Serial.print()
statements when you already have a perfectly fine snprintf()
there
char dataImp[128];
snprintf(dataImp, sizeof(dataImp), "T:%.1f,S:%.1f,U:%.1f", TV1, setPoint, UmidV);
Serial.println(dataImp);
or to copy the Serial.print()
output
char dataImp[128];
snprintf(dataImp, sizeof(dataImp), "Stato:%d temp:%.1f Set: %.1f Umi:%.2f", stato, TV1, setPoint, UmidV);
Serial.println(dataImp);
@Tino52, There are a couple of things you may want to look at. First arg.toFloat()
returns a type float
but setPoint
is a type double
. So you could cast the return from arg.toFloat()
as a double
using:
setPoint = (double)arg.toFloat();
Second, the newSetPoint()
callback function needs to return an int
but you return setPoint
which is a double
. Again, you could cast setPoint
as an int
to only return the integer portion of the value or simply return an integer value, say 1, to indicate a âcompleteâ response. So:
return (int)setPoint;
One thing you may want to consider is range-checking the setPoint value to make sure it is within an acceptable range. If it isnât you, the function could return a zero.
Hello @peekay123 and @ScruffR
Thanks for your answers, @peekay123 I made the suggested changes but it always responds the same (Could not compile please âŚ), I donât know if I have expressed myself well with Argon and Photon the code does not work if I use Core device. And if I do a REM (//) on line
/* int newSetPoint (String arg) {
// setPoint = arg.toFloat ();
setPoint = (double) arg.toFloat ();
// return setPoint;
return (int) setPoint;}*/
gives me no error.
I attach the result of the error (Show raw).
Thank you and good day
Processing 02cellalievipt100.ino
Checking library OneWire...
Checking library DS18B20...
Installing library OneWire 2.0.4 to lib/OneWire ...
Installing library DS18B20 0.1.14 to lib/DS18B20 ...
Library OneWire 2.0.4 installed.
Library DS18B20 0.1.14 installed.
make -C ../newlib_nano
make[1]: Entering directory '/firmware/newlib_nano'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/firmware/newlib_nano'
make -C ../user
make[1]: Entering directory '/firmware/user'
Building cpp file: src/02cellalievipt100.cpp
Invoking: ARM GCC CPP Compiler
mkdir -p ../build/target/user/platform-0-ltosrc/
arm-none-eabi-gcc -DSTM32_DEVICE -DSTM32F10X_MD -DPLATFORM_THREADING=0 -DPLATFORM_ID=0 -DPLATFORM_NAME=core -DUSBD_VID_SPARK=0x1D50 -DUSBD_PID_DFU=0x607F -DUSBD_PID_CDC=0x607D -DSPARK_PLATFORM -DFLASHEE_EEPROM -g3 -gdwarf-2 -Os -mcpu=cortex-m3 -mthumb -flto -DINCLUDE_PLATFORM=1 -DPRODUCT_ID=0 -DPRODUCT_FIRMWARE_VERSION=65535 -DUSE_STDPERIPH_DRIVER -DDFU_BUILD_ENABLE -DSYSTEM_VERSION_STRING=1.4.4 -DRELEASE_BUILD -I./inc -I../wiring/inc -I../system/inc -I../third_party/miniz/miniz -I../services/inc -I../third_party/nanopb/nanopb -I../communication/inc -I../hal/inc -I../hal/shared -I../hal/src/core -I../hal/src/stm32 -I../platform/shared/inc -I../platform/MCU/STM32F1xx/STM32_StdPeriph_Driver/inc -I../platform/MCU/STM32F1xx/STM32_USB_Device_Driver/inc -I../platform/MCU/STM32F1xx/SPARK_Firmware_Driver/inc -I../platform/MCU/shared/STM32/inc -I../platform/MCU/STM32F1xx/CMSIS/Include -I../platform/MCU/STM32F1xx/CMSIS/Device/ST/Include -I../platform/NET/CC3000/CC3000_Host_Driver -I../dynalib/inc -Isrc -I./libraries -Ilib/DS18B20/src -Ilib/OneWire/src -I. -MD -MP -MF ../build/target/user/platform-0-ltosrc/02cellalievipt100.o.d -ffunction-sections -fdata-sections -Wall -Wno-switch -Wno-error=deprecated-declarations -fmessage-length=0 -fno-strict-aliasing -DSPARK=1 -DPARTICLE=1 -Wundef -DSTART_DFU_FLASHER_SERIAL_SPEED=14400 -DSTART_YMODEM_FLASHER_SERIAL_SPEED=28800 -DSPARK_PLATFORM_NET=CC3000 -fno-builtin-malloc -fno-builtin-free -fno-builtin-realloc -DLOG_INCLUDE_SOURCE_INFO=1 -DPARTICLE_USER_MODULE -DMODULE_VERSION=1406 -DMODULE_FUNCTION=3 -DMODULE_DEPENDENCY=0,0,0 -DMODULE_DEPENDENCY2=0,0,0 -D_WINSOCK_H -D_GNU_SOURCE -DLOG_MODULE_CATEGORY="\"app\"" -fno-exceptions -fno-rtti -fcheck-new -std=gnu++14 -c -o ../build/target/user/platform-0-ltosrc/02cellalievipt100.o src/02cellalievipt100.cpp
Building cpp file: lib/DS18B20/src/DS18B20.cpp
Invoking: ARM GCC CPP Compiler
mkdir -p ../build/target/user/platform-0-ltoDS18B20/src/
arm-none-eabi-gcc -DSTM32_DEVICE -DSTM32F10X_MD -DPLATFORM_THREADING=0 -DPLATFORM_ID=0 -DPLATFORM_NAME=core -DUSBD_VID_SPARK=0x1D50 -DUSBD_PID_DFU=0x607F -DUSBD_PID_CDC=0x607D -DSPARK_PLATFORM -DFLASHEE_EEPROM -g3 -gdwarf-2 -Os -mcpu=cortex-m3 -mthumb -flto -DINCLUDE_PLATFORM=1 -DPRODUCT_ID=0 -DPRODUCT_FIRMWARE_VERSION=65535 -DUSE_STDPERIPH_DRIVER -DDFU_BUILD_ENABLE -DSYSTEM_VERSION_STRING=1.4.4 -DRELEASE_BUILD -I./inc -I../wiring/inc -I../system/inc -I../third_party/miniz/miniz -I../services/inc -I../third_party/nanopb/nanopb -I../communication/inc -I../hal/inc -I../hal/shared -I../hal/src/core -I../hal/src/stm32 -I../platform/shared/inc -I../platform/MCU/STM32F1xx/STM32_StdPeriph_Driver/inc -I../platform/MCU/STM32F1xx/STM32_USB_Device_Driver/inc -I../platform/MCU/STM32F1xx/SPARK_Firmware_Driver/inc -I../platform/MCU/shared/STM32/inc -I../platform/MCU/STM32F1xx/CMSIS/Include -I../platform/MCU/STM32F1xx/CMSIS/Device/ST/Include -I../platform/NET/CC3000/CC3000_Host_Driver -I../dynalib/inc -Isrc -I./libraries -Ilib/DS18B20/src -Ilib/OneWire/src -I. -MD -MP -MF ../build/target/user/platform-0-ltoDS18B20/src/DS18B20.o.d -ffunction-sections -fdata-sections -Wall -Wno-switch -Wno-error=deprecated-declarations -fmessage-length=0 -fno-strict-aliasing -DSPARK=1 -DPARTICLE=1 -Wundef -DSTART_DFU_FLASHER_SERIAL_SPEED=14400 -DSTART_YMODEM_FLASHER_SERIAL_SPEED=28800 -DSPARK_PLATFORM_NET=CC3000 -fno-builtin-malloc -fno-builtin-free -fno-builtin-realloc -DLOG_INCLUDE_SOURCE_INFO=1 -DPARTICLE_USER_MODULE -DMODULE_VERSION=1406 -DMODULE_FUNCTION=3 -DMODULE_DEPENDENCY=0,0,0 -DMODULE_DEPENDENCY2=0,0,0 -D_WINSOCK_H -D_GNU_SOURCE -DLOG_MODULE_CATEGORY="\"app\"" -fno-exceptions -fno-rtti -fcheck-new -std=gnu++14 -c -o ../build/target/user/platform-0-ltoDS18B20/src/DS18B20.o lib/DS18B20/src/DS18B20.cpp
Building cpp file: lib/OneWire/src/DS18.cpp
Invoking: ARM GCC CPP Compiler
mkdir -p ../build/target/user/platform-0-ltoOneWire/src/
arm-none-eabi-gcc -DSTM32_DEVICE -DSTM32F10X_MD -DPLATFORM_THREADING=0 -DPLATFORM_ID=0 -DPLATFORM_NAME=core -DUSBD_VID_SPARK=0x1D50 -DUSBD_PID_DFU=0x607F -DUSBD_PID_CDC=0x607D -DSPARK_PLATFORM -DFLASHEE_EEPROM -g3 -gdwarf-2 -Os -mcpu=cortex-m3 -mthumb -flto -DINCLUDE_PLATFORM=1 -DPRODUCT_ID=0 -DPRODUCT_FIRMWARE_VERSION=65535 -DUSE_STDPERIPH_DRIVER -DDFU_BUILD_ENABLE -DSYSTEM_VERSION_STRING=1.4.4 -DRELEASE_BUILD -I./inc -I../wiring/inc -I../system/inc -I../third_party/miniz/miniz -I../services/inc -I../third_party/nanopb/nanopb -I../communication/inc -I../hal/inc -I../hal/shared -I../hal/src/core -I../hal/src/stm32 -I../platform/shared/inc -I../platform/MCU/STM32F1xx/STM32_StdPeriph_Driver/inc -I../platform/MCU/STM32F1xx/STM32_USB_Device_Driver/inc -I../platform/MCU/STM32F1xx/SPARK_Firmware_Driver/inc -I../platform/MCU/shared/STM32/inc -I../platform/MCU/STM32F1xx/CMSIS/Include -I../platform/MCU/STM32F1xx/CMSIS/Device/ST/Include -I../platform/NET/CC3000/CC3000_Host_Driver -I../dynalib/inc -Isrc -I./libraries -Ilib/DS18B20/src -Ilib/OneWire/src -I. -MD -MP -MF ../build/target/user/platform-0-ltoOneWire/src/DS18.o.d -ffunction-sections -fdata-sections -Wall -Wno-switch -Wno-error=deprecated-declarations -fmessage-length=0 -fno-strict-aliasing -DSPARK=1 -DPARTICLE=1 -Wundef -DSTART_DFU_FLASHER_SERIAL_SPEED=14400 -DSTART_YMODEM_FLASHER_SERIAL_SPEED=28800 -DSPARK_PLATFORM_NET=CC3000 -fno-builtin-malloc -fno-builtin-free -fno-builtin-realloc -DLOG_INCLUDE_SOURCE_INFO=1 -DPARTICLE_USER_MODULE -DMODULE_VERSION=1406 -DMODULE_FUNCTION=3 -DMODULE_DEPENDENCY=0,0,0 -DMODULE_DEPENDENCY2=0,0,0 -D_WINSOCK_H -D_GNU_SOURCE -DLOG_MODULE_CATEGORY="\"app\"" -fno-exceptions -fno-rtti -fcheck-new -std=gnu++14 -c -o ../build/target/user/platform-0-ltoOneWire/src/DS18.o lib/OneWire/src/DS18.cpp
Building cpp file: lib/OneWire/src/OneWire.cpp
Invoking: ARM GCC CPP Compiler
mkdir -p ../build/target/user/platform-0-ltoOneWire/src/
arm-none-eabi-gcc -DSTM32_DEVICE -DSTM32F10X_MD -DPLATFORM_THREADING=0 -DPLATFORM_ID=0 -DPLATFORM_NAME=core -DUSBD_VID_SPARK=0x1D50 -DUSBD_PID_DFU=0x607F -DUSBD_PID_CDC=0x607D -DSPARK_PLATFORM -DFLASHEE_EEPROM -g3 -gdwarf-2 -Os -mcpu=cortex-m3 -mthumb -flto -DINCLUDE_PLATFORM=1 -DPRODUCT_ID=0 -DPRODUCT_FIRMWARE_VERSION=65535 -DUSE_STDPERIPH_DRIVER -DDFU_BUILD_ENABLE -DSYSTEM_VERSION_STRING=1.4.4 -DRELEASE_BUILD -I./inc -I../wiring/inc -I../system/inc -I../third_party/miniz/miniz -I../services/inc -I../third_party/nanopb/nanopb -I../communication/inc -I../hal/inc -I../hal/shared -I../hal/src/core -I../hal/src/stm32 -I../platform/shared/inc -I../platform/MCU/STM32F1xx/STM32_StdPeriph_Driver/inc -I../platform/MCU/STM32F1xx/STM32_USB_Device_Driver/inc -I../platform/MCU/STM32F1xx/SPARK_Firmware_Driver/inc -I../platform/MCU/shared/STM32/inc -I../platform/MCU/STM32F1xx/CMSIS/Include -I../platform/MCU/STM32F1xx/CMSIS/Device/ST/Include -I../platform/NET/CC3000/CC3000_Host_Driver -I../dynalib/inc -Isrc -I./libraries -Ilib/DS18B20/src -Ilib/OneWire/src -I. -MD -MP -MF ../build/target/user/platform-0-ltoOneWire/src/OneWire.o.d -ffunction-sections -fdata-sections -Wall -Wno-switch -Wno-error=deprecated-declarations -fmessage-length=0 -fno-strict-aliasing -DSPARK=1 -DPARTICLE=1 -Wundef -DSTART_DFU_FLASHER_SERIAL_SPEED=14400 -DSTART_YMODEM_FLASHER_SERIAL_SPEED=28800 -DSPARK_PLATFORM_NET=CC3000 -fno-builtin-malloc -fno-builtin-free -fno-builtin-realloc -DLOG_INCLUDE_SOURCE_INFO=1 -DPARTICLE_USER_MODULE -DMODULE_VERSION=1406 -DMODULE_FUNCTION=3 -DMODULE_DEPENDENCY=0,0,0 -DMODULE_DEPENDENCY2=0,0,0 -D_WINSOCK_H -D_GNU_SOURCE -DLOG_MODULE_CATEGORY="\"app\"" -fno-exceptions -fno-rtti -fcheck-new -std=gnu++14 -c -o ../build/target/user/platform-0-ltoOneWire/src/OneWire.o lib/OneWire/src/OneWire.cpp
Building target: ../build/target/user/platform-0-ltolibuser.a
Invoking: ARM GCC Archiver
mkdir -p ../build/target/user/platform-0-lto
arm-none-eabi-gcc-ar -cr ../build/target/user/platform-0-ltolibuser.a ../build/target/user/platform-0-ltosrc/02cellalievipt100.o ../build/target/user/platform-0-ltoDS18B20/src/DS18B20.o ../build/target/user/platform-0-ltoOneWire/src/DS18.o ../build/target/user/platform-0-ltoOneWire/src/OneWire.o
make[1]: Leaving directory '/firmware/user'
make -C ../wiring
make[1]: Entering directory '/firmware/wiring'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/firmware/wiring'
make -C ../hal
make[1]: Entering directory '/firmware/hal'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/firmware/hal'
make -C ../system
make[1]: Entering directory '/firmware/system'
make -C ../third_party/miniz
make[2]: Entering directory '/firmware/third_party/miniz'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/firmware/third_party/miniz'
make[1]: Leaving directory '/firmware/system'
make -C ../services
make[1]: Entering directory '/firmware/services'
make -C ../third_party/nanopb
make[2]: Entering directory '/firmware/third_party/nanopb'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/firmware/third_party/nanopb'
make[1]: Leaving directory '/firmware/services'
make -C ../communication
make[1]: Entering directory '/firmware/communication'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/firmware/communication'
make -C ../platform
make[1]: Entering directory '/firmware/platform'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/firmware/platform'
make -C ../wiring_globals
make[1]: Entering directory '/firmware/wiring_globals'
make[1]: Nothing to be done for 'all'.
make[1]: Leaving directory '/firmware/wiring_globals'
make -C ../crypto
make[1]: Entering directory '/firmware/crypto'
make -C ../third_party/mbedtls
make[2]: Entering directory '/firmware/third_party/mbedtls'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/firmware/third_party/mbedtls'
make[1]: Leaving directory '/firmware/crypto'
Building c file: src/module_info.c
Invoking: ARM GCC C Compiler
mkdir -p target/obj/./src/
arm-none-eabi-gcc -DSTM32_DEVICE -DSTM32F10X_MD -DPLATFORM_THREADING=0 -DPLATFORM_ID=0 -DPLATFORM_NAME=core -DUSBD_VID_SPARK=0x1D50 -DUSBD_PID_DFU=0x607F -DUSBD_PID_CDC=0x607D -g3 -gdwarf-2 -Os -mcpu=cortex-m3 -mthumb -flto -DINCLUDE_PLATFORM=1 -DPRODUCT_ID=0 -DPRODUCT_FIRMWARE_VERSION=65535 -DUSE_STDPERIPH_DRIVER -DDFU_BUILD_ENABLE -DMBEDTLS_CONFIG_FILE="<mbedtls_config.h>" -DSYSTEM_VERSION_STRING=1.4.4 -DRELEASE_BUILD -Werror -I../user/inc -I../wiring/inc -I../hal/inc -I../hal/shared -I../hal/src/core -I../hal/src/stm32 -I../system/inc -I../third_party/miniz/miniz -I../services/inc -I../third_party/nanopb/nanopb -I../communication/inc -I../platform/shared/inc -I../platform/MCU/STM32F1xx/STM32_StdPeriph_Driver/inc -I../platform/MCU/STM32F1xx/STM32_USB_Device_Driver/inc -I../platform/MCU/STM32F1xx/SPARK_Firmware_Driver/inc -I../platform/MCU/shared/STM32/inc -I../platform/MCU/STM32F1xx/CMSIS/Include -I../platform/MCU/STM32F1xx/CMSIS/Device/ST/Include -I../platform/NET/CC3000/CC3000_Host_Driver -I../crypto/inc -I../third_party/mbedtls/mbedtls/include -I../dynalib/inc -I. -MD -MP -MF target/obj/./src/module_info.o.d -ffunction-sections -fdata-sections -Wall -Wno-switch -Wno-error=deprecated-declarations -fmessage-length=0 -fno-strict-aliasing -DSPARK=1 -DPARTICLE=1 -Wundef -DSTART_DFU_FLASHER_SERIAL_SPEED=14400 -DSTART_YMODEM_FLASHER_SERIAL_SPEED=28800 -DMODULE_VERSION=1406 -DMODULE_FUNCTION=3 -DMODULE_DEPENDENCY=0,0,0 -DMODULE_DEPENDENCY2=0,0,0 -D_WINSOCK_H -D_GNU_SOURCE -std=gnu11 -Wno-pointer-sign -c -o target/obj/./src/module_info.o src/module_info.c
Building file: ../build/arm/startup/startup_stm32f10x_md.S
Invoking: ARM GCC Assembler
mkdir -p target/obj/startup/
arm-none-eabi-gcc -g3 -gdwarf-2 -mcpu=cortex-m3 -mthumb -I../build/arm/startup -Wa,--defsym -Wa,SPARK_INIT_STARTUP=1 -x assembler-with-cpp -fmessage-length=0 -c -o target/obj/startup/startup_stm32f10x_md.o ../build/arm/startup/startup_stm32f10x_md.S
Building target: target/workspace.elf
Invoking: ARM GCC C++ Linker
mkdir -p target/
arm-none-eabi-g++ -DSTM32_DEVICE -DSTM32F10X_MD -DPLATFORM_THREADING=0 -DPLATFORM_ID=0 -DPLATFORM_NAME=core -DUSBD_VID_SPARK=0x1D50 -DUSBD_PID_DFU=0x607F -DUSBD_PID_CDC=0x607D -g3 -gdwarf-2 -Os -mcpu=cortex-m3 -mthumb -flto -DINCLUDE_PLATFORM=1 -DPRODUCT_ID=0 -DPRODUCT_FIRMWARE_VERSION=65535 -DUSE_STDPERIPH_DRIVER -DDFU_BUILD_ENABLE -DMBEDTLS_CONFIG_FILE="<mbedtls_config.h>" -DSYSTEM_VERSION_STRING=1.4.4 -DRELEASE_BUILD -Werror -I../user/inc -I../wiring/inc -I../hal/inc -I../hal/shared -I../hal/src/core -I../hal/src/stm32 -I../system/inc -I../third_party/miniz/miniz -I../services/inc -I../third_party/nanopb/nanopb -I../communication/inc -I../platform/shared/inc -I../platform/MCU/STM32F1xx/STM32_StdPeriph_Driver/inc -I../platform/MCU/STM32F1xx/STM32_USB_Device_Driver/inc -I../platform/MCU/STM32F1xx/SPARK_Firmware_Driver/inc -I../platform/MCU/shared/STM32/inc -I../platform/MCU/STM32F1xx/CMSIS/Include -I../platform/MCU/STM32F1xx/CMSIS/Device/ST/Include -I../platform/NET/CC3000/CC3000_Host_Driver -I../crypto/inc -I../third_party/mbedtls/mbedtls/include -I../dynalib/inc -I. -MD -MP -MF target/workspace.elf.d -ffunction-sections -fdata-sections -Wall -Wno-switch -Wno-error=deprecated-declarations -fmessage-length=0 -fno-strict-aliasing -DSPARK=1 -DPARTICLE=1 -Wundef -DSTART_DFU_FLASHER_SERIAL_SPEED=14400 -DSTART_YMODEM_FLASHER_SERIAL_SPEED=28800 -DMODULE_VERSION=1406 -DMODULE_FUNCTION=3 -DMODULE_DEPENDENCY=0,0,0 -DMODULE_DEPENDENCY2=0,0,0 -D_WINSOCK_H -D_GNU_SOURCE target/obj/./src/module_info.o target/obj/startup/startup_stm32f10x_md.o --output target/workspace.elf -nostartfiles -Xlinker --gc-sections -flto -Os -fuse-linker-plugin -Tlinker_stm32f10x_md_dfu.ld -L../build/arm/linker --specs=nano.specs -lc -lnosys -u _printf_float -Wl,-Map,target/workspace.map -L../build/target/user/platform-0-lto -L../build/target/wiring/platform-0-lto/ -L../build/target/system/platform-0-lto/ -L../build/target/services/platform-0-lto/ -L../build/target/communication/platform-0-lto-prod-0/ -L../build/target/hal/platform-0-lto/ -L../build/target/platform/platform-0-lto/ -L../build/target/wiring_globals/platform-0-lto/ -L../build/target/crypto/platform-0-lto/ -L../build/target/newlib_nano/platform-0-lto -L../build/target/miniz/platform-0-lto -L../build/target/nanopb/platform-0-lto -L../build/target/mbedtls/platform-0-lto -L../build/arm/linker -Wl,--whole-archive -lnewlib_nano -luser -lwiring -lhal -lsystem -lservices -lcommunication -lplatform -lwiring_globals -lcrypto -lminiz -lnanopb -lmbedtls -Wl,--no-whole-archive
/usr/local/gcc-arm-embedded/bin/../lib/gcc/arm-none-eabi/5.3.1/../../../../arm-none-eabi/bin/ld: target/workspace.elf section `.text' will not fit in region `APP_FLASH'
/usr/local/gcc-arm-embedded/bin/../lib/gcc/arm-none-eabi/5.3.1/../../../../arm-none-eabi/bin/ld: region `APP_FLASH' overflowed by 3800 bytes
collect2: error: ld returned 1 exit status
../build/module.mk:232: recipe for target 'target/workspace.elf' failed
make: *** [target/workspace.elf] Error 1
The last few lines of your error report tell the story
The Core has considerably less flash (and RAM) than the other two (Photon and Argon), hence the resulting binary will not fit onto that board.
So itâs not what the function does but rather how much code you write.
With 1.4.4. a lot of the available flash will already be used for the device OS and very little remains for your actual âbusiness logicâ.
With the Core and a simple program like yours you may want to stick to 1.0.0 or even 0.7.0
To reduce your code size, you can try
- avoiding
double
and usefloat
instead. - streamline your code just like I suggested above
- shorten your string literals.
- drop
Serial.begin()
as itâs already called by the system internally - avoid redundancy (e.g.
temp
andTV1
are virtually the same thing, so one should go)
Hi @ScruffR
Thanks for the help of the suggestions, see if I can streamline the code.
Have a nice weekend
Valentino
Hello @ScruffR
Hello
today I streamlined the code but without great results. Do you by any chance have a suggestion to avoid using the particle.function but to be able to set the temperature from the console or from the apps?
I enclose the test results.
Happy Sunday and thank you for your precious help.
With Particle.function
text data bss dec hex
18056 480 1460 19996 4
In a nutshell:
Flash used 18536 bytes
RAM used 1940 bytes
Without Particle.function
text data bss dec hex
9308 112 1460 10880 2
In a nutshell:
Flash used 9420 bytes
RAM used 1572 bytes
Have you changed the target Device OS version as suggested above?
This code fits (only just) into the Core when building against no higher than 1.0.1
#include <DS18.h>
const int pinRelay = D0;
const int pinSensor = D3;
const int pinUmid = A0;
const float vOffset = 620.3935; // == 0.1515 * 4095
const float vFactor = 26.0442; // == 0.00636 * 4095
const float tBase = 1.0546;
const float tFactor = 0.00216;
float setPoint = 22.0;
char env[64];
DS18 sensor(pinSensor);
void setup() {
Particle.function("set", setTarget);
//Particle.variable("env", env);
pinMode(pinRelay, OUTPUT);
}
void loop() {
//static uint32_t ms = 0;
//if (millis() - ms < 1000) return; // instead of delay(1000), keep cloud connection more responsive
//ms = millis();
static float temp = 0.0;
static float umidRH = 0.0;
static bool stato = false;
if (sensor.read()) {
temp = sensor.celsius();
stato = (temp < setPoint);
digitalWrite(pinRelay, stato);
}
umidRH = ((analogRead(pinUmid) - vOffset) * vFactor) / (tBase - temp * tFactor);
snprintf(env, sizeof(env), "s:%d,T:%.1f,P:%.1f,U:%.1f%%", stato, temp, setPoint, umidRH);
Serial.print(env);
delay(1000); // less memory impact
}
int setTarget(String arg) {
setPoint = arg.toFloat();
return (setPoint + 0.5); // poor man's rounding
}
Hello @ScruffR
as per your suggestion I changed the version from 1.4.4 to 1.0.0 and it no longer gives the error.
I had to add this line (pinMode (pinRelay, OUTPUT)) in the setup otherwise it didnât work and do a rem on the variable (will not fit in region `APP_FLASH ') but I can fix this later.
I still have a problem with setting the setpoint from console or apps, in the setup we put 22.0, if I put 18 in the console the relay change state while if I set 25 it does not change state.
Thank you and good evening
Valentino
As per your own code, in order for the relay to change state sensor.read()
must return true and the comparison (temp < setPoint)
must change from the state corresponding to the current state of the relay.
Without knowing the state of these conditions itâs difficult to assess the cause.
What do the Serial.print()
logs tell you about that?
In order to get back your Particle.variable()
you could comment out the Serial.print()
statement once you got your code doing what itâs supposed to do.
Also any variable you donât need in the snprintf()
output should free up some more space for other things you need.
But itâs a ride on the knives edge.
Going back to 0.7.0 will provide you with another decent extra chunk of space.
Hello @ScruffR
Thanks to this version everything works fine even the change of the values for the setpoint. I attach print screen of the serial print. The humidity calculation is not correct, as I had done in my calculation the humidity corresponded to that measured with both digital and analog hygrometers.
Anyway thanks for the support I wish you a good day.
Valentino
s:1,T:20.4,P:22.0,U:22748.9%
s:1,T:20.4,P:22.0,U:22620.1%
s:1,T:20.4,P:22.0,U:22594.3%
s:1,T:20.4,P:22.0,U:22723.2%
s:0,T:20.4,P:18.0,U:22980.9%
s:0,T:20.4,P:18.0,U:23058.2%
s:0,T:20.4,P:18.0,U:22723.2%
s:0,T:20.4,P:18.0,U:22800.5%
s:0,T:20.4,P:18.0,U:23084.0%
s:0,T:20.4,P:18.0,U:23135.6%
s:1,T:20.4,P:25.0,U:22671.6%
s:1,T:20.4,P:25.0,U:22697.4%
s:1,T:20.4,P:25.0,U:22929.4%
s:1,T:20.4,P:25.0,U:22620.1%
Could it be that there is a factor of 1 / 1000
missing?
Originally that variable was called UmidTRH
which I didnât quite understand, but looking at the numbers it seems to fit but would only have made sense if UmidTRH
was an integer.
In your original code you also used UmidV
which suggested to me that this would be some voltage reading and hence wouldnât make much sense as I havenât heard of any common device that uses that unit for humidity.
To save space I removed the intermediate calculation of UmidV
and unified both formulas into one for relative humidity, also removing some calculation steps by incorporating other constants (like 4095
) into the named constants.
Consequently, to get relative humidity in percent youâd need to change tBase
and tFactor
accordingly (1054.6
& 2.16
).
Alternatively, to get your other reading (maybe absolute humidity as [g/mÂł]
???) youâd remove the term [ / (tBase - temp * tFactor) ]
from the calculation - also rename the variable appropriately (e.g. absUmid
) and change the unit in the format string.
absUmid = ((analogRead(pinUmid) - vOffset) * vFactor);
snprintf(env, sizeof(env), "s:%d,T:%.1f°C,P:%.1f°C,U:%.1fg/m³", stato, temp, setPoint, absUmid);
This illustrates how important it would be to comment on the meaning of your variable names and formulas, so that uninitiated coders can make sense of what they see
Hello @ScruffR
I made various measurements but your calculations are correct if we divide by 1000 (see attached printscreen), compared with a digital hygrometer it currently indicates 23%.
Thanks Valentino
s:1,T:21.0°C,P:22.0°C,U:22804.5g/m³
s:1,T:21.0°C,P:22.0°C,U:22153.4g/m³
s:1,T:20.9°C,P:22.0°C,U:22257.5g/m³
s:1,T:20.9°C,P:22.0°C,U:22153.4g/m³
So if you want percent (relative humidity) after all you should use this then
const float vOffset = 620.3935; // == 0.1515 * 4095
const float vFactor = 26.0442; // == 0.00636 * 4095
const float tBase = 1054.6000; // origin to be documented
const float tFactor = 2.1600; // origin to be documented
and
//absUmid = ((analogRead(pinUmid) - vOffset) * vFactor);
relUmid = ((analogRead(pinUmid) - vOffset) * vFactor) / (tBase - temp * tFactor);
snprintf(env, sizeof(env), "s:%d,T:%.1f°C,P:%.1f°C,U:%.1f%%", stato, temp, setPoint, relUmid);
Good morning @ScruffR
today made the suggested changes and now the values are right I added a line to compare the voltage measured with the voltmeter and the calculated one are the same.
I apologize for the delay on my replies to your suggestions, but Mr. Covid passed here leaving us his gifts.
Have a good day
Valentino
Tens 1.18
s: 1, T: 20.6 ° C, P: 22.0 ° C, U: 21.6%
Tens 1.18
s: 1, T: 20.6 ° C, P: 22.0 ° C, U: 21.5%
Tens 1.17
s: 1, T: 20.6 ° C, P: 22.0 ° C, U: 21.6%
Just for documentation
const float vOffset = 620.3935; // == 0.1515 * 4095 from datasheeet Voltage Output Vout=Vsupply)(0.00636(sensor RH)+0.1515) typical at 25°C
const float vFactor = 26.0442; // == 0.00636 * 4095
const float tBase = 1054.6000; // From Datasheet Honeyweel HIH-5030 Temperature compensation True RH = (Sensor RH)/(1.0546 â 0.00216T), T in °C
const float tFactor = 2.1600; // From Datasheet Honeyweel HIH-5030 Temperature compensation True RH = (Sensor RH)/(1.0546 â 0.00216T), T in °C
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.