2016-11-03 6 views
-3

플랫폼을 작동하지 않습니다. 레이저 (VL53L0X)은 2 ~ 4 숫자 장소에서 읽기 받고있다.기능은

Serial.print(mmLaser); 

작업 (이상 4 곳, MAX 8190 밖으로 이동하지 않습니다)하지만 4 곳을 포맷 할 수 없습니다. 나는 함수를 호출하는 경우
I 함수를 호출하지 않고 오류

**ERROR:** invalid conversion from 'char' to 'char*' [-fpermissive] 

내가 컴파일하는 경우를 얻을 : 오류 내가 잘못 뭐하는 거지

? 바르 선언

char c_temp; 
uint16_t mmLaser = 0; // hold laser reading 

uint16_2_char(mmLaser, c_temp); 
Serial.print(c_temp); 

기능이라는 기능은

// Convert uint16_t to char* 
// param 1 n - uint16_t Number 
// param 2 c - char to return char value to 
// 
void uint16_2_char(uint16_t n, char* c){ 
    sprintf(c, "%04d", (int) n); 
} 
+0

'char'를 함수에 전달하는 것에 대해 말하자. 'char *'를 기대하니? – EOF

+1

'char c_temp;'->'char c_temp [100];' "네 곳을 결코 지나칠 수 없다"에서 나는 _never_를 믿지 않는다고 생각합니다. 버퍼를 최대 크기 (int)로 생성하는 것이 가장 좋습니다. – chux

+0

나는 서명되지 않은 int *에 소수점이 없다는 것을 지적하고 있다는 이상한 생각이 들었다. 이것이 이상한 퍼즐 조각이라는 것은 도움이되지 않습니다. [ask]를 읽으십시오. 그것을 마음에 가져라. [mcve] – Tibrogargan

답변

0

코드가 필요 문자의 배열

//  Pointer to a character -----v        
void uint16_2_char(uint16_t n, char* c){ 
    sprintf(c, "%04d", (int) n); 
} 

문제 코드

//  This is one character 
char c_temp; 

uint16_t mmLaser = 0; // hold laser reading 

// **ERROR:** invalid conversion from 'char' to 'char*' 
// Does not make sense to pass a character when an address is needed 
// Need to pass the initial _address_ as an array of characters instead. 
//       v 
uint16_2_char(mmLaser, c_temp); 

더 나은 코드

#define INT_BUF_SIZE 24 
char buffer[INT_BUF_SIZE]; 

// When an array is passed to a function, 
// it is converted to the address of the 1st character of the array. 
// The function receives &buffer[0] 
uint16_2_char(mmLaser, buffer); 

더 나은, 주소 및 사용할 수있는 크기를 전달하는 컴파일러를 가지고 무엇

void uint16_2_char(uint16_t n, char* c, size_t sz){ 
    unsigned u = n; 
    // I'd expect using unsigned types. (use `%u`) 
    // snprintf() will not not overfill the buffer 
    snprintf(c, sz, "%04u", u); 
} 

char buffer2[INT_BUF_SIZE]; 
uint16_2_char2(mmLaser, buffer, sizeof buffer);