📈
Ween's Lab
UdemyYouTubeTikTok
  • Welcome
  • 📻FPGA Tutorials
    • FPGA Boards: Getting Started
      • Getting Started with PYNQ on Kria KV260 Vision AI Starter Kit
      • Getting Started with PYNQ on Red Pitaya STEMlab 125-14
      • Getting Started with PYNQ on ZYBO
    • FPGA Ethernet Tutorial
      • FPGA Tutorial Ethernet 1: Simple TCP Server
    • PYNQ FPGA Tutorial 101
      • Part 0: Introduction
      • Part 1: GPIO
      • Part 2: Custom IP
      • Part 3: Memory
      • Part 4: ANN Processor
    • PYNQ FPGA Tutorial 102
      • Part 0: Introduction
      • Part 1: Memory Mapped
      • Part 2: Direct Memory Access
      • Part 3: AXI-Lite Multiplier
      • Part 4: AXI-Stream Multiplier with DMA
      • Part 5: AXI-Lite GCD
      • Part 6: AXI-Stream GCD with DMA
      • Part 7: Access to DDR from PL
    • ZYNQ FPGA Tutorial
      • Part 1: Gate-Level Combinational Circuit
      • Part 2: RT-Level Combinational Circuit
      • Part 3: Regular Sequential Circuit
      • Part 4: FSM Sequential Circuit
      • Part 5: ZYNQ Architecture
      • Part 6: ARM CPU and FPGA Module
      • Part 7: FPGA Memory
      • Part 8: Hardware Accelerator for Neural Networks
    • ZYNQ FPGA Linux Kernel Module
      • Cross Compiling Kernel, Kernel Module, and User Program for PYNQ
      • Configure PL to PS Interrupt in Kernel Module
      • Configure AXI DMA in Kernel Module
  • 📟Proyek Arduino
    • Kumpulan Proyek
      • Rangkaian LED
      • LED Berkedip Nyala Api
      • LED Chaser
      • LED Binary Counter
      • OLED 128x4 Bitcoin Ticker
      • Rangkaian Button
      • Button Multifungsi
      • Button Interrupt
      • Button Debouncing
    • Pelatihan Mikrokontroler Arduino ESP32
      • Bab 1 Pengenalan Mikrokontroler
      • Bab 2 Pengenalan Arduino
      • Bab 3 Pengenalan Bahasa C
      • Bab 4 Digital Output
      • Bab 5 Digital Input
      • Bab 6 Serial Communication
      • Bab 7 Analog-to-Digital Conversion
      • Bab 8 Interrupt
      • Bab 9 Timer
      • Bab 10 Pulse-Width Modulation
      • Bab 11 SPI Communication
      • Bab 12 I2C Communication
  • 💰Finance
    • Coding for Finance
      • Build a Bitcoin Price Alert with Google Cloud and Telegram
      • Build a Bitcoin Ticker with ESP32 and Arduino
      • Stock Price Forecasting with LSTM
    • Trading dan Investasi
      • Istilah Ekonomi, Keuangan, Bisnis, Trading, dan Investasi
      • Jalan Menuju Financial Abundance
      • Memahami Korelasi Emas, Oil, Dollar, BTC, Bonds, dan Saham
      • Mindset Trading dan Investasi
      • Rangkuman Buku: Rahasia Analisis Fundamental Saham
      • Rangkuman Buku: The Psychology of Money
      • Rangkuman Kuliah: Introduction to Adaptive Markets
      • Rumus Menjadi Orang Kaya
  • 📝Life
    • Life Quotes
Powered by GitBook
On this page
  • 1. Pengenalan Board
  • 2. Struktur Program
  • 3. Tipe Data
  • 4. Variable
  • 5. Operator
  • 5.1. Arithmetic Operator
  • 5.2. Comparison Operator
  • 5.3. Boolean Operator
  • 5.4. Bitwise Operator
  • 5.5. Compound Operator
  • 6. If Statement
  • 6.1. if
  • 6.2. if...else
  • 6.3. if...else if...else
  • 7. Loop Statement
  • 7.1. while
  • 7.2. do...while
  • 7.3. for
  • 8. Function
  1. Proyek Arduino
  2. Pelatihan Mikrokontroler Arduino ESP32

Bab 3 Pengenalan Bahasa C

PreviousBab 2 Pengenalan ArduinoNextBab 4 Digital Output

Last updated 1 year ago

1. Pengenalan Board

Pada bagian ini, kita akan belajar mengenai board yang akan kita gunakan yaitu DOIT ESP32 DevKit v1 seperti pada Gambar 1. Kita akan menggunakan board berbasis ESP32 karena board ini memiliki peripheral yang cukup lengkap, sudah tersedia Wi-Fi dan Bluetooth, serta harganya yang cukup terjangkau.

Berikut ini merupakan spesifikasi ESP32 yang akan kita gunakan:

  • Jumlah CPU core: 2

  • Arsitektur CPU: 32-bit

  • Clock frequency: up to 240 MHz

  • SRAM: 320 KB

  • Flash memory: 4 MB

  • Wireless connectivity: Wi-Fi 802.11 b/g/n, Bluetooth 4.2

  • Peripheral: GPIO, Timer, PWM, UART, SPI, I2C, ADC, DAC, dll.

  • Pins: 30 atau 36 tergantung versi board

  • I/O voltage: 3.3 V

Gambar 2 menampilkan pin pada board DOIT ESP32 DevKit v1 (versi 30 pins). Pin-pin pada board ini memiliki tegangan kerja 3.3 V. Pin-pin tersebut dapat dikonfigurasi sebagai output, input, atau fungsi dari peripheral seperti UART, I2C, SPI, ADC, dll. Konfigurasi tersebut dilakukan di kode yang kita buat.

2. Struktur Program

Pada bagian ini, kita akan mempelajari struktur program Arduino. Dalam pemrograman Arduino, file kode C yang buat disebut juga “sketch”. Dalam pemrograman dasar C, kita mengenal fungsi main() sebagai fungsi utama yang dipanggil, tetapi pada sketch Arduino terdiri dari dua fungsi utama yaitu setup() dan loop() seperti pada kode berikut ini.

void setup()
{
    
}

void loop()
{

}

Fungsi setup() dipanggil hanya satu kali ketika board dinyalakan atau di-reset. Fungsi ini digunakan untuk inisialisasi variable, pin, library, dll. Fungsi loop(), sesuai dengan namanya, fungsi ini akan dijalankan terus menerus sampai board dimatikan atau di-reset. Fungsi ini digunakan untuk membuat fungsionalitas dari program yang kita inginkan.

3. Tipe Data

Tipe data digunakan untuk deklarasi variable yang akan berisi data kita. Tipe data akan menentukan berapa banyak memori yang diperlukan dan bagaimana bit-bit yang tersimpan dalam memori tersebut akan diinterpretasikan.

Berikut ini merupakan tipe data yang biasa digunakan pada Arduino:

  • boolean (8 bit): logika true atau false.

  • byte (8 bit): unsigned number dari 0 sampai 255.

  • char (8 bit): signed number dari −128 sampai 127. Biasanya digunakan untuk menyimpan karakter ASCII.

  • unsigned char (8 bit): sama seperti tipe data 'byte'.

  • word (16 bit): unsigned number dari 0 sampai 65535

  • unsigned int (16 bit): sama seperti tipe data 'word'.

  • int (16 bit): signed number dari −32768 sampai 32767. Merupakan tipe data yang paling sering digunakan pada sketch Arduino.

  • unsigned long (32 bit): unsigned number dari 0 sampai 4.294.967.295. Biasanya digunakan untuk menyimpan nilai waktu dalam milliseconds dari fungsi millis().

  • long (32 bit): signed number dari −2.147.483.648 sampai 2.147.483.647.

  • float (32 bit): signed number dari −3.4028235×1038 sampai 3.4028235×1038.

Tipe signed dapat menyimpan angka positif dan negatif, tetapi tipe unsigned hanya bisa menyimpan angka positif.

4. Variable

Variable merupakan nama yang diberikan ke lokasi memori tempat menyimpan data kita. Variable kita buat dengan menentukan tipe datanya terlebih dahulu. Nama variable dapat terdiri dari huruf, angka, dan karakter underscore. Nama variable harus dimulai dari huruf atau underscore, tidak bisa dimulai dengan angka. Dalam bahasa C, huruf besar (kapital) dan huruf kecil itu dianggap berbeda (case sensitive).

Salah satu hal yang perlu dipahami saat membuat variable yaitu variable scope. Ada dua jenis variable scope yaitu local variable dan global variable. Local variable merupakan variable yang dideklarasikan di dalam sebuah fungsi. Variable tersebut hanya bisa digunakan di dalam fungsi tersebut. Contoh deklarasi local variable dapat dilihat pada kode berikut ini.

void setup()
{
    
}

void loop()
{
    int x = 1; // local variable
}

Global variable merupakan variable yang dideklarasikan di luar semua fungsi, biasanya di bagian atas program. Global variable dapat diakses dari semua fungsi. Contoh deklarasi global variable dapat dilihat pada kode berikut ini.

float f = 0.25; // global variable

void setup()
{
    
}

void loop()
{
    int i = 1; // local variable
}

5. Operator

Operator merupakan simbol yang berfungsi untuk melakukan operasi matematika atau logika. Bahasa C memiliki banyak operator yang dapat dikelompokkan menjadi beberapa bagian:

  • Arithmetic operator

  • Comparison operator

  • Boolean operator

  • Bitwise operator

  • Compound operator

5.1. Arithmetic Operator

Arithmetic operator banyak digunakan untuk membuat perhitungan matematika. Asumsikan kita memiliki dua variable, a bernilai 1 dan b bernilai 2, maka:

Operator
Nama
Penjelasan
Contoh

=

assignment

Menyimpan nilai variable sebelah kanan tanda = ke variable sebelah kiri tanda =.

a=b, maka a akan bernilai 2

+

penjumlahan

Menjumlahkan dua buah variable.

a+b, maka akan memberikan hasil 3

-

pengurangan

Mengurangkan variable pertama dengan variable kedua.

a-b, maka akan memberikan hasil −1

*

perkalian

Mengalikan dua buah variable.

a*b, maka akan memberikan hasil 2

/

pembagian

Membagi variable pertama dengan variable kedua.

a/b, maka akan memberikan hasil 0.5

%

modulo

Mencari sisa pembagian variable pertama dengan variable kedua.

a%b, maka akan memberikan hasil 1

5.2. Comparison Operator

Comparison operator banyak digunakan untuk membuat kondisi pada if atau loop statement. Asumsikan kita memiliki dua variable, a bernilai 1 dan b bernilai 2, maka:

Operator
Nama
Penjelasan
Contoh

==

sama dengan

Mengecek apakah dua buah variable bernilai sama. Jika sama maka akan memberikan hasil true.

a==b, maka akan memberikan hasil false

!=

tidak sama dengan

Mengecek apakah dua buah variable bernilai beda. Jika beda maka akan memberikan hasil true.

a!=b, maka akan memberikan hasil true

<

kurang dari

Mengecek apakah variable sebelah kiri kurang dari variable sebelah kanan. Jika ya maka akan memberikan hasil true.

a<b, maka akan memberikan hasil true

>

lebih dari

Mengecek apakah variable sebelah kiri lebih dari variable sebelah kanan. Jika ya maka akan memberikan hasil true.

a>b, maka akan memberikan hasil false

<=

kurang dari atau sama dengan

Mengecek apakah variable sebelah kiri kurang dari atau sama dengan variable sebelah kanan. Jika ya maka akan memberikan hasil true.

a<=b, maka akan memberikan hasil true

>=

lebih dari atau sama dengan

Mengecek apakah variable sebelah kiri lebih dari atau sama dengan variable sebelah kanan. Jika ya maka akan memberikan hasil true.

a>=b, maka akan memberikan hasil false

5.3. Boolean Operator

Boolean operator banyak digunakan untuk membuat kondisi pada if atau loop statement. Asumsikan kita memiliki dua variable, a bernilai 1 dan b bernilai 2, maka:

Operator
Nama
Penjelasan
Contoh

&&

and

Jika kedua variable bernilai bukan nol, maka akan memberikan hasil true.

a&&b, maka akan memberikan hasil true

||

or

Jika salah satu dari kedua variable bernilai bukan nol, maka akan memberikan hasil true.

a||b, maka akan memberikan hasil true

!

not

Untuk membalik nilai logika. Logika true menjadi false, dan sebaliknya.

!(a&&b), maka akan memberikan hasil false

5.4. Bitwise Operator

Bitwise operator banyak digunakan untuk memanipulasi bit-bit dalam sebuah variable. Asumsikan kita memiliki dua variable, a bernilai 6 dan b bernilai 12 serta jumlah bit pada kedua variable tersebut adalah 8-bit, maka:

Operator
Nama
Penjelasan
Contoh

&

bitwise and

Operasi bit and antara kedua variable.

a&b, maka akan memberikan hasil 12 atau 00001100 dalam binary

|

bitwise or

Operasi bit or antara kedua variable.

a|b, maka akan memberikan hasil 14 atau 00001110 dalam binary

^

bitwise xor

Operasi bit xor antara kedua variable.

a^b, maka akan memberikan hasil 10 atau 00001010 dalam binary

~

bitwise not

Operasi bit not dari suatu variable.

~a, maka akan memberikan hasil −7 atau 11111001 dalam binary

<<

shift left

Menggeser bit-bit ke sebelah kiri.

a<<2, maka akan memberikan hasil 24 atau 00011000 dalam binary

>>

shift right

Menggeser bit-bit ke sebelah kanan.

a>>2, maka akan memberikan hasil 1 atau 00000001 dalam binary

5.5. Compound Operator

Compound operator merupakan operator yang biasa digunakan untuk mempersingkat penulisan kode agar lebih ringkas. Asumsikan kita memiliki dua variable, a bernilai 1 dan b bernilai 2, maka:

Operator
Nama
Penjelasan
Contoh

++

increment

Menambahkan nilai integer 1 ke suatu variable.

a++ akan memberikan hasil 2. Equivalen dengan a=a+1

--

decrement

Mengurangkan nilai integer 1 dari suatu variable.

b-- akan memberikan hasil 1. Equivalen dengan b=b+1

+=

compound addition

Menjumlahkan dua buah variable, kemudian hasilnya disimpan pada variable sebelah kiri.

a+=b equivalen dengan a=a+b

-=

compound subtraction

Mengurangkan variable pertama dengan variable kedua, kemudian hasilnya disimpan pada variable sebelah kiri.

a-=b equivalen dengan a=a-b

*=

compound multiplication

Mengalikan dua buah variable, kemudian hasilnya disimpan pada variable sebelah kiri.

a*=b equivalen dengan a=a*b

/=

compound division

Membagi variable pertama dengan variable kedua, kemudian hasilnya disimpan pada variable sebelah kiri.

a/=b equivalen dengan a=a/b

%=

compound modulo

Mencari sisa pembagian variable pertama dengan variable kedua, kemudian hasilnya disimpan pada variable sebelah kiri.

a%=b equivalen dengan a=a%b

&=

compound bitwise and

Melakukan operasi bitwise and, kemudian hasilnya disimpan pada variable sebelah kiri.

a&=b equivalen dengan a=a&b

|=

compound bitwise or

Melakukan operasi bitwise or, kemudian hasilnya disimpan pada variable sebelah kiri.

a|=b equivalen dengan a=a|b

^=

compound bitwise xor

Melakukan operasi bitwise xor, kemudian hasilnya disimpan pada variable sebelah kiri.

a^=b equivalen dengan a=a^b

6. If Statement

Statement if digunakan untuk membuat keputusan berdasarkan beberapa kondisi yang mungkin terjadi. Jika salah satu kondisi tersebut terjadi, maka kode untuk kondisi tersebut akan dijalankan.

6.1. if

Statement if paling sederhana ditunjukan pada kode berikut ini. Jika expression bernilai true, maka kode di dalam blok tersebut akan dijalankan. Jika expression bernilai false, maka kode di dalam blok tersebut tidak akan dijalankan.

if (expression)
{
    // Kode dijalankan jika expression bernilai true
}

6.2. if...else

Statement if...else ditunjukan pada kode berikut ini. Jika expression bernilai true, maka kode di dalam blok if akan dijalankan. Sebaliknya, jika expression bernilai false, maka kode di dalam blok else yang akan dijalankan.

if (expression)
{
    // Kode dijalankan jika expression bernilai true
}
else
{
    // Kode dijalankan jika expression bernilai false
}

6.3. if...else if...else

Statement if...else if...else ditunjukan pada kode berikut ini. Terdapat blok untuk kondisi else if. Blok else if ini bisa terdapat lebih dari satu.

  • Jika expression_1 bernilai true, maka kode untuk blok expression_1 tersebut akan dijalankan.

  • Jika expression_2 bernilai true, maka kode untuk blok expression_2 tersebut akan dijalankan.

  • Jika expression_1 dan expression_2 bernilai false, maka kode untuk blok el yang akan dijalankan.

if (expression_1)
{
    // Kode dijalankan jika expression_1 bernilai true
}
else if (expression_2)
{
    // Kode dijalankan jika expression_2 bernilai true
}
else
{
    // Kode dijalankan jika semua expression bernilai false
}

7. Loop Statement

Loop statement berfungsi untuk melakukan perulangan dalam menjalankan suatu blok kode. Perulangan tersebut dijalankan selama kondisi bernilai true. Jika kondisi sudah bernilai false, maka perulangan akan dihentikan.

7.1. while

while statement akan menjalankan kode di dalam blok tersebut terus-menerus sampai kondisi expression bernailai false.

while (expression)
{
    // Kode terus dijalankan selama expression bernilai true
}

7.2. do...while

do...while statement mirip seperti while statement, tetapi pengecekan kondisi expression dilakukan di akhir setelah mejalankan kode blok satu kali. Sedangkan pada while statement pengecekan kondisi expression dilakukan di awal sebelum mejalankan kode blok.

do
{
    // Kode terus dijalankan selama expression bernilai true
}
while (expression)

7.3. for

for statement akan menjalankan kode blok sebanyak jumlah yang telah ditentukan. for statement berbeda dengan while dan do...while statement, karena jumlah perulangannya telah diketahui dari awal.

for (initialize; control; increment or decrement)
{
    // Kode dijalankan sebanyak jumlah yang ditentukan pada control.
}

8. Function

Function merupakan kode program yang dirancang untuk menyelesaikan suatu tugas tertentu. Function akan sangat berguna jika tugas tersebut perlu dilakukan berberapa kali di bagian kode yang berbeda, sehingga kita tidak perlu menuliskan kode tersebut berberapa kali. Kita hanya perlu menuliskan function tersebut satu kali, kemudian kita bisa panggil function tersebut berberapa kali di bagian kode yang berbeda.

return_type function_name(argument_1, argument_2, ...)
{
    // Kode program untuk menjalankan suatu tugas
}

Kode tersebut merupakan struktur dasar function pada pemrograman C yang terdiri dari:

  • function_name: merupakan nama yang kita berikan untuk mengidentifikasi function tersebut.

  • argument_1, argument_2, ...: merupakan input dari function tersebut.

  • return_type: merupakan tipe data dari output function tersebut.

Di dalam kode blok tersebut berisi kode untuk melakukan suatu tugas. Misalkan fungsi untuk menghitung luas persegi panjang, maka input-nya adalah panjang dan lebar, sedangkan output-nya adalah luas.

📟
Gambar 1. DOIT ESP32 DevKit v1
Gambar 2. Pin pada board DOIT ESP32 DevKit v1 (versi 30 pins). Sumber:
https://randomnerdtutorials.com/getting-started-with-esp32/