b. Source Code
int analogPin = 3;
int val = 0;
void setup() {
// initialize serial communication at 9600 bits per
second:
Serial.begin(9600);
}
c. Hasil percobaan
- Analog Read Serial
a. Gambar Rangkaian
b. Source Code
void setup() {
// initialize serial communication at 9600 bits per
second:
Serial.begin(9600);
}
// the loop routine runs over and over again forever:
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
// print out the value you read:
Serial.println(sensorValue);
delay(1); // delay in between reads for stability
}
c. Hasil Percobaan
- Digital Read Serial
a. Gambar rangkaian
b. Source Code
int button = 2;
void setup() {
// initialize serial communication at 9600 bits per
second:
Serial.begin(9600);
pinMode(button, INPUT);
}
c. Hasil percobaan
d. Analisa
- Smothing
a. Gambar rangkaian
b. Source Code
int readings[numReadings];
int readIndex = 0;
int total = 0;
int average = 0;
void setup() {
// initialize serial communication at 9600 bits per
second:
Serial.begin(9600);
for (int thisReading = 0; thisReading<numReadings;
thisReading++){
readings[thisReading]=0;
}
}
average = total/numReadings;
Serial.println(average);
delay(1);
}
c. Hasil percobaan
d. Analisa
2. Interupt
- Eksternal Mode Falling
a. Source Code
void loop(){
Serial.println("Main Source Code");
Serial.println("Count Loop: ");
Serial.println(countLoop);
countLoop++;
delay(1000);
}
b. Hasil Percobaan
- Penggunaan Timer1 Overflow Interrupt Untuk Led Blink
a. Source Code
b. Hasil Percobaan
- Interupt untuk Input
a. Source Code
void impulse(){
counts++;
}
#define LOG_PERIOD 1000
void setup(){
counts = 0;
Serial.begin(9600);
pinMode(2, INPUT_PULLUP);
digitalWrite(2, HIGH);
attachInterrupt(digitalPinToInterrupt(2), impulse,
FALLING);
Serial.println("Start Counter");
}
void loop(){
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > LOG_PERIOD){
previousMillis = currentMillis;
Serial.println(counts);
counts = 0;
}
}
b. Hasil percobaan
c. Analisa
3. Timer-Library Timer-master.zip
a. Gambar rangkaian
b. Source Code
#include <Event.h>
#include <Timer.h>
Timer myTimer;
int digital=0;
void setup() {
pinMode(9,OUTPUT);
myTimer.every(500,toggleLed);// in millisecond
}
void loop() {
myTimer.update();
}
void toggleLed(){
digitalWrite(9,digital);
digital = !digital;
}
c. Hasil Percobaan
- Timer-Library TimerOne-r11.zip
a. Gambar rangkaian
b. Source Code
#include <TimerOne.h>
int digital = 0 ;
void setup() {
pinMode(9,OUTPUT);
Timer1.initialize(500000); // in microsecond
Timer1.attachInterrupt(toggleLed);
}
void loop() {
// your Source Code here
}
void toggleLed(){
digitalWrite(9,digital);
digital = !digital;
}
c. Hasil Percobaan
d. Analisa
4. Counter
a. Source Code
#include <TimerOne.h>
int counter = 0;
void setup() {
Serial.begin(9600);
Timer1.initialize(500000); // in microsecond
Timer1.attachInterrupt(eventCounter);
}
void loop() {
// your Source Code here
Serial.print("nilai Counter : ");
Serial.println(counter);
delay(500);
}
void eventCounter(){
counter++; //increment counter variable
}
b. Hasil Percobaan
c. Analisa
Pada percobaan counter ini, terdapat penginisialisasian counter dengan tipe data
int dan dengan nilai sama dengan 0. Lalu pada void setup(), terdapat
penginisialisasian komunikasi serial yang memiliki nilai baudraet 9600 bit
persekon, penginisialisasian Timer1 yang memiliki periode 500000 microsecond
atau 500 milisecond, serta terdapat fungsi untuk mengaktifkan Timer1 interrupt
pada fungsi eventCounter. Kemudian pada void loop() terdapat kode untuk
menampilkan tulisan “Nilai Counter : “ pada serial monitor dengan delay 500ms.
Lalu pada void evenCounter() terdapat kode untuk meng-increment variabel
counter. Dari sisi hardware, dalam melakukan percobaan counter ini, hanya
diperlukan sebuah Arduino Uno Board yang digunakan sebagai tempat sebuah
program itu ditampung sehingga dapat menjalankan program dengan baik.
5. Encoder
a. Gambar Rangkaian
b. Source Code
int chA=3;
int chB=4;
int value;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(3),Encoder, RISING);
pinMode(chB,INPUT);
Serial.println("Modul Encoder");
}
void loop() {
}
void Encoder(){
if (digitalRead(chA) && !digitalRead(chB)){value++;}
else if (digitalRead(chA) && digitalRead(chB)) {value--;}
Serial.print("Data Encoder: ");
Serial.println(value);
}
c. Hasil Percobaan
d. Analisa
- Contoh
a. Gambar Rangkaian
b. Source Code
#define outputA 6
#define outputB 7
int counter = 0;
int aState;
int aLastState;
void setup() {
pinMode (outputA,INPUT);
pinMode (outputB,INPUT);
Serial.begin (9600);
// Reads the initial state of the outputA
aLastState = digitalRead(outputA);
}
void loop() {
aState = digitalRead(outputA); // Reads the "current" state
of the outputA
// If the previous and the current state of the outputA are
different, that means a Pulse has occured
if (aState != aLastState){
// If the outputB state is different to the outputA state,
that means the encoder is rotating clockwise
if (digitalRead(outputB) != aState) {
counter ++;
} else {
counter --;
}
Serial.print("Position: ");
Serial.println(counter);
}
aLastState = aState; // Updates the previous state of the
outputA with the current state
}
c. Hasil Percobaan
d. Analisa
Pada percobaan encoder, melakukan encoder dan juga contoh lainnya. Pada
percobaan encoder, terdapat penginisialisasian chA dengan nilai 3 dan chB dengan
nilai 4, serta value. Pada void setup() terdapat penginisialisasian komunikasi serial
yang memiliki nilai baudrate 9600 bit persekon. Lalu juga ada kode
untukmenghidupkan interupsi eksternal pada pin ke-3 dengan mode rising difungsi
Encoder(). Lalu pada void Encoder() terdapat logika if, serta terdapat pencetakan
“Data Encoder : “ dan pencetakan dari value.
Kemudian terdapat pendefinisian outputA 6 dan outputB 7 serta
penginisialisasian counter sama dengan 0, penginisialisasian aState serta
aLastState. Pada void setup() terdapat penginisialisasian pinMode outputA dan
outputB sebagai input. Lalu juga terdapat penginisialisasian komunikasi serial yang
memiliki nilai baudrate 9600 bit persekon, serta kode untuk membaca status awal
dari outputA. Kemudian pada void loop(), terdapat kode untuk membaca status saat
ini dari outputA. Lalu juga terdapat dua logika if, dimana pada logika if pertama
jika keadaan sebelumnya dan saat ini dari outputA berbeda, itu berarti pulse telah
terjadi. Sedangkan pada logika if kedua, jika status dari outputB berbeda dengan
status outputA, itu berarti encoder berputar searah jarum jam. Lalu juga ada kode
untuk memperbarui keadaan outputA sebelum keadaan saat ini.
6. Motor Servo
a. Gambar Rangkaian
b. Source Code
/* Sweep
by BARRAGAN <http://barraganstudio.com>
This example code is in the public domain.
#include <Servo.h>
void setup() {
myservo.attach(2); // attaches the servo on pin 9 to the
servo object
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // goes from 0
degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to
position in variable 'pos'
delay(15); // waits 15ms for the
servo to reach the position
}
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180
degrees to 0 degrees
myservo.write(pos); // tell servo to go to
position in variable 'pos'
delay(15); // waits 15ms for the
servo to reach the position
}
}
c. Hasil Percobaan
- Contoh Pin 10
a. Gambar Rangkaian
b. Source Code
#include <Servo.h>
Servo motorServo;
void setup(){
motorServo.attach(10);
}
void loop()
{
motorServo.write(45);
delay(1000);
motorServo.write(0);
delay(1000);
motorServo.write(90);
delay(1000);
motorServo.write(135);
delay(1000);
motorServo.write(180);
delay(1000);
motorServo.write(90);
delay(1000);
c. Hasil Percobaan
d. Analisa
Pada percobaan motor servo ini, dilakukan dua percobaan yaitu percobaan
motor servo dan juga contohnya. Pada percobaan motor servo pertama terdapat
kode “Servo myservo” yang digunakan untuk membuat objek servo untuk
mengontrol servo. Lalu pada void setup() terdapat kode untuk menambahkan
servon pada pin arduino ke 2. Selanjutnya pada void loop(), terdapat looping for,
untuk menginstruksikan servo berada di posisi dalam variable pos. dimana posisi
servo dimulai dari 0-180 derajat.
Pada percobaan kedua, juga terdapat kode “Servo myservo” yang digunakan
untuk membuat objek servo untuk mengontrol servo. Lalu pada void setup()
terdapat kode untuk menambahkan servon pada pin arduino ke 10. Selanjutnya pada
void loop(), terdapat kode untuk memutar servo kekiri 45 derajat, memutar servo
kekiri 0 derajat, memutar servo ke posisi tengah (90 derajat), memutar servo ke
kanan 135 derajat, memutar servo kekanan 180 derajat, serta memutar servo ke
posisi tengah (90 derajat).
7. PWM
a. Gambar Rangkaian
b. Source Code
int ledPin = 13;
void setup() {
// put your setup code here, to run once:
void loop() {
// put your main code here, to run repeatedly:
for (int fadeValue=0; fadeValue<=255; fadeValue +=5){
analogWrite(ledPin, fadeValue);
delay(30);
}
Pada percobaan PWM terdapat penginisialisasian ledPin dengan nilai 13. Lalu
pada void loop() terdapat dua looping for, dimana pada looping for pertama terdapat
fadeValue dikondisikan mulai dari 0 sampai 255 dengan bertambahnya nilai 5.
Setelah itu, akan dilakukan pemprosesan dan terdapat delay selama 30ms.
Selanjutnya, pada looping for kedua dimana fadeValue dikondisikan mulai dari 255
sampai 0 dengan berkurangnya nilai. Setelah itu, akan dilakukan pemrosesan dan
terdapat delay selama 200ms. Pada percobaan kedua, terdapat penginisialisasian
value dengan nilai 0. Pada void setup() terdapat kode untuk mengatur frekuensi
PWM pin 9 ke 3906Hz yang diperoleh dari 31250/8. Lalu pada void loop() terdapat
kode untuk mendeteksi nilai dutycycle yang keluar dari pin. Nilai dutycycle mulai
dari 0 – 255 yang mewakili 0% - 100% dutycycle. Kemudian terdapat void
setPwmFrequency untuk mengatur frekuensi PWM. Dari sisi hardware, untuk
melakukan percobaan ini terdapat LED sebagai indikator. Dari percobaan yang
telah dilakuakn LED akan menyala secara berkedip.