Berikut adalah dasar-dasar sketch pemrograman Arduino, diharapkan sudah mengenal bahasa C sebelumnya, meskipun arduino menggunakan bahasa C, tapi didunia pemrograman chip selalu ada tambahan yang diberikan oleh vendor chip tersebut, arduino menggunakan chip AVR.
Arduino IDE |
void setup() {
// kode ini hanya akan dijalankan satu kali
}
void loop() {
// kode ini akan dijalankan berulang-ulang
}
Bahasa C adalah pemrograman "case sensitive" artinya penulisan hurup besar dan kecil akan diartikan berbeda, jadi mohon diperhatikan cara penulisan kode programnya.
Tulisan berwarna oranye yang diawali dengan void adalah blok kode fungsi, ga perlu dijelasin lagi ya kan udah tau dasar bahasa C. Void setup adalah blok kode untuk setup pin IO, serial monitor, baud rate, dll, sementara void loop adalah blok kode fungsi untuk looping statement.
Berikut adalah sketch blink :
//Sketch lampu kedip
int led = 13; //variabel
// setup
void setup() {
// inisialisasi pin sebagai output
pinMode(led, OUTPUT);
}
void loop() {
digitalWrite(led, HIGH); // led menyala
delay(1000); // delay 1s
digitalWrite(led, LOW); // led mati
delay(1000); // delay 1s
}
// setup
void setup() {
// inisialisasi pin sebagai output
pinMode(led, OUTPUT);
}
void loop() {
digitalWrite(led, HIGH); // led menyala
delay(1000); // delay 1s
digitalWrite(led, LOW); // led mati
delay(1000); // delay 1s
}
Sketch ini mengakibatkan lampu LED pada pin digital 13 akan on/off dalam selang waktu 1 detik.
//Sketch saklar lampu
// konstanta
// set pin
const int saklar = 2; // pin saklar
const int LED = 13; // pin LED
// variabel
int Sstatus = 0; // variabel status dari saklar
void setup() {
// inisialisasi pin LED sebagai output
pinMode(LED, OUTPUT);
// inisialisasi pin saklar sebagai input
pinMode(saklar, INPUT);
}
void loop(){
// membaca nilai saklar
Ssaklar = digitalRead(saklar);
// cek apabila saklar ditekan
// jika iya maka status saklar adalah HIGH (on)
if (Ssaklar == HIGH) {
// LED menyala:
digitalWrite(LED, HIGH);
}
else {
// LED mati:
digitalWrite(LED, LOW);
}
}
// set pin
const int saklar = 2; // pin saklar
const int LED = 13; // pin LED
// variabel
int Sstatus = 0; // variabel status dari saklar
void setup() {
// inisialisasi pin LED sebagai output
pinMode(LED, OUTPUT);
// inisialisasi pin saklar sebagai input
pinMode(saklar, INPUT);
}
void loop(){
// membaca nilai saklar
Ssaklar = digitalRead(saklar);
// cek apabila saklar ditekan
// jika iya maka status saklar adalah HIGH (on)
if (Ssaklar == HIGH) {
// LED menyala:
digitalWrite(LED, HIGH);
}
else {
// LED mati:
digitalWrite(LED, LOW);
}
}
Sketch ini adalah aplikasi penggunaan saklar dan lampu LED, ketika saklar ditekan maka lampu menyala, dan sebaliknya lampu mati. Saklar manual biasanya mengalami efek "bouncing" yang mengakibatkan saklar akan dibaca oleh arduino sebagai on/off yang berlangsung dengan cepat, untuk menghindari hal ini bisa dengan menambahkan rangkaian anti-bouncing pada masukan digital, atau memanipulasi secara program, hal ini adalah kelas lanjutan.
//Sketch sensor analog
int sensorPin = A0;
// pin sensor (gunakan potensio meter sebagai awal percobaan)
int LED = 13; // pin led
int NilaiSensor = 0; // variabel sensor
void setup() {
// deklarasi pin sebagai output
pinMode(LED, OUTPUT);
}
void loop() {
// membaca nilai sensor
NilaiSensor = analogRead(sensorPin);
// menyalakan lampu
digitalWrite(LED, HIGH);
// menghentikan program sebesar NilaiSensor
delay(NilaiSensor);
// matkan lampu
digitalWrite(LED, LOW);
// menghentikan program sebesar NilaiSensor
delay(NilaiSensor);
}
int LED = 13; // pin led
int NilaiSensor = 0; // variabel sensor
void setup() {
// deklarasi pin sebagai output
pinMode(LED, OUTPUT);
}
void loop() {
// membaca nilai sensor
NilaiSensor = analogRead(sensorPin);
// menyalakan lampu
digitalWrite(LED, HIGH);
// menghentikan program sebesar NilaiSensor
delay(NilaiSensor);
// matkan lampu
digitalWrite(LED, LOW);
// menghentikan program sebesar NilaiSensor
delay(NilaiSensor);
}
Sketch ini berfungsi sebagai langkah awal pengertian menggunakan sensor analog, untuk uji coba awal gunakan potensio meter, selanjutnya bisa menggunakan LDR sebagai sensor cahaya, sensor suhu yang memiliki output analog, dsb. Sedangkan untuk sensor dibutuhkan sketch yang lebih rumit untuk mengkalkulasikan nilai masukan menjadi satuan yang dikehendaki.
//LCD 16x2
// include file kode library, header file
#include <LiquidCrystal.h>
// inisialisasi pin LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
// setup baris dan kolom LCD
lcd.begin(16, 2);
// menampilkan tulisan pada LCD
lcd.print("hello, world!");
}
void loop() {
// setup kursor pada kolom 0 baris 1
// baris 1 artinya baris ke-2, karena dimulai dari 0
lcd.setCursor(0, 1);
// menampilkan pada monitor beberapa detik setelah reset
lcd.print(millis()/1000);
}
#include <LiquidCrystal.h>
// inisialisasi pin LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
// setup baris dan kolom LCD
lcd.begin(16, 2);
// menampilkan tulisan pada LCD
lcd.print("hello, world!");
}
void loop() {
// setup kursor pada kolom 0 baris 1
// baris 1 artinya baris ke-2, karena dimulai dari 0
lcd.setCursor(0, 1);
// menampilkan pada monitor beberapa detik setelah reset
lcd.print(millis()/1000);
}
Sketch ini adalah dasar penggunaan LCD 16x2, jika anda ingin penggunakan LCD ini sebagai monitoring saklar dan lampu, tinggal menggabungkan sketch ini menjadi satu, perhatikan blok program, biasakan melakukan verify untuk mengecek program apakah ada kesalahan pengetikan atau tidak, jika tidak maka lakukan upload sketch dengan sebelumnya jika pemilihan board dan serial port sudah tepat.
Contoh sketch gauss meter :
#define XRANGE 50
int x,gss;
void setup(){
Serial.begin(9600);
}
void loop(){
int aValue =analogRead(0);
x = map(aValue, 0, 1024, 0, XRANGE);
gss = map(aValue, 102, 922, -640, 640);
Serial.print("|");
for (int i=0;i<x;i++){
if(i==XRANGE/2-1)
int x,gss;
void setup(){
Serial.begin(9600);
}
void loop(){
int aValue =analogRead(0);
x = map(aValue, 0, 1024, 0, XRANGE);
gss = map(aValue, 102, 922, -640, 640);
Serial.print("|");
for (int i=0;i<x;i++){
if(i==XRANGE/2-1)
Serial.print("|");
else
else
Serial.print("-");
}
Serial.print("O");
for (int i=x+1;i<XRANGE;i++){
if(i==XRANGE/2-1)
}
Serial.print("O");
for (int i=x+1;i<XRANGE;i++){
if(i==XRANGE/2-1)
Serial.print("|");
else
else
Serial.print("-");
}
Serial.print("|");
Serial.print(gss);
Serial.println("Gauss");
delay(100);
}
}
Serial.print("|");
Serial.print(gss);
Serial.println("Gauss");
delay(100);
}
Sketch ini banyak menggunakan Serial.print, artinya monitoring ditampilkan pada serial monitor, untuk memonitoring fluktuasi medan magnetik. Semua sketch ini berlaku bagi semua tipe arduino, hanya saja pada saat proses upload sesuaikan board yang digunakan, kemudian pin IO, juga baud rate jika anda bermain-main dengan bluetooth misalnya.
Contoh sketch sensor radiasi nuklir :
#include <LiquidCrystal.h>
LiquidCrystal lcd(3,4,5,6,7,8);
#define TH1 45
#define TH2 95
#define TH3 200
#define TH4 400
#define TH5 600
#define CONV_FACTOR 0.00812
int ledArray [] = {10,11,12,13,9};
int geiger_input = 2;
long count = 0;
long countPerMinute = 0;
long timePrevious = 0;
long timePreviousMeassure = 0;
long time = 0;
long countPrevious = 0;
float radiationValue = 0.0;
void setup(){
pinMode(geiger_input, INPUT);
digitalWrite(geiger_input,HIGH);
for (int i=0;i<5;i++){
pinMode(ledArray[i],OUTPUT);
}
Serial.begin(19200);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Radiation Sensor");
lcd.setCursor(0,1);
lcd.print("Board - Arduino");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Program percobaan");
delay(1000);
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Radiasi nuklir");
delay(500);
for (int i=0;i<5;i++){
delay(200);
lcd.scrollDisplayLeft();
}
delay(500);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" - Libelium -");
lcd.setCursor(0,1);
lcd.print("www.libelium.com");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("CPM=");
lcd.setCursor(4,0);
lcd.print(6*count);
lcd.setCursor(0,1);
lcd.print(radiationValue);
attachInterrupt(0,countPulse,FALLING);
}
void loop(){
if (millis()-timePreviousMeassure > 10000){
countPerMinute = 6*count;
radiationValue = countPerMinute * CONV_FACTOR;
timePreviousMeassure = millis();
Serial.print("cpm = ");
Serial.print(countPerMinute,DEC);
Serial.print(" - ");
Serial.print("uSv/h = ");
Serial.println(radiationValue,4);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("CPM=");
lcd.setCursor(4,0);
lcd.print(countPerMinute);
lcd.setCursor(0,1);
lcd.print(radiationValue,4);
lcd.setCursor(6,1);
lcd.print(" uSv/h");
if(countPerMinute <= TH1) ledVar(0);
if((countPerMinute <= TH2)&&(countPerMinute>TH1)) ledVar(1);
if((countPerMinute <= TH3)&&(countPerMinute>TH2)) ledVar(2);
if((countPerMinute <= TH4)&&(countPerMinute>TH3)) ledVar(3);
if((countPerMinute <= TH5)&&(countPerMinute>TH4)) ledVar(4);
if(countPerMinute>TH5) ledVar(5);
count = 0;
}
}
void countPulse(){
detachInterrupt(0);
count++;
while(digitalRead(2)==0){
}
attachInterrupt(0,countPulse,FALLING);
}
void ledVar(int value){
if (value > 0){
for(int i=0;i<=value;i++){
digitalWrite(ledArray[i],HIGH);
}
for(int i=5;i>value;i--){
digitalWrite(ledArray[i],LOW);
}
}
else {
for(int i=5;i>=0;i--){
digitalWrite(ledArray[i],LOW);
}
}
}
LiquidCrystal lcd(3,4,5,6,7,8);
#define TH1 45
#define TH2 95
#define TH3 200
#define TH4 400
#define TH5 600
#define CONV_FACTOR 0.00812
int ledArray [] = {10,11,12,13,9};
int geiger_input = 2;
long count = 0;
long countPerMinute = 0;
long timePrevious = 0;
long timePreviousMeassure = 0;
long time = 0;
long countPrevious = 0;
float radiationValue = 0.0;
void setup(){
pinMode(geiger_input, INPUT);
digitalWrite(geiger_input,HIGH);
for (int i=0;i<5;i++){
pinMode(ledArray[i],OUTPUT);
}
Serial.begin(19200);
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Radiation Sensor");
lcd.setCursor(0,1);
lcd.print("Board - Arduino");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Program percobaan");
delay(1000);
lcd.clear();
lcd.setCursor(0,1);
lcd.print("Radiasi nuklir");
delay(500);
for (int i=0;i<5;i++){
delay(200);
lcd.scrollDisplayLeft();
}
delay(500);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" - Libelium -");
lcd.setCursor(0,1);
lcd.print("www.libelium.com");
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("CPM=");
lcd.setCursor(4,0);
lcd.print(6*count);
lcd.setCursor(0,1);
lcd.print(radiationValue);
attachInterrupt(0,countPulse,FALLING);
}
void loop(){
if (millis()-timePreviousMeassure > 10000){
countPerMinute = 6*count;
radiationValue = countPerMinute * CONV_FACTOR;
timePreviousMeassure = millis();
Serial.print("cpm = ");
Serial.print(countPerMinute,DEC);
Serial.print(" - ");
Serial.print("uSv/h = ");
Serial.println(radiationValue,4);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("CPM=");
lcd.setCursor(4,0);
lcd.print(countPerMinute);
lcd.setCursor(0,1);
lcd.print(radiationValue,4);
lcd.setCursor(6,1);
lcd.print(" uSv/h");
if(countPerMinute <= TH1) ledVar(0);
if((countPerMinute <= TH2)&&(countPerMinute>TH1)) ledVar(1);
if((countPerMinute <= TH3)&&(countPerMinute>TH2)) ledVar(2);
if((countPerMinute <= TH4)&&(countPerMinute>TH3)) ledVar(3);
if((countPerMinute <= TH5)&&(countPerMinute>TH4)) ledVar(4);
if(countPerMinute>TH5) ledVar(5);
count = 0;
}
}
void countPulse(){
detachInterrupt(0);
count++;
while(digitalRead(2)==0){
}
attachInterrupt(0,countPulse,FALLING);
}
void ledVar(int value){
if (value > 0){
for(int i=0;i<=value;i++){
digitalWrite(ledArray[i],HIGH);
}
for(int i=5;i>value;i--){
digitalWrite(ledArray[i],LOW);
}
}
else {
for(int i=5;i>=0;i--){
digitalWrite(ledArray[i],LOW);
}
}
}
Sketch diatas adalah sketch untuk mengukur dan mendeteksi kekuatan radiasi NUKLIR, jangan salah memang dinegara ini sulit mencari reaktor nuklir, tapi sebetulnya banyak barang-barang yang berada disekitar kita bahkan gadget yang kita gunakan itu mengandung radiasi nuklir yang berbahaya, coba anda gunakan sketch ini untuk mengukur jarum jam yang glow in the dark, hahaha... anda bisa membuat plutonium dari itu. Segitu dulu ya, yang penting punya ilmu sedikit langsung praktek, God!
Selamat meneliti dan berfikir, because science can find the essence of life.
Sampai ketemu di tulisan-tulisan saya selanjutnya.
0 comments:
Post a Comment