工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

ArduinoNano用TFTシールド-開始

コンポーネントと消耗品

>
Arduino Nano R3
× 1
2,8 "TFT SPI 320x240
× 1
ArduinoNano用のTFTシールド
× 1

このプロジェクトについて

ストーリー

カラーディスプレイが何であるかを見ていない、知らない人はほとんどいません。そして、おそらく、多くの人がカラーディスプレイを使用してArduinoでいくつかのプロジェクトを実行しました(または実行したいと考えています)。さらに、今日のそのようなディスプレイは非常に普及していて手頃な価格です。解像度、画面サイズ、インターフェイスが異なる多くのディスプレイがあります。これらのディスプレイの1つについて詳しく説明したいと思います。 SPIのインターフェイス、320x240ピクセルの解像度、2.8 "(2.4"および3.2 ")の画面対角サイズのディスプレイに関心があります。SPIインターフェイスは、マイクロコントローラーへの接続に非常に便利です。信号線の数が少なく、SPIの速度により、画面の内容をすばやく更新できます。一般に、多くの利点がありますが、不快な瞬間があります。たとえば、ロジックレベルをさらに調整する必要があります。ディスプレイを5ボルト電源でArduinoボードに接続する場合、これらのディスプレイの1つ(SPIインターフェイスを使用)をArduino Nanoにすばやく簡単に接続するために、少額の料金であるTFTシールドを使用します。

>

このシールドは、Arduino Uno用のTFTシールドの2番目(軽量、Arduino Nano用)バージョンであり、こことこことここで読むことができます。

TFTシールドの簡単な説明:

  • ボードのサイズは64x49mmです
  • ArduinoNanoを接続するための30ピンコネクタ
  • TFTディスプレイ320x240をSPIインターフェース(タッチスクリーンを含む)に接続するための14ピンコネクタ
  • microSDカード用コネクタ
  • Bluetoothモジュール(HC-06)用のコネクタ
  • カメラOV7670(およびその他)用の20ピンコネクタ
  • ミニUSBコネクタ、および電源5V用の独立した2ピンコネクタ。

それでは、始めましょう。

組み立て

ボードの組み立てはとても簡単です。ただし、インストールする前に連絡先の指定を読むように注意する必要があります。最初に、写真に示すようにArduinoNanoボードをインストールする必要があります。その後、ディスプレイが接続され、ボードの片側の両方に接続できます(方法1 )およびその他(メソッド2 )。その後、ミニUSBケーブルで電源を接続できます。以下は写真です。

方法1:

<図> <図> <図> <図> <図> <図>

方法2:

<図> <図> <図> <図> <図> <図> <図> <図> <図> <図>

組み立て後、スケッチのダウンロードに進むことができますが、その前に、TFTシールドを操作するために必要なライブラリをインストールすることを忘れないでください。ライブラリは次のリンクにあります:https://github.com/YATFT/YATFT。

デモ1.グラフィックとテキスト。

この章では、テキスト、グラフィックス、およびタッチスクリーンの操作例を示します。便宜上、最初にArduino Nanoボードを個別にプログラムしてから、デバイスを組み立てることをお勧めします(ただし、ボードをデバイスの一部としてプログラムすることもできます)。テキストとグラフィックを操作するためのスケッチ:

  / ******************************************* ************************************ソフトウェアとドキュメントは「現状有姿」で提供され、いかなる保証もありません*明示または黙示を問わず、商品性、権原、非侵害、および特定の*目的への適合性の保証*を含むがこれに限定されない種類。いかなる場合も、著者またはそのライセンサーは、契約、過失、無過失責任、貢献*、保証違反、またはその他の法定責任理論に基づいて責任を負わないものとします。 、*間接的、懲罰的または結果的な損害、利益の損失またはデータの損失、*代替商品、技術、サービス、または第三者による*請求(それらの防御を含むがこれに限定されない)*またはその他のSIMの調達費用。************************************************* ****************************** /#include  //ハードウェア固有のライブラリ#include  // Adafruitを含める-GFXlibrary#include  // Adafruit fonts#include  #include  YATFT tft(0); uint32_t total_time; uint16_tを含めるColor [4] ={BRIGHTBLUE、BRIGHTGREEN、BRIGHTRED、BRIGHTYELLOW}; uint16_t Gr ay [7] ={GRAY0、GRAY1、GRAY2、GRAY3、GRAY4、GRAY5、GRAY6}; / **************************** ************************************************** / void ClearScreen(void){tft.SetColor(BLACK); // fone colorを設定しますtft.ClearDevice(); //すべての画面を埋めます} void setup(){Serial.begin(115200); //シリアルポートを初期化しますSerial.println( "Arduino TFT_shield Example 1!"); tft.begin(); //表示を初期化します} void loop(){uint16_t x、y、x2、y2、mask_gray; uint16_t i; ClearScreen(); //フォントSerial.print( "1)フォントの表示("); total_time =millis(); tft.SetColor(BRIGHTBLUE); tft.SetFont(NULL); tft.OutTextXY(5、5、 "TFTディスプレイでの作業のデモンストレーション。"); tft.SetColor(BRIGHTGREEN); tft.SetFont(&FreeSerif9pt7b); tft.OutTextXY(5、20、 "例ではAdafruitのフォントを使用しています。"); tft.SetFont(&FreeSerifItalic24pt7b); tft.SetColor(BRIGHTCYAN); tft.OutTextXY(5、45、 "3,5 ''"); tft.SetColor(BRIGHTRED); tft.OutTextXY(90、45、 "QVGA"); tft.SetColor(BRIGHTMAGENTA); tft.OutTextXY(230、45、 "disp。"); tft.SetColor(BRIGHTYELLOW); tft.SetFont(&FreeSans24pt7b); tft.OutTextXY(5、100、 "A R D U I N O + T F T"); tft.SetFont(NULL); for(i =0; i <7; i ++){tft.SetColor(Gray [i]); tft.OutTextXY(5、170 + 10 * i、 "TFTディスプレイでの作業のデモンストレーション。"); } PrintTotalTime(); delay(3000); ClearScreen(); // Circle Serial.print( "2)Draw circle("); total_time =millis(); tft.SetColor(BRIGHTRED); for(i =10; i > 1; i + =10){tft.DrawCirc(GetMaxX()>> 1、GetMaxY()>> 1、i); } PrintTotalTime(); delay(1000); // DrawFillCircle&DrawFillRect Serial.print( "3)Draw FillCircle and FillRect("); total_time =millis(); tft.SetColor(BRIGHTRED); tft.DrawFillCirc(GetMaxX()>> 1、GetMaxY()>> 1,110); tft.SetColor(BRIGHTCYAN); tft.DrawFillRect(GetMaxX()/ 2-77、GetMaxY()/ 2-77、GetMaxX()/ 2 + 77、GetMaxY()/ 2 + 77); tft.SetColor(BRIGHTGREEN); tft.DrawFillCirc(GetMaxX()>> 1、GetMaxY()>> 1,77); tft.SetColor(BRIGHTMAGENTA); tft.DrawFillRect(GetMaxX()/ 2-54、GetMaxY()/ 2-54、GetMaxX()/ 2 + 54、GetMaxY()/ 2 + 54); tft.SetColor(BRIGHTBLUE); tft.DrawFillCirc(GetMaxX()>> 1、GetMaxY()>> 1,54); tft.SetColor(BRIGHTYELLOW); tft.DrawFillRect(GetMaxX()/ 2-37、GetMaxY()/ 2-37、GetMaxX()/ 2 + 37、GetMaxY()/ 2 + 37); PrintTotalTime(); delay(1000); ClearScreen(); // Arc Serial.print( "4)Draw Arc("); total_time =millis(); ClearScreen(); tft.SetColor(BRIGHTBLUE); tft.DrawArc((GetMaxX()>> 1)-60、(GetMaxY()>> 1)-60、(GetMaxX()>> 1)+60、(GetMaxY()>> 1)+60,20、 30,0xFF); tft.SetColor(BRIGHTGREEN); tft.DrawArc((GetMaxX()>> 1)-40、(GetMaxY()>> 1)-40、(GetMaxX()>> 1)+40、(GetMaxY()>> 1)+40,20、 30,0xFF); tft.SetColor(BRIGHTRED); tft.DrawArc((GetMaxX()>> 1)-20、(GetMaxY()>> 1)-20、(GetMaxX()>> 1)+20、(GetMaxY()>> 1)+20,20、 30,0xFF); PrintTotalTime(); delay(1000); Serial.print( "5)Draw FillBevel("); total_time =millis(); tft.SetColor(BRIGHTBLUE); tft.DrawFillBevel((GetMaxX()>> 1)-60、(GetMaxY()>> 1)-60、(GetMaxX()>> 1)+60、(GetMaxY()>> 1)+60,30); tft.SetColor(BRIGHTGREEN); tft.DrawFillBevel((GetMaxX()>> 1)-40、(GetMaxY()>> 1)-40、(GetMaxX()>> 1)+40、(GetMaxY()>> 1)+40,30); tft.SetColor(BRIGHTRED); tft.DrawFillBevel((GetMaxX()>> 1)-20、(GetMaxY()>> 1)-20、(GetMaxX()>> 1)+20、(GetMaxY()>> 1)+20,30); PrintTotalTime(); delay(1000); ClearScreen(); Serial.print( "6)円弧を描く("); total_time =millis(); for(i =0; i <4; i ++){tft.SetColor(Color [i]); tft.DrawArc((GetMaxX()>> 1)、(GetMaxY()>> 1)-50、(GetMaxX()>> 1)、(GetMaxY()>> 1)+ 50,50,60,0x11 <> 1)、(GetMaxY()>> 1)-30、(GetMaxX()>> 1)、(GetMaxY()>> 1)+ 30,35,45,0x11 <> 1)、(GetMaxY()>> 1)、(GetMaxX()>> 1)、(GetMaxY()>> 1)、20,30,0x11 < 

いくつかのスクリーンショット:

<図> <図> <図> <図> <図>

デモ2.タッチスクリーン。

  / ******************************************* ************************************ソフトウェアとドキュメントは「現状有姿」で提供され、いかなる保証もありません*明示または黙示を問わず、商品性、権原、非侵害、および特定の*目的への適合性の保証*を含むがこれに限定されない種類。いかなる場合も、著者またはそのライセンサーは、契約、過失、無過失責任、貢献*、保証違反、またはその他の法定責任理論に基づいて責任を負わないものとします。 、*間接的、懲罰的または結果的な損害、利益の損失またはデータの損失、*代替商品、技術、サービス、または第三者による*請求(それらの防御を含むがこれに限定されない)*またはその他のSIMの調達費用。************************************************* ****************************** /#include  //ハードウェア固有のライブラリ#include  // SPIライブラリを含める#include  //タッチスクリーンライブラリを含める#include  // Adafruitを含める-GFXlibrary#include  // Adafruit fonts#include  #include  //タッチスクリーン:MOSI =11、MISO =12、SCK =13、CS =2#define CS_PIN A0XPT2046_Touchscreen ts(CS_PIN、255); YATFT tft(0); #define Y_BAR_TOP(GetMaxY()-50) #define Y_BAR_BOT GetMaxY()/ *シールドを使用する場合、すべての制御線とデータ線が固定され、オプションでより単純な宣言を使用できます。* / uint16_t pos_x [] ={0,0,0,0}; uint16_t pos_y [ ] ={0,0,0,0}; uint8_t pos_x_cnt =0; uint8_t pos_y_cnt =0; uint16_t pos_x_mid =0; uint16_t pos_y_mid =0; uint16_t color_paint =WHITE; uint8_t button =0; uint16_t 、BRIGHTGREEN、BRIGHTRED、BRIGHTYELLOW}; uint16_t Gray [7] ={GRAY0、GRAY1、GRAY2、GRAY3、GRAY4、GRAY5、GRAY6}; / ******************* ************************************************** **************************** / void ClearScreen(void){tft.SetColor(BLACK); // fone colorを設定しますtft.ClearDevice(); //すべての画面を埋めます} void setup(){Serial.begin(115200); //シリアルポートを初期化しますSerial.println( "Arduino TFT_shield Example1!"); ts.begin(); //タッチスクリーンを初期化しますSPI.end(); //正しい作業のためにSPIを無効にしますDB2(SS)pin tft.begin(); //表示を初期化しますRefreshWindow();} void loop(){uint16_t x、y; //タッチ// SSピンがOUTPUTとして設定されている場合、//汎用出力ポートとして使用できます(// SPI操作には影響しません)。 SPI.begin(); if(ts.touched()){TS_Point p =ts.getPoint(); Serial.print(F( "Pressure =")); Serial.print(p.z); Serial.print(F( "、x =")); Serial.print(p.x); Serial.print(F( "、y =")); Serial.print(p.y); Serial.println(); delay(3); // SPI.end();をフィルタリングするための遅延//正しい作業のためにSPIを無効にしますDB2(SS)ピン//コードADCから座標x、yを計算しますSerial.print(F( "Pressure =")); Serial.print(p.z); Serial.print(F( "、x =")); Serial.print(p.x); Serial.print(F( "、")); Serial.print(x); Serial.print(F( "、y =")); Serial.print(p.y); Serial.print(F( "、")); Serial.print(y); Serial.println(); if(p.x <350)p.x =350; if(p.x> 3850)p.x =3850; if(p.y <250)p.y =250; if(p.y> 3850)p.y =3850; x =(uint16_t)(320L-((uint32_t)p.x-350L)* 100L / 1094L); y =(uint16_t)(240L-((uint32_t)p.y-250L)* 100L / 1510L); //フィルタリングpos_x_mid =(pos_x [0] + pos_x [1] + pos_x [2] + pos_x [3])/ 4; pos_y_mid =(pos_y [0] + pos_y [1] + pos_y [2] + pos_y [3])/ 4; pos_x [pos_x_cnt ++] =x; pos_y [pos_y_cnt ++] =y; pos_x_cnt&=0x03; pos_y_cnt&=0x03; if(x>(pos_x_mid -10)&&x <(pos_x_mid + 10)&&y>(pos_y_mid -10)&&y <(pos_y_mid + 10)){if(y> Y_BAR_TOP &&y  

いくつかのスクリーンショット:

<図> <図> <図>

デモ3.論理ゲーム「列」。

  / ******************************************* ************************************ソフトウェアとドキュメントは「現状有姿」で提供され、いかなる保証もありません*明示または黙示を問わず、商品性、権原、非侵害、および特定の*目的への適合性の保証*を含むがこれに限定されない種類。いかなる場合も、著者またはそのライセンサーは、契約、過失、無過失責任、貢献*、保証違反、またはその他の法定責任理論に基づいて責任を負わないものとします。 、*間接的、懲罰的または結果的な損害、利益の損失またはデータの損失、*代替商品、技術、サービス、または第三者による*請求(それらの防御を含むがこれに限定されない)*またはその他のSIMの調達費用。************************************************* ****************************** /#include  #include  #include  #include  //コアグラフィックライブラリ#include  #include  #define CS_PIN A0 // MOSI =11、MISO =12、SCK =13XPT2046_Touchscreen ts (CS_PIN、255); YATFT tft(0); / *シールドを使用する場合、すべての制御ラインとデータラインが固定され、オプションでより単純な宣言をuにすることができます。 sed:* / long randNumber; #define KEY_EMPTY 0#define KEY_SWAP 1#define KEY_FALL 2#define KEY_LEFT 3#define KEY_RIGHT 4#define DISPLAY_MAX_X 320#define DISPLAY_MAX_Y 240#define MaxCol 8 #define MaxRow 17#define SmeX 3# 3#define razmer 15#define LL 250#define NumCol 6#define MaxLevel 8#define PeriodLevel 80#define DISP_LEFT((DISPLAY_MAX_X --MaxCol * razmer)/ 2-2)#define DISP_RIGHT((DISPLAY_MAX_X + MaxCol * razmer)/ 2 + 2)#define DISP_TOP((DISPLAY_MAX_Y-(MaxRow-4)* razmer)/ 2-2-10)#define DISP_BOT((DISPLAY_MAX_Y +(MaxRow-4)* razmer)/ 2 + 2-10)uint8_t MasSt [ MaxCol] [MaxRow]、MasTmp [MaxCol] [MaxRow]、MasOld [MaxCol] [MaxRow]、fignext [3]; uint8_t Level =1、OldLevel、tr、flfirst =1; uint16_t MasCol [] ={WHITE、BLACK、 BRIGHTRED、BRIGHTBLUE、BRIGHTGREEN、BRIGHTYELLOW、BRIGHTMAGENTA、BRIGHTCYAN}; u nsigned long Counter、Score =0、TScore =0、Record =0、OldRecord、OldScore、myrecord; uint16_t tempspeed; bool fl、Demo =true、myfl =false、Arbeiten =false、FlNew、FlZ =false; int8_t VAL、Mp 、x、y; int8_t mmm [4] [2] ={{-1,0}、{0、-1}、{1,0}、{0,1}}; uint16_t MasSpeed [MaxLevel] ={500,450,400,350,300,250,200,100 }; / *********************************************** ******************* / void setup(void){//シリアルポートを初期化しますSerial.begin(115200); Serial.println( "TFT_shield_Game1の例!"); ts.begin(); //タッチスクリーンを初期化しますSPI.end(); tft.begin(); //表示を初期化しますrandomSeed(analogRead(5)); tft.SetColor(WHITE); tft.ClearDevice(); tft.SetColor(RED); tft.SetFont(&FreeSerif9pt7b); tft.OutTextXY(20、20、 "LEVEL"); tft.OutTextXY(240、20、 "NEXT"); tft.OutTextXY(20、75、 "SCORE"); tft.OutTextXY(25、130、 "TOP"); FlNew =true; ViewStacan(); GetNext(); delay(100); tft.SetColor(BLACK); tft.DrawLine(DISP_LEFT + 1、DISP_TOP + 0、DISP_LEFT + 1、DISP_BOT-1); tft.DrawLine(DISP_LEFT + razmer * MaxCol + 5-MaxCol、DISP_TOP + 0、DISP_LEFT + razmer * MaxCol + 5-MaxCol、DISP_BOT-1); tft.DrawLine(DISP_LEFT + 1、DISP_BOT-1、DISP_LEFT + 1 + razmer * MaxCol + 5-MaxCol-1、DISP_BOT-1);} void loop(void){if(Demo)ProcDemo(); else {if(Arbeiten){mydelay(tempspeed); figmove(0,1); } else if(mypush()==KEY_SWAP)NewGame(); }} uint8_t mypush(void){unsigned long tpr =millis(); uint8_t res =KEY_EMPTY; uint8_tボタン=0; static uint8_t button_old; static uint8_t cnt =0;ボタン=Touch(); if(ボタン){cnt =5; Serial.print( "スキャンボタン:"); Serial.print(button、HEX); Serial.println(); if(button!=button_old){if(button&0x01)res =KEY_SWAP; if(button&0x02)res =KEY_FALL; if(button&0x04){}; if(button&0x08)res =KEY_LEFT; if(button&0x10)res =KEY_RIGHT; button_old =ボタン; }} if(!cnt){button_old =ボタン; } else {cnt--; } return(res); } void ViewQuad(uint8_t i、uint8_t j、uint8_t mycolor){if(j <3)return; uint16_t wy =DISP_TOP + SmeY +(j-3)* razmer --j; uint16_t wx =DISP_LEFT + SmeX + i * razmer-i; if(mycolor!=0){tft.SetColor(BLACK); tft.DrawRect(wx、wy、wx + razmer-1、wy + razmer-1); tft.SetColor(MasCol [mycolor]); tft.DrawFillRect(wx + 1、wy + 1、wx + 1 + razmer-3、wy + 1 + razmer-3); } else {tft.SetColor(WHITE); tft.DrawFillRect(wx + 1、wy + 0、wx + 1 + razmer-3、wy + 1 + razmer-3); }} void ViewStacan(void){char myStr2 [5]; uint8_t h =tft.GetTextHeight(&FreeMonoBoldOblique12pt7b); tft.SetFont(&FreeMonoBoldOblique12pt7b); if(OldScore!=Score || FlNew){sprintf(myStr2、 "%05d"、Score); int16_t w =tft.GetTextWidth(myStr2、&​​FreeMonoBoldOblique12pt7b); tft.SetColor(WHITE); tft.DrawFillRect(20,100,20 + w + 5,100 + h); tft.SetColor(GREEN); tft.OutTextXY(20,100、myStr2); OldScore =Score; } if(OldRecord!=Record || FlNew){sprintf(myStr2、 "%05d"、Record); int16_t w =tft.GetTextWidth(myStr2、&​​FreeMonoBoldOblique12pt7b); tft.SetColor(WHITE); tft.DrawFillRect(20,155,20 + w + 5,155 + h); tft.SetColor(GREEN); tft.OutTextXY(20,155、myStr2); OldRecord =Record; } if(OldLevel!=Level || FlNew){sprintf(myStr2、 "%01d"、Level); int16_t w =tft.GetTextWidth(myStr2、&​​FreeMonoBoldOblique12pt7b); tft.SetColor(WHITE); tft.DrawFillRect(25,45,25 + w + 5,45 + h); tft.SetColor(GREEN); tft.OutTextXY(25,45、myStr2); OldLevel =レベル; } FlNew =false; for(byte j =3; j  =0 &&ny> =0 &&nx  1 || MasTmp [i] [j]> 2)){MasTmp [nx] [ny] =3; MasTmp [i] [j] =3; } else if(mode ==3 &&MasTmp [nx] [ny] ==3){if(MasTmp [i] [j]!=3){MasTmp [i] [j] =3; fl =true; }}}} void Sos(int i、int j、byte mode){for(byte k =0; k <4; k ++)Sosed(i、j、mmm [k] [0]、mmm [k] [1 ]、モード); } bool FindFull(void){byte i、j、k; bool res; res =false; for(byte k =2; k <8; k ++){ClearMas(MasTmp); for(j =3; j  1)Sos(i、j、2); do {fl =false; for(j =3; j  0)Sos(i、j、3); } while(fl); for(j =3; j  0){ViewStacan(); FlZ =true; mydelay(500); } for(j =0; j  MaxLevel)Level =MaxLevel; } tempspeed =MasSpeed [Level-1]; }} void MyScore(void){TScore =0; while(FindFull()){if(TScore> 7)Score =Score + TScore +(TScore-8)* 2;それ以外の場合、Score =Score + TScore; ViewStacan(); FlZ =true; mydelay(1000); } FlZ =false;} void ProcDemo(void){スコア=0; GetNext(); for(byte j =3; j  MaxCol-1)return(false); if(dx!=0)if(MasSt [x + dx] [y + dy + 2] ==0)return(true);それ以外の場合はreturn(false); if(dy> 0){if(y + dy + 2> MaxRow-1 || MasSt [x + dx] [y + dy + 2]> 0){if(y <3)gameover();それ以外の場合、fff =true; } else {for(byte i =0; i <3; i ++)MasSt [x] [y + 2-i + dy] =MasSt [x] [y + 2-i]; MasSt [x] [y] =0; y =y + dy; } if(fff){MyScore(); GetNext(); } ViewStacan(); } return(true);} uint8_t Touch(void){uint16_t x、y; uint8_tボタン=0; //タッチ// SSピンがOUTPUTとして設定されている場合、//汎用出力ポートとして使用できます(// SPI操作には影響しません)。 SPI.begin(); if(ts.touched()){TS_Point p =ts.getPoint(); delay(3); // SPI.end();をフィルタリングするための遅延//コードADCから座標x、yを計算しますif(p.x <450)p.x =450; if(p.y <500)p.y =500; x =(uint16_t)(320L-((uint32_t)p.x-450L)* 10L / 106L); y =(uint16_t)(240L-((uint32_t)p.y-500L)* 10L / 140L); if(x <80){//左ボタン=0x08; } else if(x> 240){//右ボタン=0x10; } else if(y <120){//スワップボタン=0x01; } else button =0x02; //秋} SPI.end();戻るボタン;}  

いくつかのスクリーンショット:

<図> <図>

デモビデオ

続く。

ご清聴ありがとうございました!

以前の記事:

1)ArduinoUno用のユニークなTFTシールド-開始

2)ArduinoUno用のユニークなTFTシールド-OV7670Cam Live View、

3)ArduinoUno用のユニークなTFTシールド-ArduinoBluetoothカメラ(ABC)。

次の記事:

4)TFTSPIディスプレイ上の写真とRGBビデオ。

アップデート01.04.2021:

またあったね!一連の画面用に更新されたライブラリがあり、現在2つのシールドと2つのブレークアウトボードで構成されています。スケッチは、選択したバージョン(1から4)およびマイクロコントローラーのタイプ(MegaAVRまたはESP-32)に応じてコンパイルされます。写真、例を追加しました。詳細については、https://github.com/Ekaburg/EkaTFTをご覧ください。

コード

ライブラリ
https://github.com/YATFT/YATFT

製造プロセス

  1. ILI9341TFTタッチスクリーンディスプレイシールドのビットマップアニメーション
  2. Web操作のDMXコントローラー
  3. Arduino Spybot
  4. 花-ArduinoNano、CrazyCircuits、DFRobot
  5. Arduino Nano:ジョイスティックで2つのステッピングモーターを制御
  6. 開始:スタンドアロンのARduinoターミナル
  7. ArduinoNanoを搭載したハンドヘルドガイガーカウンター
  8. 学校向けのSMART温度監視
  9. Arduino用の8ビットIOポートライブラリ
  10. BLUE_P:ワイヤレスArduinoプログラミングシールド
  11. Arduino用の64キープロトタイピングキーボードマトリックス