#include <LiquidCrystal.h>
// C# LiquidCrystal 基礎類
// C# call 委派類(Delegate)
struct Lcd: LiquidCrystal
{
char buff[17]{0}, len{0};
uint32_t x{0};
using LiquidCrystal:: LiquidCrystal; // C++ 11, 也要繼承 LiquidCrystal類的建構函式
//Lcd( const Lcd& ) = delete; // 刪除預設的複製建構函式
//Lcd& operator= ( const Lcd& ) = delete; // 刪除預設的複製指派運算子
//Lcd( int ) = delete; // 指示gcc刪除這種建構函式.
//Lcd( char ) = delete; // 指示gcc刪除這種建構函式.
//~Lcd() = default; // 指示gcc用預設產生的版本, 因自定的解構函式效率差.
// explicit B(int) {} // 指示gcc參數型態要明確(不可隱式轉換)才可overload.
};
enum
{
LCD_RS = 7, LCD_EN = 8,
LCD_D4 = 9, LCD_D5 = 10,
LCD_D6 = 11, LCD_D7 = 12,
//
LCD_COL = 16, LCD_ROW = 2,
};
Lcd LCD( LCD_RS, LCD_EN, LCD_D4, LCD_D5, LCD_D6, LCD_D7 );
void setup()
{
LCD.begin( LCD_COL, LCD_ROW );
}
bool test( uint32_t shno )
{
static uint32_t i{0};
return i++ & ~( -1lu << shno );
}
void loop()
{
do
{
if( test( 0 ) ) break;
sprintf( LCD.buff, "%16lu", LCD.x++ );
LCD.setCursor( 0, 0 );
LCD.print( LCD.buff );
} while(0);
}