2016-11-03 7 views
-3

プラットフォームを動作しません。レーザー(VL53L0X)が2〜4の数の場所から読みになっている。機能が

Serial.print(mmLaser); 

作品(以上4ヶ所、MAX 8190出て行くことはありません)が、4ヶ所をフォーマットすることはできません。
私は関数を呼び出す場合、私は関数を呼び出すことなく、コンパイルした場合、私は、エラー

**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_を "4つの場所に決して行きません"と信じていないと思います。 'int'が生成する最大値までバッファのサイズを調整する方が良いでしょう。 – chux

+0

私は、奇妙なことに、私が符号なしのints *に小数点以下の桁がないことを指摘していることを戸惑わせている*。これは質問の奇妙なジグソーパズルであることには役立ちません。 [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);