0

私はC / Arduinoにかなり慣れていません

ループを作成するときに必要な関数が 1 つだけになるように、コードを単純化しようとしています。

コードは SPI LCD ディスプレイ用です。1 つに結合したい 2 つのコードがあります。最初のコードは、32 文字の txt を画面に書き込み、配列から 32 文字を選択します。これは完璧に機能します。

void writeLCD(char LcdText[33]){
unsigned char TextRow, CharacterRow, TextColumn, CharNum ;
unsigned int InPointerString ; 
    InPointerString = 1 ;
    SPI.transfer(0x48) ; 
    SPI.transfer(0);SPI.transfer(0);SPI.transfer(0);
    for(TextColumn = 8 ; TextColumn > 0 ; TextColumn--){
        for(CharacterRow = 8 ; CharacterRow > 0 ; CharacterRow --){
            for(TextRow = 0 ; TextRow < 4; TextRow++){
                CharNum = LcdText[TextRow*8 + TextColumn-1] ;
                if(CharNum > 0x7F){
                    SPI.transfer(Font8x8[(CharNum-0x80)*8 + CharacterRow - 1] & 0x0F ) ;
                    SPI.transfer(((Font8x8[(CharNum-0x80)*8 + CharacterRow - 1] & 0xF0) >> 4) & 0x0f   ) ;
                } else {
                    SPI.transfer(Font8x8[CharNum*8 + CharacterRow - 1] & 0x0F ) ;
                    SPI.transfer(((Font8x8[CharNum*8 + CharacterRow - 1] & 0xF0) >> 4) & 0x0f   ) ;
                }
            }
        }
    }
    SPI.transfer(0x43) ;
    delay(1);
}

2 番目のコードは、配列から 512 バイトを選択し、画像を画面に書き込むことです。これは完璧に機能します。

// Data is a pointer to 512 bytes of image data to display
void BMP(uint16_t * data){
uint16_t i;
SPI.transfer(0x49); // Start Bitmap CMD
for (i=0; i<512; i++){
SPI.transfer(data[i]);
} // Send BMP Array
SPI.transfer(0x43); // End Bitmap CMD           
delay(1); // wait 1ms
}

現在、配列は別のライブラリに保存されており、BMPlibrary と TXTlibrary の作業が楽になります。

みんなに確認するために-両方のコードは完全に独立して動作します

以下のコードを思いつき、2 つを 1 つに結合し、if ステートメントを使用して、そのサイズに基づいて配列をどうするかを決定しました。小さい場合は txt を書き込み、大きい場合は画像を書き込みます。以下のコードは BMP で動作しますが、コンパイルに失敗します。

void LCD(char RGBXXX, uint16_t str[]){
  RGB(RGBXXX);
  if(sizeof(str) > 33){
  char data[33];
  memcpy(data,(uint8_t*)str,33);
 writeLCD(data);
  }
  else {
  BMP(str);
  }
} 

ただし、私が今抱えている問題は、タイプキャストを記述するときに、それを uint8_t として設定すると、コードの txt 部分は正常に機能しますが、イメージ コードは動作しません。

cannot convert 'uint8_t*' to 'uint16_t*' for argument '2' to 'void LCD(char, uint16_t*)'

uint16_t として設定すると、画像は正常に機能しますが、txt は機能しません!

私は慈善団体を期待していませんが、私がどこで間違っているのかを理解するためのほんの少しの手助けをいただければ幸いです! バイトサイズに関係があることに気付くまで、最初は画像が機能しない理由を見つけるのに何時間も費やしましたが、今では2つを組み合わせる方法がわかりません!

4

1 に答える 1