SINAU PROGRAMMING
SINAU PROGRAMMING
  • Home
  • Source Code
  • Social
  • CONTROL
    • Internet of Think (IoT)
    • ESP
      • NodeMcu
      • Lora
      • WeMos
      • Esp 32 Dev
      • Node 32s
    • Arduino
    • Raspberry
    • Proteus
  • MATLAB
    • MATLAB PROJECT
    • PLC
      • Omron
      • Mitsubishi
      • Siemens
      • Schneider
      • ArduinoPLC
    • Arduino
    • Basic & Doc
  • Contact Us

 



Konfigurasi pin :
Pin SDA dihubungkan ke pin D2
Pin SCL dihubungkan ke pin D1
GND dihubungkan ke GND
VCC dihubungkan ke VU atau dihubungkan ke supply eksternal

Dalam proyek ini, Anda akan menghubungkan esP8266 ke komputer lain dan mempelajari cara memprogramnya menggunakan WEB SERVICE .


Dengan Menggunakan ARDUINO IDE pemrograman tampilan sangat mudah hanya beberapa baris kode.

partikan sdh menginstall library bh1750 dan lcd i2c


#include <ESP8266WiFi.h>



const char* ssid = "Stri-X";
const char* password = "111111";
float suhu;

WiFiServer server(80);
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include <BH1750_WE.h>
#define BH1750_ADDRESS 0x23

BH1750_WE myBH1750(BH1750_ADDRESS);
// You may also pass a TwoWire object like wire2
// BH1750_WE myBH1750(&wire2, BH1750_ADDRESS);

void setup(){
  Serial.begin(9600);
  Wire.begin();
  myBH1750.init(); // sets default values: mode = CHM, measuring time factor = 1.0
  // myBH1750.setMode(CLM);  // uncomment if you want to change the default values
  // myBH1750.setMeasuringTimeFactor(0.45); // uncomment for selection of value between 0.45 and 3.68
   lcd.begin();
 lcd.clear();
 lcd.backlight();
 lcd.setCursor(3, 0);
 lcd.print("LUX meter");
 delay(1000);
 lcd.clear();
   // Connect ti WiFi netwwork
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi Connected");

  // Start the server
  server.begin();
  Serial.println("Server Started");

  // Print the IP address
  Serial.print("Use this URL to Connect: ");
  Serial.print("http://");
  Serial.print(WiFi.localIP());
  Serial.println("/");
 
}

void loop(){

WiFiClient client = server.available();
  if (!client) {
    return;
  }

  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }

  // Read the first line of the request
  String request = client.readStringUntil('\r');
  Serial.println(request);
  client.flush();



  float lightIntensity = myBH1750.getLux();
  Serial.print(F("Light intensity: "));
  Serial.print(lightIntensity);
  Serial.println(F(" Lux"));
 
  lcd.setCursor(0,0);
 
  lcd.print(lightIntensity);lcd.print("   ");lcd.setCursor(11,0);lcd.print(" LX");
  delay(50);
  client.println("HTTP/1.1 200 OK");
   client.println("Content-Type: text/html");
   client.println("Refresh: 1");
   client.println(""); // do not forget this one
   client.println("<!DOCTYPE HTML>");
   client.println("<html>");

   client.println("<center>");
   client.println("<h1>");
   client.println("Monitoring LUX");
   client.println("</h1>");
   client.println("<br>");
   client.println("<br>");
   client.println("<h3>");

   client.println("LuxMeter = ");
   client.println(lightIntensity);
   client.println(" LX ");
   client.println("<br>");
   
   client.println("</h3>");
   client.println("</center>");
   client.println("</html>");

   delay(1);
   Serial.println("Client disconnected");
   Serial.println("");
   delay(500);

}



PEMBAHASAN PROGRAM


const char* ssid = "Stri-X";
const char* password = "111111";


Merupakan ssid wifi punyamu atau hotspot portablemu agar esp8266 terhubung dengan wifi


float lightIntensity = myBH1750.getLux();


Merupakan list mengambil data lux dari sensor

 




Dalam proyek ini, Anda akan menghubungkan Raspberry Pi Pico ke komputer lain dan mempelajari cara memprogramnya menggunakan MicroPython.


Raspberry Pi Pico adalah perangkat mikrokontroler berbiaya rendah. Mikrokontroler adalah komputer kecil, tetapi mereka cenderung kekurangan penyimpanan volume besar dan perangkat periferal yang dapat Anda colokkan (misalnya, keyboard atau monitor).


Raspberry Pi Pico memiliki pin GPIO, seperti komputer Raspberry Pi, yang berarti dapat digunakan untuk mengontrol dan menerima input dari berbagai perangkat elektronik.


Dengan Menggunakan Sofware Thonny IDE pemrograman tampilan sangat mudah hanya beberapa baris kode.

from machine import Pin, Timer
led = Pin(25, Pin.OUT)
timer = Timer()
def blink(timer):
led.toggle()

timer.init(freq=2.5, mode=Timer.PERIODIC, callback=blink)


Tampilan pada thonny seperti gambar dibawah ini.


dan coba ganti lokasi pin nya dan gunakan resistor dan led

pada pin 16 

from machine import Pin, Timer
led = Pin(16, Pin.OUT)
timer = Timer()
def blink(timer):
led.toggle()

timer.init(freq=2.5, mode=Timer.PERIODIC, callback=blink)


hasilnya kira-kira seperti dibawah ini




 

 


To  convert TXT from edit text to Variable value on nextion . you need command on nextion editor

Covx

Convert variable from numeric type to text, or text to numeric type

– text must be text ASCII representation of an integer value.
– source and destination types must not be of the same type
– when source is numeric, hex format and length not 0 and <4.
ie: (len 2) positive significant (byte 0 to 3), 123 = 0000007B = 007B
ie: (len 2) negative significant (byte 3 to 0), -123 = FFFFFF85 = FF85
– value is more than allowed space results in a truncation
– it is recommended to ensure handling source length in user code before covx
– in v0.53, covx is deemed undefined if source is larger than length or
dest txt_maxl is smaller than requested length.
(some of these undefines, can be exploited)
ie: src numeric value of 123 with length 0, result is dest text “123”
– when length is fixed and value is less, leading zeros will be added
ie: src numeric value of 123 with length 4, result is dest text “0123”
– when value is larger than length, .txt truncated to least significant digits
ie: src numeric value of 23425 with length 4 result is dest text “3425”
usage: covx <src>,<dest>,<length>,<format>
    <src> is text attribute (or numeric attribute when <dest> is text)
    <dest> is numeric attribute (or text attribute when <src> is numeric)
    <length> will determine if leading zeros added to conversion to text
    <format> 0: integer, 1: Comma separated 1,000s, 2: Hex
    covx h0.val,t0.txt,0,0 // convert value of h0 into t0.txt without leading zeros
    covx t0.txt,h0.val,0,0 // convert t0.txt into integer in h0.val <length> ignored.
    covx h0.val,t0.txt,4,0 // convert value of h0 into t0.txt with exactly 4 digits
    covx h0.val,t0.txt,4,1 // convert value of h0 into t0.txt with commas
    covx h0.val,t0.txt,4,2 // convert value of h0 into t0.txt in 2 bytes of hex digits
    Invalid: covx h0.val,va0.val,0,0 or covx t0.txt,va0.txt,0,0 // src & dest same type.

Cov  

Depreciated. Convert from numeric type to text, or text to numeric type


– text must be text ASCII representation of an integer value.
– source and destination types must not be of the same type
– when length is fixed and value is less, leading zeros will be added
ie: src numeric value of 123 with length 4, result is dest text “0123”
– dest txt_maxl and length needs be large enough to accommodate conversion.
ie: src numeric value of 123 with length 0, result is dest text “123”
– when value is larger than length, .txt results in a truncation
– it is recommended to handle source length in user code before cov
    Note:v0.53 changed behaviour from previous pre/post v0.53 behaviours.
    cov is deemed undefined if source is larger than length or the dest txt_maxl is
    smaller than the requested length. Some undefines are exploitable.
    usage: cov <src>,<dest>,<length>
    <src> is text attribute (or numeric attribute when <dest> is text)
    <dest> is numeric attribute (or text attribute when <src> is numeric)
    <length> will determine if leading zeros added to conversion to text
    cov h0.val,t0.txt,0 // convert value of h0 into t0.txt without leading zeros
    cov t0.txt,h0.val,0 // convert integer into t0.txt from h0.val <length> ignored.
    cov h0.val,t0.txt,4 // convert value of h0 into t0.txt with exactly 4 digits
    Invalid: cov h0.val,va0.val,0 or cov t0.txt,va0.txt,0 // src & dest same type.

Example HMI File Nextion here 

Video Example Here 




Programming languages



Or often termed computer languages or computer programming languages, are standard instructions for governing computers. This programming language is a set of syntax and semantic rules used to define computer programs.

What is a Program Language?

Program language is a set of instructions given to the computer to be able to carry out certain tasks in solving a problem. Program language serves to command the computer so that it can process data according to the completion steps that have been determined by the programmer. This language allows a programmer to specify exactly which data will be processed by the computer, how this data will be stored/forwarded, and what kinds of steps will be taken in various situations exactly.

Program Language Functions

The main function of a programming language is as a tool to give commands to the computer so that it can move to process words according to what you want. The output of the program language itself can be in the form of an application or a special program. The development of the language of this program certainly creates various technological innovations that help people in their daily lives. For example, traffic light programs on the road, cash registers, game applications, anti-virus, web, social media, and so on.

Program Language Level

1. Low-Level Program Language

Low-level programming language contains instructions addressed to the computer using binary code (binary). The codes will be directly translated by the computer without having to go through the compilation process.

2. Intermediate Program Language (Mid-Level)

Middle-level programming languages are instructions in the form of mnemonic codes such as ADD, SUB, DIV, STOLOD, JMP and others. However, the language in this intermediate level must be translated into machine language first, because the computer only understands the use of machine language.

3. High-Level Program Language

This high-level programming language contains instructions that use natural languages that humans understand, such as English or mathematics. This level was created to overcome the shortcomings of the middle and low levels.

Program Language Example

  1. HTML/CSS: The foundation of a web program. To create a static website, you need HTML/CSS language.
  2. JavaScript: One of those languages that is quite easy to learn and can be used for anything like validating form data to developing games. JavaScript is a very popular way to add interactive features in web pages and applications.
  3. PHP: The programming language used to develop dynamic web pages. Learning PHP will be very useful for website owners because PHP can shorten the code in a web page so that it can fit into a set of rules.
  4. C++: C++ is now widely used in a wide variety of applications. C++ also has the advantage that it is easier to learn other C languages such as C# and C. All C languages are generally viewed as mid-level programming languages.

Program Language Generation

  • First Generation: Is a programming language that was first created in the 1940s and early 1950s namely Machine Language or Machine Language. Machine language is an internal computer program that performs commands directly without translation.

  • Second Generation: In this generation, computers have been used commercially and produce Assembly Language which is the successor of the first generation.

  • Third Generation: Because the use of machine language and assembly language is too difficult, then third-generation languages ​​(3GLs) are born which are considered easier to program and portable. This programming language is called a high-level programming language because it is easy to learn and there is a fairly complicated computer translation process. Examples of third generation programming languages ​​such as FORTRAN, Cobol, Pascal, Basic, etc.

  • Fourth Generation: Program languages ​​in the fourth generation are also easy to understand and learn and are suitable for accessing databases. This programming language focuses on maximizing human productivity and is available in software packages that are useful for developing desired applications. Examples such as SQL, LISP, and Prolog.

  • Fifth Generation: The programming language is Programing Language Based Object Oriented and Web Development. Often used to access databases and create expert systems or knowledge-based systems.


 

بِسْــــــــــــــــــمِ اللهِ الرَّØ­ْÙ…َÙ†ِ الرَّØ­ِÙŠْÙ…ِ

Deskripsi layar sentuh LCD TFT ILI9341.

Modul LCD TFT adalah salah satu perangkat yang paling populer di sejumlah proyek mikrokontroler terutama modul port serial, karena membutuhkan sedikit pin I/O dan penggunaannya umumnya sederhana. Dalam pembahasan kali ini mencoba menghubungkan layar sentuh LCD 2.4″ TFT dengan driver ILI9341 dengan Arduino. Modul LCD ini bukan hanya layar saja, tetapi juga tersedia slot untuk kartu SD. Lcd ini memiliki  resolusi 240 x 320 piksel untuk layar LCD TFT 2,4 inci dan menggunakan driver ILI9341. Layar menggunakan antarmuka serial dan dikendalikan oleh 5 kabel (CS, RS, SCL, SDA, RST). Kartu SD juga menggunakan antarmuka SPI perangkat keras (CS/MOSI/MISO/SCK).

Berikut adalah bagian-bagian dari LCD 2.4″ TFT SPI


Gambar  Gambar Blok Sistem LCD TFT SPI

 

Keterangan Pin :

VCC: 5V/3.3V power input

GND: Ground

CS: LCD chip select signal, low level enable

RESET: LCD reset signal, low level reset

DC: LCD register / data selection signal, high level: register, low level: data

MOSI: SPI bus write data signal

SCK: SPI bus clock signal

LED: Backlight control, high level lighting

MISO: SPI bus read data signal

T_CLK : Touch SPI bus clock signal

T_CS : Touch screen chip select signal, low level enable

T_DIN : Touch SPI bus input

T_DO : Touch SPI bus output

T_IRQ :Touch screen interrupt signal, low level when touch is detected

Menghubungkan layar TFT 2,4 ”dengan Arduino

LCD ini bisa digunakan menggunakan layer sentuh dan tidak menggunakan layer sentuh. Mari kita gunakan layar sebagai layar TFT biasa tanpa fungsi sentuh. Untuk ini kami hanya menghubungkan sembilan pin pertama dari layar.



Catatan :

Pin modul SPI LCD hanya dapat memasukkan level tinggi 3.3V, sedangkan output Arduino memiliki level tinggi 5V. Dan masalah utamanya modul tampilan LCD ini tidak toleran dengan tegangan 5V.


Masalah ini dapat diatasi dengan menghubungkan Arduino dan modul tampilan melalui modul konversi level eksternal, sehingga output Arduino level tinggi 5V diubah menjadi 3.3V oleh modul konversi level dan kemudian dimasukkan ke modul tampilan. Jika Anda tidak memiliki modul konversi seperti itu, Anda dapat menggunakan beberapa resistor 10K seperti yang ditunjukkan pada skema di bawah ini.


Gambar Skematik Arduino dan lcd TFT

Kode untuk menjalankan Tampilan TFT ILI9314.

Sejumlah library telah dikembangkan untuk memudahkan penggunaan tampilan layar sentuh LCD 2.4″ TFT ini dengan Arduino. Namun dapat ditemukan sejumlah library menarik dengan contoh yang dapat membantu pemula memahami cara kerja tampilan ini di www.lcdwiki.com.

Dari link di atas Anda bisa mendapatkan Library LCDWIKI_GUI.h, LCDWIKI_SPI.h dan LCDWIKI_TOUCH.h (https://mega.nz/folder/eqw3mKSb#Rceou1eW5L_RVeQzZN2g3w) yang penting untuk mengontrol layar sentuh LCD 2.4″ TFT menggunakan driver ILI9341. Anda dapat menggunakan contoh di bawah ini untuk menguji tampilan.

Dengan LCDWIKI_GUI.h, LCDWIKI_SPI.h dan LCDWIKI_TOUCH.h pemrograman tampilan sangat mudah hanya beberapa baris kode.

#include <LCDWIKI_GUI.h> //Core graphics library

#include <LCDWIKI_SPI.h> //Hardware-specific library

//paramters define

#define MODEL ILI9341

#define CS    A5   

#define CD    A3

#define RST   A4

#define MOSI  11

#define MISO  12

#define SCK   13

#define LED   A0   // jika Anda tidak perlu mengontrol pin LED,Anda

//harus mengaturnya ke -1 dan mengaturnya ke 3.3V

 

/*the definiens of software spi mode as follow:

if the IC model is known or the modules is unreadable,

you can use this constructedfunction*/

LCDWIKI_SPI mylcd(MODEL,CS,CD,MISO,MOSI,RST,SCK,LED); //model,cs,dc,miso,mosi,reset,sck,led

//if the IC model is not known and the modules is readable,you can use this //constructed function

//LCDWIKI_SPI mylcd(240,320,CS,CD,MISO,MOSI,RST,SCK,LED); //width,height,cs,dc,miso,mosi,reset,sck,led

 

//define some colour values

#define  BLACK  0x0000

#define BLUE    0x001F

#define RED     0xF800

#define GREEN   0x07E0

#define CYAN    0x07FF

#define MAGENTA 0xF81F

#define YELLOW  0xFFE0

#define WHITE   0xFFFF

 

//clear screen

void fill_screen_test()

{

  mylcd.Fill_Screen(BLACK); 

  mylcd.Fill_Screen(RED);

 mylcd.Fill_Screen(GREEN);

  mylcd.Fill_Screen(BLUE);

  mylcd.Fill_Screen(BLACK);

}

//display some strings

void text_test()

{

  mylcd.Set_Text_Mode(0);

  mylcd.Fill_Screen(BLACK); 

  mylcd.Set_Text_Back_colour(BLACK);

  mylcd.Set_Text_colour(WHITE);

  mylcd.Set_Text_Size(1);

  mylcd.Print_String("Hello World!",0, 0);

  mylcd.Set_Text_colour(YELLOW);

  mylcd.Set_Text_Size(2);

  mylcd.Print_Number_Float(1234.56,2,0, 8, '.',0, ' ');

 

  mylcd.Set_Text_colour(RED);

  mylcd.Set_Text_Size(3);

  //mylcd.Print_String("DEADBEEF", 0,24);

 mylcd.Print_Number_Int(0xDEADBEF, 0, 24, 0, ' ', 16);


  mylcd.Set_Text_colour(GREEN);

  mylcd.Set_Text_Size(5); 

  mylcd.Print_String("Groop", 0, 56); 

  mylcd.Set_Text_Size(2);

  mylcd.Print_String("I implore thee,", 0, 96);

 

  mylcd.Set_Text_Size(1);

mylcd.Print_String("my foonting turlingdromes.", 0, 112);

  mylcd.Print_String("And hooptiously drangle me", 0, 120);

  mylcd.Print_String("with crinkly bindlewurdles,", 0, 128);

  mylcd.Print_String("Or I will rend thee", 0, 136);

  mylcd.Print_String("in the gobberwarts", 0, 144);

  mylcd.Print_String("with my blurglecruncheon,", 0, 152);

  mylcd.Print_String("see if I don't!", 0, 160);

}


//draw some oblique lines

void lines_test(void)

{

    mylcd.Fill_Screen(BLACK);

      mylcd.Set_Draw_color(GREEN);

    int i = 0;  

    for(i = 0; i<mylcd.Get_Display_Width();i+=5)

    {

       mylcd.Draw_Line(0, 0, i,mylcd.Get_Display_Height()-1);

     }

     for(i = mylcd.Get_Display_Height()-1;i>= 0;i-=5)

     {

       mylcd.Draw_Line(0, 0,mylcd.Get_Display_Width()-1, i);

     }

     mylcd.Fill_Screen(BLACK);

 mylcd.Set_Draw_color(RED);

    for(i = mylcd.Get_Display_Width() -1;i>=0;i-=5)

    {

      mylcd.Draw_Line(mylcd.Get_Display_Width()-1, 0, i, mylcd.Get_Display_Height()-1);

     }

    for(i = mylcd.Get_Display_Height()-1;i>=0;i-=5)

    {

      mylcd.Draw_Line(mylcd.Get_Display_Width()-1,0, 0, i);

     }

     mylcd.Fill_Screen(BLACK);

      mylcd.Set_Draw_color(BLUE);

     for(i = 0; i <mylcd.Get_Display_Width();i+=5)

    {

      mylcd.Draw_Line(0, mylcd.Get_Display_Height()-1,i, 0);

     }

     for(i = 0; i <mylcd.Get_Display_Height();i+=5)

    {

      mylcd.Draw_Line(0,mylcd.Get_Display_Height()-1, mylcd.Get_Display_Width()-1, i);

     }

 

     mylcd.Fill_Screen(BLACK);

      mylcd.Set_Draw_color(YELLOW);

     for(i = mylcd.Get_Display_Width()-1; i>=0;i-=5)

    {

 mylcd.Draw_Line(mylcd.Get_Display_Width()-1,mylcd.Get_Display_Height()-1, i, 0);

     }

     for(i = 0; i<mylcd.Get_Display_Height();i+=5)

    {

      mylcd.Draw_Line(mylcd.Get_Display_Width()-1, mylcd.Get_Display_Height()-1, 0, i);

     }

}

//draw some vertical lines and horizontal lines

void h_l_lines_test(void)

{

    int i=0;

   mylcd.Fill_Screen(BLACK);

     mylcd.Set_Draw_color(GREEN);

    for(i =0;i<mylcd.Get_Display_Height();i+=5)

    {

      mylcd.Draw_Fast_HLine(0,i,mylcd.Get_Display_Width());

      delay(5);

 }

     mylcd.Set_Draw_color(BLUE);

     for(i=0;i<mylcd.Get_Display_Width();i+=5)

    {

      mylcd.Draw_Fast_VLine(i,0,mylcd.Get_Display_Height());

           delay(5);

    }

}

 

//draw some rectangles

void rectangle_test(void)

{

  int i = 0;

   mylcd.Fill_Screen(BLACK);

     mylcd.Set_Draw_color(GREEN);

   for(i =0;i<mylcd.Get_Display_Width()/2;i+=4)

   {

 mylcd.Draw_Rectangle(i,(mylcd.Get_Display_Height()-mylcd.Get_Display_Width())/2+i,mylcd.Get_Display_Width()-1-i,mylcd.Get_Display_Height()-(mylcd.Get_Display_Height()-mylcd.Get_Display_Width())/2-i); 

        delay(5);

   }

}

//draw some filled rectangles

void fill_rectangle_test(void)

{

 int i = 0;

   mylcd.Fill_Screen(BLACK);

     mylcd.Set_Draw_color(YELLOW);

   mylcd.Fill_Rectangle(0,(mylcd.Get_Display_Height()-mylcd.Get_Display_Width())/2,mylcd.Get_Display_Width()-1,mylcd.Get_Display_Height()-(mylcd.Get_Display_Height()-mylcd.Get_Display_Width())/2);

    mylcd.Set_Draw_color(MAGENTA);

   for(i =0;i<mylcd.Get_Display_Width()/2;i+=4)

   {

 mylcd.Draw_Rectangle(i,(mylcd.Get_Display_Height()-mylcd.Get_Display_Width())/2+i,mylcd.Get_Display_Width()-1-i,mylcd.Get_Display_Height()-(mylcd.Get_Display_Height()-mylcd.Get_Display_Width())/2-i); 

        delay(5);

   }

   for(i = 0;i<mylcd.Get_Display_Width()/2;i+=4)

   {

  mylcd.Set_Draw_color(random(255), random(255), random(255));

      mylcd.Fill_Rectangle(i,(mylcd.Get_Display_Height()-mylcd.Get_Display_Width())/2+i,mylcd.Get_Display_Width()-1-i,mylcd.Get_Display_Height()-(mylcd.Get_Display_Height()-mylcd.Get_Display_Width())/2-i); 

        delay(5);

   }

}

 

//draw some filled circles

void fill_circles_test(void)

{

  int r=10,i=0,j=0;

  mylcd.Fill_Screen(BLACK);

   mylcd.Set_Draw_color(MAGENTA);

  for(i=r;i<mylcd.Get_Display_Width();i+=2*r)

  {

    for(j=r;j<mylcd.Get_Display_Height();j+=2*r)

    {

 mylcd.Fill_Circle(i, j, r);

    }

  }

}

//drawsome circles

void circles_test(void)

{

  int r=10,i=0,j=0;

   mylcd.Set_Draw_color(GREEN);

  for(i=0;i<mylcd.Get_Display_Width()+r;i+=2*r)

  {

    for(j=0;j<mylcd.Get_Display_Height()+r;j+=2*r)

    {

      mylcd.Draw_Circle(i, j, r);

    }

  } 

}

//drawsome triangles

void triangles_test(void)

{

   int i = 0;

   mylcd.Fill_Screen(BLACK);

   for(i=0;i<mylcd.Get_Display_Width()/2;i+=5)

   {

 mylcd.Set_Draw_color(0,i+64,i+64);   

mylcd.Draw_Triangle(mylcd.Get_Display_Width()/2-1,mylcd.Get_Display_Height()/2-1-i,

mylcd.Get_Display_Width()/2-1-i,mylcd.Get_Display_Height()/2-1+i,                 

mylcd.Get_Display_Width()/2-1+i,mylcd.Get_Display_Height()/2-1+i);                  

   }

}

 //drawsome filled triangles

void fill_triangles_test(void)

{

   int i = 0;

   mylcd.Fill_Screen(BLACK);

 for(i=mylcd.Get_Display_Width()/2-1;i>0;i-=5)

   {

      mylcd.Set_Draw_color(0,i+64,i+64);

mylcd.Fill_Triangle(mylcd.Get_Display_Width()/2-1,mylcd.Get_Display_Height()/2-1-i,

                    mylcd.Get_Display_Width()/2-1-i,mylcd.Get_Display_Height()/2-1+i,

mylcd.Get_Display_Width()/2-1+i,mylcd.Get_Display_Height()/2-1+i);  

      mylcd.Set_Draw_color(i,0,i);     

mylcd.Draw_Triangle(mylcd.Get_Display_Width()/2-1,mylcd.Get_Display_Height()/2-1-i,

mylcd.Get_Display_Width()/2-1-i,mylcd.Get_Display_Height()/2-1+i,                 

mylcd.Get_Display_Width()/2-1+i,mylcd.Get_Display_Height()/2-1+i);                  

   }

}

 //drawsome round rectangles

void round_rectangle(void)

{

   int i = 0;

   mylcd.Fill_Screen(BLACK);

     for(i =0;i<mylcd.Get_Display_Width()/2;i+=4)

   {

       mylcd.Set_Draw_color(255-i,0,160-i);

 mylcd.Draw_Round_Rectangle(i,(mylcd.Get_Display_Height()-mylcd.Get_Display_Width())/2+i,mylcd.Get_Display_Width()-1-i,mylcd.Get_Display_Height()-(mylcd.Get_Display_Height()-mylcd.Get_Display_Width())/2-i,8);

        delay(5);

   }

}

//draw some filled round rectangles

void fill_round_rectangle(void)

{

     int i = 0;

   mylcd.Fill_Screen(BLACK);

     for(i =0;i<mylcd.Get_Display_Width()/2;i+=4)

   {

       mylcd.Set_Draw_color(255-i,160-i,0);

 mylcd.Fill_Round_Rectangle(i,(mylcd.Get_Display_Height()-mylcd.Get_Display_Width())/2+i,mylcd.Get_Display_Width()-1-i,mylcd.Get_Display_Height()-(mylcd.Get_Display_Height()-mylcd.Get_Display_Width())/2-i,8);

        delay(5);

   }

}

void setup()

{

  mylcd.Init_LCD();

  fill_screen_test();

  delay(500);

  text_test();

  delay(500);

  lines_test();

  delay(500);

  h_l_lines_test();

  delay(500);

  rectangle_test();

  delay(500);

  fill_rectangle_test();

  delay(500);

  fill_circles_test();

  delay(500);

  circles_test();

  delay(500);

  triangles_test();

 delay(500);

  fill_triangles_test();

  delay(500);

   round_rectangle();

   delay(500);

   fill_round_rectangle();

   delay(3000);

}

void loop()

{

 //rotate for four directions atau sudut vertical horisontal lcd 0-4

 for(uint8_t rotation=0; rotation<4;rotation++)

 {

    mylcd.Set_Rotation(rotation);

    text_test();

    delay(2000);

 }

}


hasilnya kira-kira seperti dibawah ini

Menggunakan fungsionalitas sentuh layar TFT ILI9341 2,4″.

Untuk dapat menggunakan fungsionalitas sentuh pada layar, kami menghubungkan lima pin yang tersisa sesuai dengan diagram skema di bawah ini.


Gambar Skema LCD Touch TFT dengan Arduino

Kita dapat menggunakan kode di bawah ini untuk menguji fungsionalitas sentuh. Ketika kode ini diunggah ke Arduino, kita dapat menggunakan pena sentuh untuk menulis di layar menggunakan teks dengan warna dan ketebalan yang berbeda.

Kode untuk menggunakan fungsionalitas Sentuh dari ILI9341 TFT Display.

#include <LCDWIKI_GUI.h> //Core graphics library
#include <LCDWIKI_SPI.h> //Hardware-specific library
#include <LCDWIKI_TOUCH.h> //touch screen library
//paramters define
#define MODEL ILI9341
#define CS   A5    
#define CD   A3
#define RST  A4
#define MOSI  11
#define MISO  12
#define SCK   13
#define LED  A0   //if you don't need to control the LED pin,you should set it to -1 and set it to 3.3V
 
//touch screen paramters define
#define TCS   2
#define TCLK  3
#define TDOUT 4
#define TDIN  5
#define TIRQ  6
 
//the definiens of software spi mode as follow:
//if the IC model is known or the modules is unreadable,you can use this constructed function
LCDWIKI_SPI my_lcd(MODEL,CS,CD,MISO,MOSI,RST,SCK,LED); //model,cs,dc,miso,mosi,reset,sck,led
//if the IC model is not known and the modules is readable,you can use this constructed function
//LCDWIKI_SPI my_lcd(240,320,CS,CD,MISO,MOSI,RST,SCK,LED); //width,height,cs,dc,miso,mosi,reset,sck,led
 
//the definiens of touch mode as follow:
LCDWIKI_TOUCH my_touch(TCS,TCLK,TDOUT,TDIN,TIRQ); //tcs,tclk,tdout,tdin,tirq
 
#define  BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
uint16_t color_mask[] = {0xF800,0xFFE0,0x07E0,0x07FF,0x001F,0xF81F}; //color select
 
#define COLORBOXSIZE my_lcd.Get_Display_Width()/6
#define PENBOXSIZE my_lcd.Get_Display_Width()/4
 
int16_t old_color, current_color,flag_colour;
int16_t old_pen,current_pen,flag_pen;
boolean show_flag = true;
 
void show_string(uint8_t *str,int16_t x,int16_t y,uint8_t csize,uint16_t fc, uint16_t bc,boolean mode)
{
    my_lcd.Set_Text_Mode(mode);
    my_lcd.Set_Text_Size(csize);
    my_lcd.Set_Text_colour(fc);
    my_lcd.Set_Text_Back_colour(bc);
    my_lcd.Print_String(str,x,y);
}
 
//show color select menu
void show_color_select_menu(void)
{
   uint16_t i;
   for(i = 0;i<6;i++)
   {
       my_lcd.Set_Draw_color(color_mask[i]);
       my_lcd.Fill_Rectangle(i*COLORBOXSIZE, 0, (i+1)*COLORBOXSIZE-1, COLORBOXSIZE/2-1);
   }  
   my_lcd.Set_Draw_color(GREEN);
   my_lcd.Fill_Round_Rectangle((my_lcd.Get_Display_Width()-20)/3+10, COLORBOXSIZE/2+2, (my_lcd.Get_Display_Width()-20)/3*2+10,COLORBOXSIZE/2+20, 5);
 show_string("OK",CENTER,COLORBOXSIZE/2+4,2,RED, BLACK,1);
}
 
//show pen size select menu
void show_pen_size_select_menu(void)
{
  uint16_t i;
  my_lcd.Set_Text_Mode(1);
  my_lcd.Set_Text_Size(2);
  my_lcd.Set_Text_colour(GREEN);
  my_lcd.Set_Text_Back_colour(BLACK);
  for(i = 0;i<4;i++)
  {
      my_lcd.Print_Number_Int(i+1, 5+PENBOXSIZE*i, (COLORBOXSIZE/2-16)/2, 0, ' ',10);
      my_lcd.Set_Draw_color(RED);
      my_lcd.Fill_Rectangle(25+PENBOXSIZE*i, COLORBOXSIZE/2/2-i, PENBOXSIZE*(i+1)-10,
COLORBOXSIZE/2/2+i);
  }
   my_lcd.Set_Draw_color(GREEN);
   my_lcd.Fill_Round_Rectangle((my_lcd.Get_Display_Width()-20)/3+10, COLORBOXSIZE/2+2, (my_lcd.Get_Display_Width()-20)/3*2+10,COLORBOXSIZE/2+20, 5);
   show_string("OK",CENTER,COLORBOXSIZE/2+4,2,RED, BLACK,1);
}
 
//show main menu
void show_main_menu(void)
{
   my_lcd.Set_Draw_color(YELLOW);
   my_lcd.Fill_Round_Rectangle(5, 0, (my_lcd.Get_Display_Width()-20)/3+5,COLORBOXSIZE/2+20, 5);
 my_lcd.Fill_Round_Rectangle((my_lcd.Get_Display_Width()-20)/3*2+15, 0, (my_lcd.Get_Display_Width()-20)/3*3+15,COLORBOXSIZE/2+20, 5);
   my_lcd.Set_Draw_color(MAGENTA);
   my_lcd.Fill_Round_Rectangle((my_lcd.Get_Display_Width()-20)/3+10, 0, (my_lcd.Get_Display_Width()-20)/3*2+10,COLORBOXSIZE/2+20, 5);
   show_string("COLOUR",8+((my_lcd.Get_Display_Width()-20)/3-72)/2-1,((COLORBOXSIZE/2+20)-16)/2,2,BLUE, BLACK,1);
   show_string("CLEAR",(my_lcd.Get_Display_Width()-20)/3+10+((my_lcd.Get_Display_Width()-20)/3-60)/2-1,((COLORBOXSIZE/2+20)-16)/2,2,WHITE, BLACK,1);
show_string("PEN",(my_lcd.Get_Display_Width()-20)/3*2+15+((my_lcd.Get_Display_Width()-20)/3-36)/2-1,((COLORBOXSIZE/2+20)-16)/2,2,BLUE, BLACK,1);
 }
 
void setup(void) 
{
  my_lcd.Init_LCD();
  my_lcd.Set_Rotation(0); 
  my_touch.TP_Set_Rotation(2);
  my_touch.TP_Init(my_lcd.Get_Rotation(),my_lcd.Get_Display_Width(),my_lcd.Get_Display_Height()); 
  my_lcd.Fill_Screen(BLACK);
  show_main_menu();
  current_color = RED;
  current_pen = 0;
}
 
void loop()
{
comme:
  my_touch.TP_Scan(0);
 if (my_touch.TP_Get_State()&TP_PRES_DOWN) 
  {
         if(my_touch.y< COLORBOXSIZE/2+20) 
         {
              if(((my_touch.x>5)&&(my_touch.x < ((my_lcd.Get_Display_Width()-20)/3+5)))&&!flag_pen) //select color
              {
                flag_colour = 1;
                if(show_flag)
                {
 my_lcd.Set_Draw_color(BLACK);
                    my_lcd.Fill_Rectangle(0,0,my_lcd.Get_Display_Width()-1,COLORBOXSIZE/2+20);
                    show_color_select_menu();
                }
                show_flag = false;
                switch(current_color)
                {
                  case RED:
                  {
                    my_lcd.Set_Draw_color(WHITE);
                    my_lcd.Draw_Rectangle(0, 0, COLORBOXSIZE-1, COLORBOXSIZE/2-1);
                    break;  
                  }
 case YELLOW:
                  {
                       my_lcd.Set_Draw_color(WHITE);
                       my_lcd.Draw_Rectangle(COLORBOXSIZE, 0, 2*COLORBOXSIZE-1, COLORBOXSIZE/2-1);
                       break; 
                  }
                  case GREEN:
                  {
                       my_lcd.Set_Draw_color(WHITE);
                       my_lcd.Draw_Rectangle(2*COLORBOXSIZE, 0, 3*COLORBOXSIZE-1, COLORBOXSIZE/2-1);
break; 
                   }
                  case CYAN:
                  {
                       my_lcd.Set_Draw_color(WHITE);
                       my_lcd.Draw_Rectangle(3*COLORBOXSIZE, 0, 4*COLORBOXSIZE-1, COLORBOXSIZE/2-1);
                       break;                 
                  }
                  case BLUE:
                  {
                       my_lcd.Set_Draw_color(WHITE);
my_lcd.Draw_Rectangle(4*COLORBOXSIZE, 0, 5*COLORBOXSIZE-1, COLORBOXSIZE/2-1);
                       break;   
                  }
                  case MAGENTA:  
                  {
                       my_lcd.Set_Draw_color(WHITE);
                       my_lcd.Draw_Rectangle(5*COLORBOXSIZE, 0, 6*COLORBOXSIZE-1, COLORBOXSIZE/2-1);
                       break;   
                  }
                  default:
                      break;
                }
             }
             if(flag_colour)
             {
  if(my_touch.y < COLORBOXSIZE/2)
                 {
                    old_color = current_color;
                    if (my_touch.x < COLORBOXSIZE) 
                    { 
                        current_color = RED; 
                        my_lcd.Set_Draw_color(WHITE);
                        my_lcd.Draw_Rectangle(0, 0, COLORBOXSIZE-1, COLORBOXSIZE/2-1);
                    } 
                    else if (my_touch.x <
COLORBOXSIZE*2) 
                    {
                        current_color = YELLOW;
                        my_lcd.Set_Draw_color(WHITE);
                        my_lcd.Draw_Rectangle(COLORBOXSIZE, 0, 2*COLORBOXSIZE-1, COLORBOXSIZE/2-1);
                    } 
                    else if (my_touch.x < COLORBOXSIZE*3) 
                    {
                        current_color = GREEN;
                        my_lcd.Set_Draw_color(WHITE);
                       
my_lcd.Draw_Rectangle(2*COLORBOXSIZE, 0, 3*COLORBOXSIZE-1, COLORBOXSIZE/2-1);
                    } 
                    else if (my_touch.x < COLORBOXSIZE*4) 
                    {
                        current_color = CYAN;
                        my_lcd.Set_Draw_color(WHITE);
                        my_lcd.Draw_Rectangle(3*COLORBOXSIZE, 0, 4*COLORBOXSIZE-1, COLORBOXSIZE/2-1);
                    } 
                    else if (my_touch.x <
COLORBOXSIZE*5) 
                    {
                        current_color = BLUE;
                        my_lcd.Set_Draw_color(WHITE);
                        my_lcd.Draw_Rectangle(4*COLORBOXSIZE, 0, 5*COLORBOXSIZE-1, COLORBOXSIZE/2-1);
                    } 
                    else if (my_touch.x < COLORBOXSIZE*6) 
                    {
                        current_color = MAGENTA;
                        my_lcd.Set_Draw_color(WHITE);
                       
my_lcd.Draw_Rectangle(5*COLORBOXSIZE, 0, 6*COLORBOXSIZE-1, COLORBOXSIZE/2-1);
                    }
                    if(old_color != current_color)
                    {
                        switch(old_color)
                        {
                            case RED:
                            {
                              my_lcd.Set_Draw_color(RED);
                              my_lcd.Draw_Rectangle(0, 0, COLORBOXSIZE-1, COLORBOXSIZE/2-1);
                         
 break;  
                            }
                            case YELLOW:
                            {
                                 my_lcd.Set_Draw_color(YELLOW);
                                 my_lcd.Draw_Rectangle(COLORBOXSIZE, 0, 2*COLORBOXSIZE-1, COLORBOXSIZE/2-1);
                                 break; 
                            }
                            case GREEN:
                            {
                                 my_lcd.Set_Draw_color(GREEN);
                   my_lcd.Draw_Rectangle(2*COLORBOXSIZE, 0, 3*COLORBOXSIZE-1, COLORBOXSIZE/2-1);
                                 break; 
                             }
                            case CYAN:
                            {
                                 my_lcd.Set_Draw_color(CYAN);
                                 my_lcd.Draw_Rectangle(3*COLORBOXSIZE, 0, 4*COLORBOXSIZE-1, COLORBOXSIZE/2-1);
                                 break;
                
                            }
                            case BLUE:
                            {
                                 my_lcd.Set_Draw_color(BLUE);
                                 my_lcd.Draw_Rectangle(4*COLORBOXSIZE, 0, 5*COLORBOXSIZE-1, COLORBOXSIZE/2-1);
                                 break;   
                            }
                            case MAGENTA:  
                            {
                                 my_lcd.Set_Draw_color(MAGENTA);
                     my_lcd.Draw_Rectangle(5*COLORBOXSIZE, 0, 6*COLORBOXSIZE-1, COLORBOXSIZE/2-1);
                                 break;   
                            }
                            default:
                                break;                        
                        }
                    }
                }
                else if(my_touch.y< COLORBOXSIZE/2+20)
                {
    if((my_touch.x>(my_lcd.Get_Display_Width()-20)/3+10)&&(my_touch.x<(my_lcd.Get_Display_Width()-20)/3*2+10))
                     {
                         my_lcd.Set_Draw_color(BLACK);
                         my_lcd.Fill_Rectangle(0,0,my_lcd.Get_Display_Width()-1,COLORBOXSIZE/2+20);
                         show_main_menu();
                         flag_colour = 0;
                         show_flag = true;
                         goto comme;
                     }
 }
            }
            if((my_touch.x>((my_lcd.Get_Display_Width()-20)/3*2+15))&&(my_touch.x < (((my_lcd.Get_Display_Width()-20)/3*3+15)))&&!flag_colour) //select pen size
            {
                flag_pen = 1;
                if(show_flag)
                {
                    my_lcd.Set_Draw_color(BLACK);
                    my_lcd.Fill_Rectangle(0,0,my_lcd.Get_Display_Width()-1,COLORBOXSIZE/2+20);
        show_pen_size_select_menu();
                }
                show_flag = false;
                switch(current_pen)
                {
                   case 0:
                   {
                       my_lcd.Set_Draw_color(WHITE);
                       my_lcd.Draw_Rectangle(0, 0, PENBOXSIZE-1, COLORBOXSIZE/2-1);
                       break;
                   }
                   case 1:
                   {
                       my_lcd.Set_Draw_color(WHITE);
            my_lcd.Draw_Rectangle(PENBOXSIZE, 0, 2*PENBOXSIZE-1, COLORBOXSIZE/2-1);
                       break; 
                   }
                   case 2:
                   {
                       my_lcd.Set_Draw_color(WHITE);
                       my_lcd.Draw_Rectangle(2*PENBOXSIZE, 0, 3*PENBOXSIZE-1, COLORBOXSIZE/2-1);
                       break;   
                   }
                   case 3:  
                   {
                      
my_lcd.Set_Draw_color(WHITE);
                       my_lcd.Draw_Rectangle(3*PENBOXSIZE, 0, 4*PENBOXSIZE-1, COLORBOXSIZE/2-1);
                       break;                
                   }
                   default:
                       break;
                  }              
              }
              if(flag_pen)
              {
                   if(my_touch.y < COLORBOXSIZE/2)
                   {
                      old_pen = current_pen;
  if(my_touch.x < PENBOXSIZE)
                      {
                          current_pen = 0;
                          my_lcd.Set_Draw_color(WHITE);
                          my_lcd.Draw_Rectangle(0, 0, PENBOXSIZE-1, COLORBOXSIZE/2-1);
                      }
                      else if(my_touch.x < 2*PENBOXSIZE)
                      {
                          current_pen = 1;
                          my_lcd.Set_Draw_color(WHITE);
                         
my_lcd.Draw_Rectangle(PENBOXSIZE, 0, 2*PENBOXSIZE-1, COLORBOXSIZE/2-1);
                       }
                       else if(my_touch.x < 3*PENBOXSIZE) 
                       {
                           current_pen = 2;
                           my_lcd.Set_Draw_color(WHITE);
                           my_lcd.Draw_Rectangle(2*PENBOXSIZE, 0, 3*PENBOXSIZE-1, COLORBOXSIZE/2-1);
                       }
                       else if(my_touch.x < 4*PENBOXSIZE)
                       {
              current_pen = 3;
                           my_lcd.Set_Draw_color(WHITE);
                           my_lcd.Draw_Rectangle(3*PENBOXSIZE, 0, 4*PENBOXSIZE-1, COLORBOXSIZE/2-1);               
                       }
                       if(old_pen != current_pen)
                       {
                           switch(old_pen)
                           {
                                 case 0:
                                 {
                                    
my_lcd.Set_Draw_color(BLACK);
                                     my_lcd.Draw_Rectangle(0, 0, PENBOXSIZE-1, COLORBOXSIZE/2-1);
                                     break;
                                 }
                                 case 1:
                                 {
                                     my_lcd.Set_Draw_color(BLACK);
                                     my_lcd.Draw_Rectangle(PENBOXSIZE, 0, 2*PENBOXSIZE-1, COLORBOXSIZE/2-1);
                         break; 
                                 }
                                 case 2:
                                 {
                                     my_lcd.Set_Draw_color(BLACK);
                                     my_lcd.Draw_Rectangle(2*PENBOXSIZE, 0, 3*PENBOXSIZE-1, COLORBOXSIZE/2-1);
                                     break;   
                                 }
                                 case 3:  
                                 {
                         my_lcd.Set_Draw_color(BLACK);
                                     my_lcd.Draw_Rectangle(3*PENBOXSIZE, 0, 4*PENBOXSIZE-1, COLORBOXSIZE/2-1);
                                     break;                
                                 }
                                 default:
                                     break;           
                           }      
                       }
                   }
                   else if(my_touch.y <
COLORBOXSIZE/2+20)
                   {
                       if((my_touch.x>(my_lcd.Get_Display_Width()-20)/3+10)&&(my_touch.x<(my_lcd.Get_Display_Width()-20)/3*2+10))
                       {
                          my_lcd.Set_Draw_color(BLACK);
                          my_lcd.Fill_Rectangle(0,0,my_lcd.Get_Display_Width()-1,COLORBOXSIZE/2+20);
                          show_main_menu();
                          flag_pen = 0;
                          show_flag = true;
              goto comme;
                       }  
                   }
              }
              if(((my_touch.x>((my_lcd.Get_Display_Width()-20)/3+10))&&(my_touch.x < ((my_lcd.Get_Display_Width()-20)/3*2+10)))&&!flag_colour&&!flag_pen) 
              {
                  my_lcd.Set_Draw_color(BLACK);  
                  my_lcd.Fill_Rectangle(0,COLORBOXSIZE/2+21,my_lcd.Get_Display_Width()-1,my_lcd.Get_Display_Height()-1);
              }
         }
if (((my_touch.y-current_pen) > COLORBOXSIZE/2+20) && ((my_touch.y+current_pen) < my_lcd.Get_Display_Height()))  //drawing
      {
        my_lcd.Set_Draw_color(current_color);
        my_lcd.Fill_Circle(my_touch.x,  my_touch.y,current_pen);
    }
  }
}


Newer Posts Older Posts Home





POPULAR POSTS

  • Skema Power Supply Switching SMPS
  • Proteus 8.5 Full Version Professional
  • Serial Communication UART Raspberry Pico (SoftSerial)
  • Artificial Neural Network for Identification MATLAB
  • Tutorial ILI9341 TFT SPI LCD touch Screen
  • Pulse Oxymetry (SPO2) + Raspberry Pi
  • Menampilkan Text Pada LCD 16x2 I2C Arduino

ABOUT ME

cobabaru

Sinau Programming

SUBSCRIBE & FOLLOW

Training


Contact Form

Name

Email *

Message *

Categories

  • alkes 1
  • Android 3
  • Arduino 35
  • Basic & Doc 12
  • centrifuge 1
  • ESP32 8
  • Internet of Things (IoT) 23
  • LCD TFT SPI 2
  • MATLAB 6
  • Metode kendali 1
  • Modul Charger 1
  • Nextion 4
  • NodeMcu 8
  • oled 1
  • Pattern Recognition 2
  • Perbaikan 1
  • PID 2
  • PLC HMI VTSCADA ARDUINO 3
  • PRIVACY POLICY 1
  • Proteus 11
  • Python 1
  • raspberry 5
  • Teknik Elektromedik 2
  • Thingsboard 1
  • Video 5
  • Wemos 4

sinau_programming

Sinau Programming Distributed by Sinau Programming