• Tidak ada hasil yang ditemukan

DAFTAR PUSTAKA. Arduino Examples. 5 Januari 2014.

N/A
N/A
Protected

Academic year: 2021

Membagikan "DAFTAR PUSTAKA. Arduino Examples. 5 Januari 2014."

Copied!
17
0
0

Teks penuh

(1)

DAFTAR PUSTAKA

Andrianto, Heri. 2008. Pemrograman Mikrokontroler AVR ATMega16 Menggunakan Bahasa C (Codevision AVR).Bandung : Informatika.

Ardiwinoto. 2008. Mikrokontroler AVR ATMega 8/32/8535 & Pemrogramannya Dengan Bahasa C WINAVR. Bandung :Informatika.

Budiharto, Widodo. 2005. Perancangan Sistem dan Aplikasi Mikrokontroler. Jakarta : PT. Alex Media Komputindo.

Kadir, Abdul. 2013. Panduan Praktis Mempelajari Aplikasi Mikrokontroller dan Pemrograman Arduino.Yogyakarta :Andi.

Lukman, Ardiansyah, Nendi. 2010. Line Follower Robot Peniup Lilin Berlengan Satu Berbasis Microcontroller ATMEGA16. Jakarta : Universitas Mercu Buana.

Winoto, Ardi. 2008. Mikrokontroler AVR ATmega 8/16/32/8535 dan Pemrogramannya dengan Bahasa C pada WinAVR. Bandung : Informatika.

Arduino. 2014. Examples. http://arduino.cc/en/Tutorial/HomePage. 5 Januari 2014. Oomlout. 2014. ARDX. http://www.oomlout.com/a/products/ardx/. 25 Maret 2014.

(2)

/**SUMMARY**

* Program lift menunggu sampai tombol ditekan. Bila tombol ditekan, sangkar lift akan bergerak menuju lantai tujuan/panggilan

*

* Sangkar lift akan berhenti disemua lantai yang telah dipanggil pada arah yang sama, sebelum mengubah arah

*

* Jika lebih dari satu tombol ditekan ke arah yang sama, sangkar lift akan berhenti terlebih dahulu di lantai yang tertinggi atau terendah

*

* Untuk CONTOH, jika tombol panggil paling atas ditekan, dan kemudian tombol turun dari lantai satu dipanggil, lift akan melewati lantai satu terlebih dahulu dan melanjutkan ke lantai atas.

* dan kemudian berhenti di lantai satu dalam perjalanan turun. *

*/

const int tombolPanggilLift[] = { 10,11,12,13};

(3)

6,7,8};

//Set to true when the associated interior or exterior buttons are selected const int JML_TOMBOLPANGGIL = 3;

const int JML_TOMBOLTUJUAN = 4; boolean tombolpanggilditekan[] = { false,false,false};

boolean tomboltujuanditekan[] = { false,false,false,false};

const int JML_LED = 6; const int Pin_LED[] = { A0, A1, A2, A3, A4, A5};

const int MotorNaik = 5; const int MotorTurun = 4;

const int LevelSwitch = 3;

int posisiSangkarLift = 0;

(4)

const int LANTAI_MIN = 0; const int JUMLAH_LANTAI = 3;

boolean ArahSangkarLift = true; //Stores the current direction the elevator is travelling. true is up. false is down

boolean tahanposisi = true; //True when elevator is stationary

boolean MendeteksiLantai = true; unsigned long waktuSensorAktif;

const unsigned long WAKTU_AKTIF_LEVEL_SWITCH = 2000;

const float JARAK_LANTAI = 200; //mm void setup () { Serial.begin (9600); setup_LED (); setup_TombolTujuan (); setup_TombolPanggil (); pinMode(MotorNaik, OUTPUT); pinMode(MotorTurun, OUTPUT); } void loop () {

(5)

/* if (DEBUG) { posisiSangkarLift = Serial.read (); DEBUG = false; }*/ if (!tahanposisi) { if (TelahMencapaiLantai()) { MencapaiLantai();

if (LiftBerhenti (posisiSangkarLift, ArahSangkarLift)) { Serial.print("Berhenti Dilantai : " ); Serial.println (posisiSangkarLift); HentikanLift (); delay (2000); TandaiLantaiDilewati(posisiSangkarLift); Serial.println ("*******************"); } eksekusiProgram(); } } if (TombolDitekan()) eksekusiProgram (); StatusLed (); }

(6)

/**

* Gets the elevator to start moving towards the next floor it should visit */

void eksekusiProgram(){

if (bergerakSearah(ArahSangkarLift)) SangkarLiftBergerak ();

else if (bergerakSearah (!ArahSangkarLift)) { MerubahArahSangkar();

SangkarLiftBergerak(); }

}

/**

* Returns true if there is still a floor to visit in direction specified */

boolean bergerakSearah(boolean ArahSangkarLift) {

for (int i = posisiSangkarLift; ArahSangkarLift ? i < 3 : i >= 0; i = ArahSangkarLift ? i + 1 : i - 1) //Muhahahahahahahahaha

{

if (LiftBerhenti(i,ArahSangkarLift)) return true;

(7)

}

return false; }

void setup_TombolPanggil () {

for (int i = 0; i < JML_TOMBOLTUJUAN; i++) pinMode (tombolPanggilLift[i], INPUT); }

void setup_TombolTujuan () {

for (int i = 0 ; i < JML_TOMBOLPANGGIL; i++) pinMode (tombolTujuanlLift[i], INPUT);

}

void setup_LED () {

for (int i = 0 ; i < JML_LED; i++) pinMode (Pin_LED[i], OUTPUT); }

//Returns true if a button press is detected boolean TombolDitekan () {

(8)

return (PeriksaPanggilan () || PeriksaStatusTujuan ());

}

boolean PeriksaPanggilan () { int count = 0;

for (int i = 0 ; i < 4; i++) {

if (count != menujuLantaiPanggilan(i)) count++;

if (digitalRead (tombolPanggilLift[i]) == HIGH && count != posisiSangkarLift) { tomboltujuanditekan[i] = true;

Serial.print ("Ada Panggilan Kelantai"); Serial.println (i); return true; } } return false; } boolean TelahMencapaiLantai () {

(9)

if (digitalRead (LevelSwitch) && !MendeteksiLantai && (millis() - waktuSensorAktif > WAKTU_AKTIF_LEVEL_SWITCH)) { Serial.println("Sampai Dilantai"); //delay(100); return true; } return false; } /**

* Digital reads all of the buttons and updates the interiorSelected flags if a button is pressed */

boolean PeriksaStatusTujuan () { for (int i = 0 ; i < 3; i++) { if (i != posisiSangkarLift) {

if (digitalRead(tombolTujuanlLift[i]) && !tombolpanggilditekan[i]) { tombolpanggilditekan[i] = true;

Serial.print ("Lantai Tujuan"); Serial.println (i);

return true; }

(10)

}

return false; }

/**

* Returns true if an interior button selection for the floor at index specified was made or an * exterior button that is in the same direction as the current floors direction has been selected. */

boolean LiftBerhenti (int floorIndex, boolean ArahSangkarLift) { switch (floorIndex) { case 0: return LiftBerhentiGround(ArahSangkarLift); case 1: return LiftBerhentiSatu(ArahSangkarLift); default:

return LiftBerhentiDua (ArahSangkarLift); }

}

boolean LiftBerhentiGround (boolean ArahSangkarLift) {

return (!ArahSangkarLift && tomboltujuanditekan[0]) ||tombolpanggilditekan[0]; }

(11)

boolean LiftBerhentiSatu (boolean ArahSangkarLift) { return (ArahSangkarLift && tomboltujuanditekan[2]) || (!ArahSangkarLift && tomboltujuanditekan[1]) || (

(tomboltujuanditekan[1] || tomboltujuanditekan[2])

&& (ArahSangkarLift ? !LiftBerhentiDua(ArahSangkarLift) : !LiftBerhentiGround(ArahSangkarLift))

)

|| tombolpanggilditekan[1]; }

boolean LiftBerhentiDua (boolean ArahSangkarLift) {

return (ArahSangkarLift && tomboltujuanditekan[3]) || tombolpanggilditekan[2]; }

/**

* Increments or decrements floorReached variable depending on direction of the elevator * Ensures that the floor is marked as visited by deactivating its floor visited commands * Returns false if the elevator is at the top or bottomFloor

*/

(12)

boolean succesfull = true; MendeteksiLantai = true; if (ArahSangkarLift) { if (posisiSangkarLift < LANTAI_MAX) posisiSangkarLift++; else {

Serial.println("Reached top floor!"); succesfull = false; } } else { if (posisiSangkarLift > LANTAI_MIN) posisiSangkarLift--; else {

Serial.println("Reached bottom floor"); succesfull = false;

} }

return succesfull; }

(13)

tombolpanggilditekan[floorIndex] = false; switch (floorIndex) { case 0: tomboltujuanditekan[0] = false; break; case 1: if (ArahSangkarLift) tomboltujuanditekan[2] = false; else tomboltujuanditekan[1] = false;

if (!LiftBerhentiDua(ArahSangkarLift) && !LiftBerhentiGround(ArahSangkarLift)) { tomboltujuanditekan[2] = false; tomboltujuanditekan[1] = false; } break; case 2: tomboltujuanditekan[3] = false; break; } }

(14)

void MerubahArahSangkar () {

Serial.print("Sangkar Lift Berubah Arah: " ); Serial.println (!ArahSangkarLift);

ArahSangkarLift = !ArahSangkarLift; digitalWrite (MotorNaik, !ArahSangkarLift); digitalWrite (MotorTurun, ArahSangkarLift); }

void HentikanLift () {

Serial.print("Mencapai Lantai: " ) ; Serial.println (posisiSangkarLift); Serial.print ("Jarak Antar Lantai: ");

//Serial.println ((float)JARAK_LANTAI/ (float)(waktuSensorAktif - millis())); digitalWrite (MotorNaik,LOW);

digitalWrite (MotorTurun, LOW); tahanposisi = true;

}

void SangkarLiftBergerak () {

Serial.print("Berjalan dari Lantai: "); Serial.println (posisiSangkarLift);

(15)

digitalWrite (MotorTurun, !ArahSangkarLift); tahanposisi = false; MendeteksiLantai = false; waktuSensorAktif = millis(); } void StatusLed () {

for (int i = 0; i < JUMLAH_LANTAI; i++) { if (LiftBerhenti(i, ArahSangkarLift))

digitalWrite (Pin_LED[i + JUMLAH_LANTAI], HIGH); else

digitalWrite (Pin_LED [i + JUMLAH_LANTAI],LOW); if (i == posisiSangkarLift)

digitalWrite (Pin_LED[i], HIGH); else

digitalWrite (Pin_LED[i], LOW);

} }

void printStatusTombolPanggil () {

(16)

Serial.print ("Tombol Panggil : "); Serial.print (i);

Serial.println (tomboltujuanditekan[i] ? " TRUE " : " FALSE "); }

}

void printStatusTombolTujuan () {

for (int i = 0 ; i < JML_TOMBOLPANGGIL; i++) { Serial.print ("TombolTujuan : ");

Serial.print (i);

Serial.println (tombolpanggilditekan[i] ? " TRUE " : " FALSE "); }

}

int menujuLantaiPanggilan (int DaftarTombol) { switch (DaftarTombol) { case 0: return 0; case 3: return 2; default: return 1;

(17)

} }

Referensi

Dokumen terkait

Bodi adalah bagian dari kendaraan yang berfungsi sebagai tempat penumpang ataupun barang, yang dibentuk sedemikian rupa memadukan berbagai unsur dari jenis

Maha Esa, atas segala percikan kasih, hidayat, dan taufiq-Nya sehingga skripsi dengan judul “Analisis Perbandingan Kinerja Keuangan (Studi pada PT Adaro Energy, Tbk. dan

NEE di perkebunan kelapa sawit cenderung bernilai positif pada malam hari dan bernilai negatif pada pagi hingga sore hari, baik pada bulan April maupun

Sinar-sinar biru yang ada pada fototerapi akan mengubah bilirubin tak terkonjugasi menjadi isomer yang kurang berbahaya, sehingga efektif dalam menurunkan kadar bilirubin..

boleh memiliki lebih dari satu UUD Berdasarkan bagan di atas perbedaan yang benar antara bentuk negara kesatuan dengan bentuk negara serikat adalah

Kapal dimiliki oleh PT.PANN (Persero) di Jakarta, dilengkapi dengan Surat Ukur Internasional (1969) Nomor 1747/PPm, Surat Laut Nomor PK.674/1075/SL-PM/DK-08, Sertifikat

Desain penelitian yang digunakan dalam penelitian ini adalah desain penelitian deskriptif korelasional, yang menguraikan dan memberikan penjelasan tentang hubungan

Data-data yang diperoleh dari hasil menghitung atau membilang termasuk dalam data diskrit, sedangkan data-data yang diperoleh dari hasil mengukur termasuk dalam data kontinu..