I'm getting two errors that the compiler has accepted but I can't see what is wrong.
I realize a warning is not an error and the program can be used, however I really would like to know where I'm going astray. Especially if I've accidently created a "regular" string.
-
At line 67 (see listing, "line 67" is in a comment) the compiler complains of what appears to be a conversion of a pointer to a variable to a variable. However I can't see where a pointer enters into this situation.
-
I'm trying to concatenate two C-Strings. ( I think a C-String is an array of characters).
see line 130 (also noted in comments)
The First char should be the code for an ASCII !
Next should be an array of bytes representing some number Like dec 203.
The last should be a CR aka 0x0D
The resulting array will be sent via UART to a Zigbee device.
I thought this was easy but I've not been able to eliminate this warning.
Thanks
John
#include "ArduinoSort.h" // downloaded library for sorting arrays. Currently in program folder
#include <avr/wdt.h>
#define trigPin 9
#define echoPin 8
#define NumReadings 9 // index - to 6, Number must be odd for sort to work properly
#define MedianReading 4
#define MeasReqPin 7 // connected to CC2530 P1.0 output
// --- Define variables ------------------------
uint8_t k = 0; // loop counter for LED blink time
uint16_t inputRdgs[NumReadings + 2];
unsigned long presenceTime = 43200000; //1000 * 3600 * 12; // every 12 hours
unsigned long checkinZero;
// --- Function Prototypes ---------------------
uint16_t measureDistance(void);
uint16_t getEchoDistance (void);
void sendDistance(uint16_t);
//bool readSerial(void);
void writeSerial(void);
//void serialFlush(void);
void watchdogSetup(void);
// --- Setup -----------------------------------
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode( LED_BUILTIN, OUTPUT);
pinMode(MeasReqPin, INPUT);
Serial.begin(9600);
checkinZero = millis();
delay(500);
watchdogSetup();
}
// --- Loop -----------------------------------
void loop() {
if (MeasReqPin == 1){
// initiate measurement and send to Hub
uint16_t xxx = measureDistance; // ------------------------------- line 67
sendDistance(xxx);
}
if ((millis()-checkinZero) > presenceTime) {
Serial.write("!p"); // 0x0D) ; // ?????
checkinZero = millis();
}
delay(10); // slow down the LED
if (k > 200){
asm ("sbi %0, %1 \n": : "I" (_SFR_IO_ADDR(PINB)), "I" (PINB5)); // Toggle LED
k = 0;
}
++k;
wdt_reset();
} // --- loop ----
//// --------------------------------------------------------------------------------////
/// --- Functions -------------------------------------------------------------------///
// ----------------------------------------------------------------------------------//
uint16_t measureDistance(){
for (int j = 0; j < (NumReadings + 1); j++) {
inputRdgs[j] = getEchoDistance();
delay(100);
}
sortArray(inputRdgs, NumReadings);
// after sorting we will ignore the highest 3 and lowest 3 readings.
return inputRdgs[MedianReading]; // this reading is the middle of NumReadings readings.
}
// ---------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
uint16_t getEchoDistance (void){
unsigned long duration;
digitalWrite(trigPin, LOW);
delay(5);
// trigger the sensor
digitalWrite(trigPin, HIGH);
delayMicroseconds(8);
digitalWrite(trigPin, LOW);
// Read the echoPin, pulseIn() returns the duration (length of the pulse) in microseconds:
duration = pulseIn(echoPin, HIGH);
return (duration * 0.034 / 2);
}
// ----------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
void sendDistance(uint16_t vDistance) {
// send "!"+"Distance"+ CR to hub
char diststr[16];
ultoa(vDistance, diststr, 10);
char buf[20];
strcpy(buf,"!");
strcat(buf, diststr);
strcat(buf,'\r'); // ----------------------------------- line 130
Serial.write (buf); // send off to Zigbee board
} // --- sendDistance ---
void serialFlush(){
while(Serial.available() > 0) {
char t = Serial.read();
}
}
// ---------------------------------------------------------------------------------
// ----------------------------------------------------------------------------------
void watchdogSetup(void) {
cli(); // disable all interrupts
wdt_reset();
// reset the WDT timer
/*
WDTCSR configuration:
WDIE = 1: Interrupt Enable
WDE = 1 :Reset Enable
WDP3 = 0 :For 2000ms Time-out
WDP2 = 1 :For 2000ms Time-out
WDP1 = 1 :For 2000ms Time-out
WDP0 = 1 :For 2000ms Time-out
*/
// Enter Watchdog Configuration mode:
WDTCSR |= B00011000;
// Set Watchdog settings:
WDTCSR = B01000111;
sei();
//Serial.println(WDTCSR);
}
error listing..
FQBN: arduino:avr:pro:cpu=8MHzatmega328
Using board 'pro' from platform in folder: C:\Users\john\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6
Using core 'arduino' from platform in folder: C:\Users\john\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6
Detecting libraries used...
C:\Users\john\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10607 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR -IC:\Users\john\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\john\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\eightanaloginputs C:\Users\john\AppData\Local\Temp\arduino\sketches\59EA4D757BF38D089FC8F1F40149DD30\sketch\AVRUltrasonicArduinoGPIO.ino.cpp -o nul
Generating function prototypes...
C:\Users\john\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10607 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR -IC:\Users\john\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\john\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\eightanaloginputs C:\Users\john\AppData\Local\Temp\arduino\sketches\59EA4D757BF38D089FC8F1F40149DD30\sketch\AVRUltrasonicArduinoGPIO.ino.cpp -o C:\Users\john\AppData\Local\Temp\3275914274\sketch_merged.cpp
C:\Users\john\AppData\Local\Arduino15\packages\builtin\tools\ctags\5.8-arduino11/ctags -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives C:\Users\john\AppData\Local\Temp\3275914274\sketch_merged.cpp
Compiling sketch...
"C:\\Users\\john\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=8000000L -DARDUINO=10607 -DARDUINO_AVR_PRO -DARDUINO_ARCH_AVR "-IC:\\Users\\john\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\john\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\eightanaloginputs" "C:\\Users\\john\\AppData\\Local\\Temp\\arduino\\sketches\\59EA4D757BF38D089FC8F1F40149DD30\\sketch\\AVRUltrasonicArduinoGPIO.ino.cpp" -o "C:\\Users\\john\\AppData\\Local\\Temp\\arduino\\sketches\\59EA4D757BF38D089FC8F1F40149DD30\\sketch\\AVRUltrasonicArduinoGPIO.ino.cpp.o"
C:\Users\john\Documents\Arduino\AVRUltrasonicArduinoGPIO\AVRUltrasonicArduinoGPIO.ino: In function 'void loop()':
C:\Users\john\Documents\Arduino\AVRUltrasonicArduinoGPIO\AVRUltrasonicArduinoGPIO.ino:67:20: warning: invalid conversion from 'uint16_t (*)() {aka unsigned int (*)()}' to 'uint16_t {aka unsigned int}' [-fpermissive]
uint16_t xxx = measureDistance; // ------------------------------- line 67
^~~~~~~~~~~~~~~
C:\Users\john\Documents\Arduino\AVRUltrasonicArduinoGPIO\AVRUltrasonicArduinoGPIO.ino: In function 'void sendDistance(uint16_t)':
C:\Users\john\Documents\Arduino\AVRUltrasonicArduinoGPIO\AVRUltrasonicArduinoGPIO.ino:130:18: warning: invalid conversion from 'char' to 'const char*' [-fpermissive]
strcat(buf,'\r'); // ----------------------------------- line 130
^
In file included from C:\Users\john\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino/Arduino.h:25:0,
from C:\Users\john\AppData\Local\Temp\arduino\sketches\59EA4D757BF38D089FC8F1F40149DD30\sketch\AVRUltrasonicArduinoGPIO.ino.cpp:1:
c:\users\john\appdata\local\arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7\avr\include\string.h:248:14: note: initializing argument 2 of 'char* strcat(char*, const char*)'
extern char *strcat(char *, const char *);
^~~~~~
Compiling libraries...
Compiling core...
Using precompiled core: C:\Users\john\AppData\Local\Temp\arduino\cores\arduino_avr_pro_cpu_8MHzatmega328_f18a839ae973b6755e4478067cfee7b2\core.a
Linking everything together...
"C:\\Users\\john\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-gcc" -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p -o "C:\\Users\\john\\AppData\\Local\\Temp\\arduino\\sketches\\59EA4D757BF38D089FC8F1F40149DD30/AVRUltrasonicArduinoGPIO.ino.elf" "C:\\Users\\john\\AppData\\Local\\Temp\\arduino\\sketches\\59EA4D757BF38D089FC8F1F40149DD30\\sketch\\AVRUltrasonicArduinoGPIO.ino.cpp.o" "C:\\Users\\john\\AppData\\Local\\Temp\\arduino\\sketches\\59EA4D757BF38D089FC8F1F40149DD30/..\\..\\cores\\arduino_avr_pro_cpu_8MHzatmega328_f18a839ae973b6755e4478067cfee7b2\\core.a" "-LC:\\Users\\john\\AppData\\Local\\Temp\\arduino\\sketches\\59EA4D757BF38D089FC8F1F40149DD30" -lm
"C:\\Users\\john\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-objcopy" -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 "C:\\Users\\john\\AppData\\Local\\Temp\\arduino\\sketches\\59EA4D757BF38D089FC8F1F40149DD30/AVRUltrasonicArduinoGPIO.ino.elf" "C:\\Users\\john\\AppData\\Local\\Temp\\arduino\\sketches\\59EA4D757BF38D089FC8F1F40149DD30/AVRUltrasonicArduinoGPIO.ino.eep"
"C:\\Users\\john\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-objcopy" -O ihex -R .eeprom "C:\\Users\\john\\AppData\\Local\\Temp\\arduino\\sketches\\59EA4D757BF38D089FC8F1F40149DD30/AVRUltrasonicArduinoGPIO.ino.elf" "C:\\Users\\john\\AppData\\Local\\Temp\\arduino\\sketches\\59EA4D757BF38D089FC8F1F40149DD30/AVRUltrasonicArduinoGPIO.ino.hex"
"C:\\Users\\john\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-size" -A "C:\\Users\\john\\AppData\\Local\\Temp\\arduino\\sketches\\59EA4D757BF38D089FC8F1F40149DD30/AVRUltrasonicArduinoGPIO.ino.elf"
Sketch uses 2030 bytes (6%) of program storage space. Maximum is 30720 bytes.
Global variables use 193 bytes (9%) of dynamic memory, leaving 1855 bytes for local variables. Maximum is 2048 bytes.