Anda di halaman 1dari 22

BAB IV

HASIL DAN PEMBAHASAN

4.1 Skrip program dan penjelasan

Praktek 1 : Menghidupkan LED dan Buzzer Aktif ketika tombol


ditekan

Skenario : Ketika tombol ditekan maka LED dan Buzzer akan hidup; LED

& Buzzer akan mati ketika tombol dilepaskan.

Gambar 4.1 hasil percobaan pertama

Skrip program percobaan pertama sebagai berikut :

1 const int BUZZER_PIN = 32;


2 const int BUTTON_PIN = 4;
3 const int LED_PIN = 2;
4
5 int buttonRead = 0;
6
7 void setup() {
8 Serial.begin(115200);
9 Serial.println(“Memulai Program...”);
10 Serial.println();
11 pinMode(LED_PIN, OUTPUT);
12 pinMode(BUZZER_PIN, OUTPUT);
13 pinMode(BUTTON_PIN, INPUT);
14 }
15
16 void loop() {
17 buttonRead = digitalRead(BUTTON_PIN);
18 if(buttonRead == HIGH){
19 Serial.println(“Tombol Ditekan”);
20 digitalWrite(LED_PIN, HIGH);
21 digitalWrite(BUZZER_PIN, HIGH);
22 }else{
23 digitalWrite(LED_PIN, LOW);
24 digitalWrite(BUZZER_PIN, LOW);
25 Serial.println(“Tombol Dilepas”);
26 delay(20);
27 }
28 }
Penjelasan skrip program percobaan pertama sebagai berikut :

1 const int BUZZER_PIN= 32;

BUZZER_PIN menyatakan nama konstanta untuk buzzer yang menggunakan Pin


32 pada ESP32. Const menyatakan konstanta dan int menyatakan tipe data untuk
konstanta tersebut adalah bilangan bulat.

2 const int BUTTON_PIN= 4;

BUTTON_PIN menyatakan nama konstanta untuk tombol yang menggunakan Pin 4


pada ESP32. Const menyatakan konstanta dan int menyatakan tipe data untuk
konstanta tersebut adalah bilangan bulat.

3 const int LED_PIN= 2;

LED_PIN menyatakan nama konstanta untuk LED yang menggunakan Pin 2


pada ESP32. Const menyatakan konstanta dan int menyatakan tipe data untuk
konstanta tersebut adalah bilangan bulat.
5 int buttonRead= 0;

buttonRead menyatakan nama variable yang akan menyimpan nilai sementara


ketika ESP32 membaca kondisi tombol ditekan atau tidak, jika tombol dalam keadaan
ditekan maka nilai 1 akan disimpan pada variable ini, sedangkan ketika tombol tidak
dalam keadaan ditekan atau dilepaskan maka nilai 0 akan disimpan kembali pada
variabel ini.

7 void setup() {
…..
14 }

Fungsi setup() merupakan salah satu dari 2 fungsi yang wajib ada pada program
Arduino IDE. Variable void merupakan tipe data khusus yang menunjukkan tidak ada data
yang di-return atau yang akan dikembalikan setelah fungsi dieksekusi. Fungsi setup()
hanya dijalan sekali ketika program pertama kali dijalankan. Biasanya fungsi setup() ini
digunakan untuk mengeksekusi baris perintah yang hanya dibutuhkan ketika program
pertama kali dijalankan seperti untuk pengaturan kecepatan data dalam bit per detik
(baud) untuk transmisi data serial) menggunakan fungsi Serial.begin(), pin mode (input
atau Output), menginisialisasi variabel, memulai menggunakan perpustakaan (library),
dll.

8 Serial.begin(115200);

Serial.begin(speed) berfungsi untuk pengaturan kecepatan data dalam bit per


detik (baud) untuk transmisi data serial, speed menujukkan angka kecepatan data
dalam bit per detik (baud), nilai speed yang biasa atau

dapat digunakan pada ESP32 sperti 115200, 921600, 25600, 230400, 51200. Nilai
speed padaserial monitor harus di atur sama dengan nilai speed yang telah diatur pada
perintah Serial.begin().

9 Serial.println("Memulai Program ... ");


Perintah Serial.println(“Memulai Program…”) pada baris kode ke 9 ini berfungsi
untuk menampilakn tulisan “Memulai Program…” dan baris baru pada Serial Monitor.

10 Serial.println();

Perintah Serial.println() pada baris kode ke 10 ini berfungsi untuk menampilakn


baris baru tambahan tanpa text pada Serial Monitor.

11 pinMode(LED_PIN,OUTPUT);
12 pinMode(BUZZER_PIN,OUTPUT); pinMode(BUTTON_PIN,INPUT);
13

Perintah pinMode(pin, Mode) berfungsi untuk mengkonfigurasi pin yang


terdapat pada mikrokontroler apakah berjenis/mode INPUT atau OUTPUT. Perintah
pinMode() pada baris kode ke-11 menujukkan bahwa pin yang memilki nama
konstanta LED_PIN yang bernilai 2 (pin D2 pada mikrkontroler) yang telah diatur
sebelumnya pada baris kode ke-3 berjenis/mode OUTPUT. Pada baris kode ke-12
menujukkan bahwa pin yang memilki nama konstanta BUZZER_PIN yang bernilai 32
(pin D32 pada mikrkontroler) yang telah diatur sebelumnya pada baris kode ke-1
berjenis/mode OUTPUT, dan pada baris kode ke-13 menujukkan bahwa pin yang memilki
nama konstanta BUTTON_PIN yang bernilai 4 (pin D4 pada mikrkontroler) yang telah
diatur sebelumnya pada baris kode ke-2 berjenis/mode INPUT.

16 Void loop() {
…..
28 }

Fungsi loop() merupakan fungsi kedua dari 2 fungsi yang wajib ada pada
program Arduino IDE. fungsi ini dijalan setah fungsi setup()

dijalankan. Fungsi loop() melakukan persis seperti namanya yaitu melakukan loop
atau perulangan. Fungsi ini melakukan perulangan secara berurutan sehingga
memungkinkan program yang ditulis merespon setiap perubahan yang terjadi pada pin
input dan menghasilkan perubahan pada pin output seperti membaca sinyal atau nilai
yang dibaca oleh pin input, mengolah nilai tersebut dan mengngirimkan sinyal kepada
pin output secara berulang dan terus menerus. Contoh: perintah untuk membaca nilai
digital dari tombol (apakah ditekan atau tidak) setiap saat ditulis pada fungsi loop() ini,
atau untuk menampilkan nilai yang berubah secara realtime pada layar LCD. Juga ditulis
pada fungsi ini.

17 buttonRead= digitalRead(BUTTON_PIN);

Pada baris kode ke 17 ini, dilakukan proses pembacaan nilai pada pin tombol.
Jika tombol ditekan maka perintah digitalRead(pin) akan membaca nilai 1 (HIGH) pada
pin tersebut dan disimpan pada variabel buttonRead dengan nilai 1 (HIGH) pada saat
perulangan pada loop() terjadi. Jika tombol dalam keadaan tidak ditekan maka fungsi
digitalRead(pin) akan akan membaca nilai digital 0 (LOW) dan menyimpannya kedalam
variable buttonRead sehingga nilai pada variable buttonRead berubah menjadi 0 (LOW).
Nilai variabel buttonRead akan di test menggunakan fungsi if(buttonRead == HIGH)
seperti pada baris kode ke-18 untuk mengetahui apakah tombol dalam keadaan
ditekan atau tidak. Jika buttonRead bernilai 1 (HIGH) dan sama dengan (“== ”) HIGH
maka if akan bernilai true. Jika if bernilai true ia akan mengeksekusi baris kode ke-19
hingga 21. Jika sebaliknya, ketika kondisi tombol tidak ditekan maka variable
buttonRead akan bernilai 0 (LOW), maka program akan mengeksekusi perintah yang
terdapat didalam fungsi else ( baris kode ke-23 hingga 26).

18 if(buttonRead== HIGH){ Serial.println("Tombol Ditekan");


19 digitalWrite(LED_PIN,HIGH); digitalWrite(BUZZER_PIN,HIGH);
20 }else{
21 digitalWrite(LED_PIN,LOW);
22
23
24 digitalWrite(BUZZER_PIN, LOW); Serial.println("Tombol Dilepas"); delay(20);
25 }
26
27

Perintah digitalWrite(pin, value) pada baris kode ke-20,21,23,24 merupakan


perintah untuk memberi kepada boar mikrkontroler untuk mengirim value/nilai (HIGH
atau LOW) ke pin digital yang telah ditentukan. Jika pin telah dikonfigurasi sebagai OUTPUT
dengan menggunakan perintah pinMode() pada fungsi setup(), tegangannya akan diatur ke
nilai yang sesuai: 5V atau 3.3V untuk HIGH, 0V (ground) untuk LOW. Perintah
digitalWrite(LED_PIN,HIGH) pada baris kode ke-20 untuk mengirim sinyal pada pin LED yang
terdapat bada board ESP32 sebesar 3,3V sehingga LED akan menyala karena dialiri arus
dengna tegangan sebesar 3,3V. begitu juga pada baris ke 21, perintah
digitalWrite(BUZZER_PIN,HIGH) akan membuat buzzer akan mengeluakan bunyi karena
diberi arus dengan tegangan 3,3V pada pin buzzer. Sebaliknya jika pin LED atau buzzer
dikirm sinyal LOW seperti pada baris kode ke 23 dan 24, maka mikrokontroler akan
mengirim sinyal sebesar 0V, sehingga tidak ada arus yang mengalir pada kedua pin
tersebut yang menyebabkan LED dan buzzer menjadi tidak hidup dan berbunyi.

Berikut ini skrip program percobaan kedua sebagai berikut :

Gambar 4.2 hasil percobaan kedua


Praktek 2

: Menghidup dan Mematikan LED dan Buzzer Pasif yang akan


mengeluarkan nada ringtone dengan 1 Tombol

Skenario :

1. Ganti Buzzer Aktif dengan Buzzer Pasif


2. Ketika tombol pertama kali ditekan akan
menghidupkan LED dan Buzzer pasif akan
mengeluarkan bunyi ringtone "Do Re Mi Fa Sol
La Si DO DO Si La Sol Fa Mi Re Do”.

1 #define LED 2
2 #define BTN 32
3 #define BUZZER 4
4
5
6 int tempo=300;
7 int twinkleLength=15;
8 char twinkleNotes[]=”cecefggcecefgg”;
9 int twinkleBeats[]={1,1,1,1,1,1,4,1,1,1,1,1,1,4,4};
10
11
12 void setup() {
13 Serial.begin(115200);
14 pinMode(LED,OUTPUT);
15 pinMode(BUZZER,OUTPUT);
16 pinMode(BTN,INPUT);
17
18
19 digitalWrite(LED, LOW);
20 digitalWrite(BUZZER, LOW);
21 digitalWrite(BTN, LOW);
22
23
24 }
25
26
27 void loop() {
28 if(digitalRead(BTN)==1){
29 digitalWrite(LED,HIGH);
30 Serial.println(“Ringtone Gundul Gundul Pacul Dimainkan”);
31 playRingtone(twinkleNotes, twinkleBeats, twinkleLength);
32
33 }else {
34 digitalWrite(LED,LOW);

35 Serial.println(“Ringtone berhenti”);

36 delay(200);

37
38 }

39
40
41 void playRingtone(char notes[], int beats[],int length);

42 for (int1=0;i<length; i++)

43 {if (notes[i] * tempo);

44 }else {

45 playNote(notes[i],beats,[i] *tempo);
}
46
47
}
48
49
}
50
51
52
void playNote(char note,int duration) {
53
chard names[]={‘c’,’d’,’e’,’f’,’g’,’a’,’b’,’c’};
54
int tones[]{1915,1700,1519,1432,1275,1136,1114,956};
55
56
57
for(int i=0;i<8; i++) {
58
59 if(names[i] ==note) {
60 Serial.printf(“Play Note Name=%c, tone=%d, duration =%d \n”, names[i] ,tones[i],
duration[i],playTone(tones[i],duration);
61
}
62
}
63
}
64
void playTone(int tone, int duration) {
65
for(long i =0; i < duration ‘100L; i += tone ‘2);
66
digitalWrite(BUZZER,HIGH);
67
delayMicroseconds(tone);
68
digitalWrite(BUZZER, LOW);
69
delayMicroseconds(tone);
70
}
71
72
}
73
74
Penjelasan skrip program percobaan kedua sebagai berikut :

Pada skenario program kali ini kita akan menjalankan skenario ketika tombol
ditekan maka program akan memutar ringtone pada buzzer pasif dengan nada "Do Re Mi
Fa Sol La Si DO DO Si La Sol Fa Mi Re Do”. Untuk memutar nada tersebut diperlukan variabel
untuk menyimpan tempo, note-note, jumlah total note nada, dan beats dari note nada-
nada tersebut, seperti yang ditunjukkan pada baris kode ke-7 hingga 12.

7 int tempo = 300;


8
9 // Setting note Lagu"Do Re Mi Fa Sol La Si DO DO Si La Sol Fa Mi Re Do"
10 int doremiLength = 15;
11 chardoremiNotes[]= "ccggaagffeeddc ";
12 int doremiBeats[]= { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };

• int tempo = 300; pada baris kode ke-10 adalah varibel untuk
menyimpan tempo lagunya (cepat lambatnya sebuah lagu). Untuk
melakukan penyesuaian terhadap tempo, maka yang harus kita
lakukan adalah merubah nilai yang ada pada “int tempo” yaitu pada
angka 300. Kita bisa mengubahnya jadi lebih besar atau kecil. Nilai
yang besar akan mempercepat tempo dan nilai yang kecil akan
memperkecil tempo.
• int doremiLength = 15; pada baris kode ke-10 adalah variabel
berjenis integer untuk menyimpan nilai panjang nada
• char doremiNotes [] = "cecefggcecefgg"; pada baris kode ke-11
adalah variabel yang berjenis array yang berisi kumpulan
karakter/char yang menjukkan nada pada tangga lagu.
• int doremiBeats[] = {1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 4, 4}; pada baris
kode ke-12 adalah variable yang bertugas untuk menyimpan data
dalam bentuk array bertipe integer atau kumpulan nilai integer yang
menjukkan jumlah ketukan pada setiap note. Semakin besar angka
ketukannya menujukkan semakin panjang nada bunyinya.

Penyesuaian nada bisa kita lakukan dengan mengubah nilai pada “tones”. Kita bisa
mengganti nilainya sesuai dengan nada yang diinginkan. Karena nilai “tones” dan “names”
berkaitan maka saat kita menggantinya, pastikan untuk menyesuaikan keduanya. Misalkan
tones-nya adalah “1915”, maka names-nya harus “c”. Berikut ini adalah tabel nada yang bisa
kita gunakan.

Names Not Frequency Period Tones


c Do 261 3830 1915
d Re 294 3400 1700
e Mi 329 3038 1519
f Fa 349 2864 1432
g Sol 392 2550 1275
a La 440 2272 1136
b Si 493 2028 1014
C DO 523 1912 95

Jadi, apabila kamu ingin membuat lagu sendiri, maka kamu hanya perlu browsing
untuk mencari informasi tentang nada lagu yang kamu inginkan lalu membuatnya seperti
format tersebut. Pada program ini juga disediakan beberapa contoh nada ringtone lain yang
dapat digunakan seperti:

- Nada Ringtone “Twinkle Twinkle”

14 // Setting note Lagu"Twinkle Twinkle"


15 int twinkleLength= 15;
16 chartwinkleNotes[]= "ccggaagffeeddc ";
17 int twinkleBeats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };

Nada Ringtone “Gundul Gundul Pacul”

19 // Setting note Lagu"Gundul Gundul Pacul"


20 int gundulPaculLength = 15;
21 chargundulPaculNotes[]= "cecefggcecefgg ";
22 int gundulPaculBeats[] = { 1, 1, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 4, 4 };

Di dalam fungsi loop() akan dijalankan perintah untuk membaca kondisi input
tombol seperti pada baris kode ke-34 setiap kali siklus atau loop. Dan pada baris kode ke-35
akan dijalankan perintah if untuk mengecek kondisi apakah tombol ditekan (HIGH) atau
tidak (LOW) dan disimpan pada variable buttonRead. Jika variabel buttonRead
bernilai HIGH maka LED akan dihidupkan dengan perintah digitalWrite(LED_PIN,
HIGH) seperti pada baris kode ke-36. Dan Serial akan menampilkan text “Ringtone
Doremi dimainkan” (baris kode ke-37). Dan selanjutnya akan memanggil dan
menjalankan fungsi playRingtone() untuk memainkan nadaringtone yang di
inputkan padafungsi tersebut. Pada baris kode ke-38 fungsi
playRingtone(doremiNotes, doremiBeats, doremiLength); ini diminta untuk
memainkan nada ringtone “Do Re Mi Fa So La Si Do” dengan mengirim input berupa
doremiNotes, doremiBeats, doremiLength. Sebaliknya, jika variable buttonRead
bernilai selain dari HIGH maka ringtone tidak akan dimainkan setelah ringtone
sebelumnya selesai dimainkan.
33 void loop() {
34 buttonRead = digitalRead(BUTTON_PIN);
35 if(buttonRead== HIGH){
36 digitalWrite(LED_PIN,HIGH);
37 Serial.println("Ringtone Doremi Dimainkan");
38 playRingtone(doremiNotes, doremiBeats, doremiLength);
39 }else{
40 digitalWrite(LED_PIN,LOW);
41 Serial.println("Ringtoneberhenti");
42 delay(200);
43 }
44 }

Fungsi playRingtone(char notes[], int beats[], int length) pada baris kode ke-
46 hingga ke-56 merupakan fungsi yang dibuat untuk memainkan setiap note-note
dan beat-beat setiap note ringtone yang diinputkan pada fungsi playRingtone. Jika
pada baris kode-38 pada fungsi playRingtone() yang diinputkan adalah array note
doremi (doremiNotes) maka pada fungsi playRingtone(char notes[], int beats[], int
length) pada baris kode ke-46 akan melakukan proses perulang sebanyak nilai pada
variabel doremiLength yang di inputkan, dan memanggil serta menjalankan fungsi

playNote(notes[i], beats[i] * tempo); notes[i] merupakan note yang akan dimainkan pada
loop ke-i tersebut, sedangkan beat[i] adalah beat yang akan dimainkan pada loop ke-i
tersebut dan tempo adalah besar tempo yang telah di atur pada baris kode ke-7 sebelumnya.
Baris perintah ke-54 adalah untuk memberikan delay atau jeda selama separuh dari tempo
untuk setiap kali perulangan atau setiap kali suatu nada atau note dimainkan 150 milidetik.
46 void playRingtone(charnotes[], int beats[], int length){
47 for (int i = 0; i < length; i++){
48 if (notes[i] == ' ') {
49 delay(beats[i] * tempo); // jeda jika ada note yang bernilai karakter
50 empty/kosong
51 } else {
52 playNote(notes[i], beats[i] * tempo);
53 }
54 // jeda antar note
55 delay(tempo / 2);
56 }
}

Fungsi playNote(char note, int duration) ini dibuat bertujuan untuk


memanggil dan menjalankan fungsi playTone(tones[i], duration) pada baris ke-54
untuk setiap perulangan yang dilakukan pada array note yang memiliki nada yang
sama dengan names[] (variabel yang menyimpan nilai nama nada pada tangga
nada) sebanyak durasi (beat[i] dikali dengan tempo).

59 void playNote(charnote, intduration) {


60 charnames[]= { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
61 int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };
62
63 // memainkan nada yangsesuai dengannama nada
64 for (int i = 0; i < 8; i++) {
65 if (names[i] == note){
Serial.printf("Play Note name = %c, tone = %d, duration = %d \n",
66 names[i], tones[i], duration);
67 playTone(tones[i], duration);
68 }
69 }
70 }
71

Fungsi playTone(char tone, int duration) ini dibuat memainkan setiap tone dengan
melakukan perulang tone yang yaitu dengan memebrikan perintah kepada BUZZER_PIN
untuk mengirim sinyal HIGH dan diberi delay sebesar tone dan seanjutnya diberi sinyal LOW
dan nilai delay juga sebesar tone.

73 void playTone(int tone, intduration){


74 for (long i = 0; i < duration * 1000L; i += tone * 2) {
75 digitalWrite(BUZZER_PIN, HIGH);
76 delayMicroseconds(tone);
77 digitalWrite(BUZZER_PIN, LOW);
78 delayMicroseconds(tone);
79 }
4.2 Foto hasil dan penjelasan
Berikut ini foto hasil percobaan pertama :

Gambar 4.3 hasil percobaan pertama


Pada hasil percobaan pertama ini, program berhasil dijalankan. yaitu lampu
LED dan BUZZER menyala ketika tombol button ditekan dan akan mati ketika
tombol button dilepaskan. Dalam merangkai setiap komponen kita harus tau arah
dan fungsi dari setiap komponen itu. Agar mudah dalam membuat skrip programnya.
Pastikan komponen yang telah dirangkai di breadboard telah sesuai dengan pin
ESP32. Untuk massanya diambil dari GND pada esp32, sedangkan VCC diambil
dari pin3V3 pada ESP32. Selain dari itu diambil dari pin D esp32. Skrip programnya
juga harus disesuaikan dengan pin eps32 yang digunakan baik sebagai INPUT atau
OUTPUT. Bila salah dalam membuat pin yang digunakan maka program tidak akan
jalan atau error.
Berikut hasil percobaan kedua :

Gambar 4.4 hasil percobaan saat belum ditekan tombolnya


Gambar 4.5 hasil percobaan kedua saat ditekan tombolnya

Hasil percobaan kedua juga berhasil dijalankan, walaupun terjadi sedikit


kesalahan dalam membuat programnya. Skenario untuk percobaan kedua ini ialah
jika tombol merah ditekan maka LED merah akan menyala dan BUZZER
mengeluarkan bunyi dan akan mati jika tombol merah dilepaskan. Dan jika tombol
biru ditekan maka LED biru akan menyala dan BUZZER mengeluarkan bunyi dan
akan mati bila tombol biru dilepaskan. Sebenarnya percobaan yang kedua ini sama
dengan percobaan pertama hanya saja pada percobaan kedua menggunakan dua led
dan dua tombol. Untuk rangkaiannya juga sama massanya diambil dari GND pada
esp32, sedangkan VCC diambil dari pin3V3 pada ESP32. Selain dari itu diambil
dari pin D esp32. Skrip program tinggal ditambahkan const int untuk tombol biri dan
led biru serta pin yang digunakan harus disesuaikan dengan pin pada ESP32. Pada
fungsi setup() dan fungsi loop() juga ditambah untuk tombol biru dan LED biru.
Pastikan pin ESP32 sama pada skrip program yang dibuat.
BAB V

PENUTUP

5.1 Kesimpulan

Pada percobaan ini menggunakan pin-pin digital dari esp 32 dimana pin
tersebut dipakai sebagai digital input/output. Penggunaan ESP32 ialah supaya
program yang dibuat bisa dikontrol dan bisa diketahui bagaimana alur prosesnya.
Dan jika ingin membuat suatu program atau rangkaian maka terlebih dahulu kita
membuat wiring diagram dari projek yang akan dibuat, untuk memudahkan dalam
merangkai dan membuat skrip programnya. Aplikasi atau software Arduino harus
tersedia di laptop kita lengkap dengan board esp32 nya. Dalam membuat skrip
programnya kita harus tau fungsi yang akan kita gunakan dan kita panggil pada
program tersebut. Skrip progam yang dibuat harus disesuikan dengan pin ESP32
yang dipakai ketika membuat rangkaian program. Apabila salah dalam
menginputkan pin pada skrip program maka, program tidak akan jalan. Untuk itu,
diperlukan ketelitian dalam merangkai dan membuat skrip programnya agar tigak
terjadi kesalahan.

5.2 Saran

1. Sebelum pratikum dimulai pratikan diharapkan membaca dan mempelajari


terlebih dahulu modul ataut materi yang disampaikan dosen atau asisten
pembimbing.

2. Pratikan harus mematuhi peraturan-peraturan yang telah ditetapkan dan


disetujui sebelumnya sebagaimana tercantum pada modul yang diberikan.

3. Sebelum pratikum berlangsung pratikan diharapkan telah menginstal shofware


Arduino IDE beserta librarynya.

4. Pratikan harus lebih teliti dalam merangkai projek yang akan dibuat, untuk
meminimalisir terjadinya kerusakan baik pada alat yang digunakan maupun
diri kita sendiri.
5. Waktu atau timing pratikum diperpanjang lagi, agar memudahkan pratikan
dalam memahami rangkaian dan skrip program yang dibuatnya.

Anda mungkin juga menyukai