Nugroho's blog.: arduino
Showing posts with label arduino. Show all posts
Showing posts with label arduino. Show all posts

Friday, August 19, 2016

Transmit serial data to an Android device, :)


.(Independent multitasking LEDs blink using Arduino FreeRTOS, and send the data wirelessly using bluetooth module HC-05. :) )



http://ift.tt/2b4YNBe.

the code is same as here

Thursday, August 18, 2016

Independent LEDs Blinking



 using Arduino FreeRTOS, realtime multi tasking, :)

 I programmed LED on pin 2, 3, 4 and 13 to blink at its own time. The advantage of this Arduino FreeRTOS is we don't have to calculate the timing of each pin in respect of sequential execution. It's has its own task and schedule, independent of each other.



http://ift.tt/2b4jwFJ.


#include <Arduino_FreeRTOS.h>
int n = 0;

// define two tasks for Blink & AnalogRead
void TaskBlink( void *pvParameters );
void TaskBlink2( void *pvParameters );
void TaskBlink3( void *pvParameters );
void TaskBlink4( void *pvParameters );
void TaskTadaa( void *pvParameters );

// the setup function runs once when you press reset or power the board
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);

// Now set up two tasks to run independently.
xTaskCreate(
TaskBlink
, (const portCHAR *)"Blink" // A name just for humans
, 128 // Stack size
, NULL
, 2 // priority
, NULL );
xTaskCreate(TaskBlink2,(const portCHAR *)"Blink2",128, NULL,2,NULL );
xTaskCreate(TaskBlink3,(const portCHAR *)"Blink3",128, NULL,2,NULL );
xTaskCreate(TaskBlink4,(const portCHAR *)"Blink4",128, NULL,2,NULL );

xTaskCreate(
TaskTadaa
, (const portCHAR *) "Tadaa"
, 128 // This stack size can be checked & adjusted by reading Highwater
, NULL
, 1 // priority
, NULL );

// Now the task scheduler, which takes over control of scheduling individual tasks, is automatically started.
}

void loop()
{
// Empty. Things are done in Tasks.
}

/*--------------------------------------------------*/
/*---------------------- Tasks ---------------------*/
/*--------------------------------------------------*/

void TaskBlink(void *pvParameters) // This is a task.
{
(void) pvParameters;

// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);

for (;;) // A Task shall never return or exit.
{
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
Serial.println("LED 13 Nyala");
vTaskDelay( 1000 / portTICK_PERIOD_MS ); // wait for one second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
Serial.println("LED 13 Padam");
vTaskDelay( 1000 / portTICK_PERIOD_MS ); // wait for one second
}
}
void TaskBlink2(void *pvParameters){
(void) pvParameters;
pinMode(2, OUTPUT);
for (;;) {
digitalWrite(2, HIGH); vTaskDelay( 2000 / portTICK_PERIOD_MS );Serial.println("LED 2 Nyala");
digitalWrite(2, LOW); vTaskDelay( 2000 / portTICK_PERIOD_MS );Serial.println("LED 2 Padam");
}
}

void TaskBlink3(void *pvParameters){
(void) pvParameters;
pinMode(3, OUTPUT);
for (;;) {
digitalWrite(3, HIGH); vTaskDelay( 500 / portTICK_PERIOD_MS );Serial.println("LED 3 Nyala");
digitalWrite(3, LOW); vTaskDelay( 1500 / portTICK_PERIOD_MS );Serial.println("LED 3 Padam");
}
}

void TaskBlink4(void *pvParameters){
(void) pvParameters;
pinMode(4, OUTPUT);
for (;;) {
digitalWrite(4, HIGH); vTaskDelay( 500 / portTICK_PERIOD_MS );Serial.println("LED 4 Nyala");
digitalWrite(4, LOW); vTaskDelay( 250 / portTICK_PERIOD_MS );Serial.println("LED 4 Padam");
}
}

void TaskTadaa(void *pvParameters) // This is a task.
{
(void) pvParameters;
for (;;)
{
// read the input on analog pin 0:
n++;
if (n>100){n = 0;}
// print out the value you read:
Serial.print("Tadaa...");
Serial.println(n);
vTaskDelay(2000/portTICK_PERIOD_MS);// 2 second delay
// one tick delay (15ms) in between reads for stability
}
}

Arduino FreeRTOS


(Real Time Operating System).

Multi Tasking on Arduino Nano.

Led Blink and Serial Communication



http://ift.tt/2b30d2l.
#include

int n = 0;

// define two tasks for Blink & AnalogRead
void TaskBlink( void *pvParameters );
void TaskTadaa( void *pvParameters );

// the setup function runs once when you press reset or power the board
void setup() {


// Now set up two tasks to run independently.
xTaskCreate(
TaskBlink
, (const portCHAR *)"Blink" // A name just for humans
, 128 // Stack size
, NULL
, 2 // priority
, NULL );

xTaskCreate(
TaskTadaa
, (const portCHAR *) "Tadaa"
, 128 // This stack size can be checked & adjusted by reading Highwater
, NULL
, 1 // priority
, NULL );

// Now the task scheduler, which takes over control of scheduling individual tasks, is automatically started.
}

void loop()
{
// Empty. Things are done in Tasks.
}

/*--------------------------------------------------*/
/*---------------------- Tasks ---------------------*/
/*--------------------------------------------------*/

void TaskBlink(void *pvParameters) // This is a task.
{
(void) pvParameters;

// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);

for (;;) // A Task shall never return or exit.
{
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
vTaskDelay( 1000 / portTICK_PERIOD_MS ); // wait for one second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
vTaskDelay( 1000 / portTICK_PERIOD_MS ); // wait for one second
}
}

void TaskTadaa(void *pvParameters) // This is a task.
{
(void) pvParameters;

// initialize serial communication at 9600 bits per second:
Serial.begin(9600);

for (;;)
{
// read the input on analog pin 0:
n++;
if (n>100){n = 0;}
// print out the value you read:
Serial.print("Tadaa...");
Serial.println(n);
vTaskDelay(2000/portTICK_PERIOD_MS);// 2 second delay
// one tick delay (15ms) in between reads for stability
}
}

Wednesday, August 10, 2016

Can not Detect Arduino Nano on El Capitan?

It because the nano used CH341 usb to serial adapter that will not install because El Capitan enforces kext driver signing.

So, I trace the step from https://tzapu.com/making-ch340-ch341-serial-adapters-work-under-el-capitan-os-x/

...and it works again, :)

To disable kext signing:

- Reboot and press CMD+R immediately after the chime to enter Recovery Mode
- Open Terminal from Recovery mode
- run the command csrutil enable --without kext
- run the command reboot







Monday, August 1, 2016

Old Mechanical Keyboard KPT-102 on iPad



Old Clicky Mechanical Keyboard on iPad, using Arduino as PS/2 to HID signal converter, :)

I use the code from https://gist.github.com/DorianRudolph/ca283dfdfd185bc812b7

But, as I use OSX, I can'n do this

"To make the programs work you need to open the file hardware/arduino/avr/cores/arduino/USBAPI.h located in your Arduino folder and make the Keyboard_::sendReport method public.
"

To do that I open the Finder, go to Applications Folder right click Arduino App, select Show Package Content and adit Keyboard.h at /Applications/Arduino.app/Contents/Java/libraries/Keyboard/src

Update: I tucked the Arduino  Pro Micro inside keyboard, :)


















http://ift.tt/2aIwnlw.

Saturday, July 30, 2016

Upload Sketch of Arduino Pro Micro on Standart IDE



Yup, we could choose Leonardo to upload sketch to Arduino Pro Micro, without Sparkfun addOn.



http://ift.tt/2amv1Lr.

Monday, May 25, 2015

ATTiny13A Arduino

ATTiny is ... well, tiny. Not very suitable to programed it on arduino. Nevertheless, I decided to do it.



Create ‘hardware’ folder in Arduino sketch folder, unzip the file.
Download the Smeezekitty core, http://sourceforge.net/projects/ard-core13/files/latest/download

Unzip it, copy the files, paste in …/hardware/attiny/avr/variants/core13/ (if folder didn’t exist, create it)
edit the boards.txt files at
…/hardware/attiny/avr/boards.txt
boards.txt
menu.cpu=Processor
menu.clock=Clock
attiny.name=ATtiny
attiny.bootloader.tool=arduino:avrdude
attiny.bootloader.unlock_bits=0xff
attiny.bootloader.lock_bits=0xff
attiny.build.core=arduino:arduino
attiny.build.board=attiny
attiny.upload.tool=arduino:avrdude
#attiny.upload.tool=usbasp

#################################################
attiny.menu.cpu.attiny13=ATtiny13
attiny.menu.cpu.attiny13.upload.maximum_size=1024
attiny.menu.cpu.attiny13.build.mcu=attiny13
attiny.menu.cpu.attiny13.build.variant=core13

attiny.menu.clock.internal96=9.6MHz (internal)
attiny.menu.clock.internal96.bootloader.low_fuses=0x7A
attiny.menu.clock.internal96.bootloader.high_fuses=0xff
attiny.menu.clock.internal96.build.f_cpu=9600000L

################################################

attiny.menu.clock.internal48=4.8MHz (internal)
attiny.menu.clock.internal48.bootloader.low_fuses=0x79
attiny.menu.clock.internal48.bootloader.high_fuses=0xff
attiny.menu.clock.internal48.build.f_cpu=4800000L
################################################


avrdude give the error because my downloader need -B4 option (I installed new bootloader, flash it, remove auto sck, so the avrdude warning gone)

In order to be able to upload it to ATTiny13A, we have to edit the file.

Macintosh HD/Applications/Arduino/Contents/Java/Hardware/arduino/avr/programmers.txt

edit it


usbasp.name=USBasp
usbasp.communication=usb
usbasp.protocol=usbasp
usbasp.program.protocol=usbasp
usbasp.program.tool=avrdude
usbasp.program.extra_params=-Pusb -B4


start arduino IDE

it give firewall warning

so 

undo the edit or reinstall the arduino

create programmers.txt in the same folder with  boards.txt


usbasp.name=USBaspN
usbasp.communication=usb
usbasp.protocol=usbasp
usbasp.program.protocol=usbasp
usbasp.program.tool=avrdude
usbasp.program.extra_params=-Pusb -B4


we use USBaspN 


Blink without delay,  


const int ledPin =  1;      // the number of the LED pin
int ledState = LOW; // ledState used to set the LED
unsigned long previousMillis = 0; // will store last time LED was updated
const long interval = 1000; // interval at which to blink (milliseconds)
void setup() {
pinMode(ledPin, OUTPUT);
}

void loop()
{
unsigned long currentMillis = millis();
if(currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
digitalWrite(ledPin, ledState);
}
}


For some reason, the delay on LED seem longer than 1 s (but it worked).  Maybe it’s the same reason the blink example (with delay.) didn’t work



. .













Wednesday, May 6, 2015

Adding Analog Sensor on My Arduino Nano LCD Project

 I add the code from previous project so it could read analog sensor from pin A0 and display it on second row LCD.

I use a potentiometer to emulate the sensor.

 So as result, this ATMEGA328 based device could:
- read digital sensor from pin 7, display it on second rowLCD
- if pin 7 is high, LED connected to pin 10 will turned on, otherwise it'll turned off
- communicate via bluetooth using dedicated serial port (RX= 8 , TX = 9)
- write any string sent from bluetooth to first row LCD
- read string length sent from bluetooth, display it on second row LCD.
- embedded LED connected to pin 13 is on if there's bluetooth serial communication





#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
.
SoftwareSerial mySerial(8, 9); // RX, TX
int t=1;
int i=1;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);//rs e d4 d5 d6 d7
String tulisan = "Tadaa..., heheh...., hihihi :)";
String info =":)";
void setup() {
pinMode(7,INPUT);
pinMode(6,OUTPUT);
pinMode(10,OUTPUT);
pinMode(13,OUTPUT);
lcd.begin(16, 2);
lcd.print(tulisan);
mySerial.begin(9600);
Serial.begin(9600);//port serial resmi
delay(1000);
}


void loop() {
//lcd.clear();
if (digitalRead(7)==1){
digitalWrite(10,HIGH);
}else{
digitalWrite(10,LOW);
}
if (mySerial.available()){
digitalWrite(13,HIGH);
while(mySerial.available()>0){
t=1;
lcd.clear();
tulisan=mySerial.readString();
mySerial.println(tulisan);
}
}
lcd.setCursor(1,0);
lcd.print(tulisan);
int l= tulisan.length()-12;
info ="P7=";
info+=digitalRead(7);
info+=",l=";
info+=tulisan.length();
info+=",a=";
info+=analogRead(A0);
lcd.setCursor(t,1);
lcd.print(info);
digitalWrite(13,LOW);
if (l>16){
lcd.scrollDisplayLeft();
t++;
if (t>=l){
t=1;
lcd.clear();
}
}
delay(1000);
}
//PWM: 3, 5, 6, 9, 10, and 11

.


here my fritzing sketch (couldn't found the HC05 bluetooth module on partlist, :) )


Saya tambah dari proyek sebelumnya sehingga dapat membaca sensor analog dari pin A0 dan menampilkannya di LCD baris kedua.

Saya menggunakan potensiometer untuk mewakili sensornya.

Jadi, hasil akhir dari proyek ini adalah sebuah alat berbasis ATMega328 yang dapat:
- membaca sensor digital dari pin 7 dan menampilkannya di baris kedua LCD
- jika pin 7 high, LED yang terhubung ke pin 10 akan menyala, jika tidak LED tetap padam
- berkomunikasi via bluetooth menggunakan port serial tersendiri (RX=8, TX=9)
- menulis sebarang string yang dikirim dari bluetooth ke baris pertama LCD
- membaca panjang string yang dikirim lewat LCD dan menampilkannya di baris kedua LCD
- LED di board yang terhubung ke pin 13 menyala jika ada komunikasi serial via bluetooth





Thursday, April 30, 2015

Scrolling LCD 16x2 First Row Only

 It's tricky but not impossible

 All I have to do is update the cursor position of second row so it seems still. :)





#include <SoftwareSerial.h>
#include <LiquidCrystal.h>

SoftwareSerial mySerial(8, 9); // RX, TX
int t=1;
int i=1;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);//rs e d4 d5 d6 d7
String tulisan = "Tadaa..., heheh...., hihihi :)";
String info =":)";
void setup() {
pinMode(7,INPUT);
pinMode(6,OUTPUT);
pinMode(10,OUTPUT);
pinMode(13,OUTPUT);
lcd.begin(16, 2);
lcd.print(tulisan);
mySerial.begin(9600);
delay(1000);
}


void loop() {
//lcd.clear();
if (digitalRead(7)==1){
digitalWrite(10,HIGH);
}else{
digitalWrite(10,LOW);
}
if (mySerial.available()){
digitalWrite(13,HIGH);
while(mySerial.available()>0){
tulisan=mySerial.readString();
mySerial.println(tulisan);
}
}
lcd.setCursor(1,0);
lcd.print(tulisan);
//scroll first row if text length's beyond 16
int l= tulisan.length()-12;
info ="P7=";
info+=digitalRead(7);
info+=",l=";
info+=tulisan.length();
lcd.setCursor(t,1);
lcd.print(info);
digitalWrite(13,LOW);
lcd.scrollDisplayLeft();
t++;
if (t>=l){
t=1;
lcd.clear();
}
delay(1000);
}
//PWM: 3, 5, 6, 9, 10, and 11

.

Agar output LCD hanya bagian atas saja yang scroll sedangkan yang baris kedua tetap diam.

Triknya adalah memberi LCD perintah scroll seperti biasa di arduino namun kita mengupdate posisi kursor di baris kedua agar tulisan selalu nampak di layar (dalam hal ini adalah string bernama 'info')

Read Digital Pin and Serial Message, Display it on LCD using Arduino

 In addition of my previous tinkering with LCD on arduino nano, I add a chunk of program to display the state of digital pin 7 on second row LCD.

I also remove the scroll command, package it as separate function but not called. I plan to using another scrolling method, some code without delay. (had it in mind, but still lazy to coding it, maybe next)




#include <softwareSerial.h>
#include<liquidCrystal.h>
SoftwareSerial mySerial(8, 9); // RX, TX

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);//rs e d4 d5 d6 d7
String tulisan = "Tadaa...";
String info =":)";
void setup() {
pinMode(7,INPUT);
pinMode(6,OUTPUT);
pinMode(10,OUTPUT);
pinMode(13,OUTPUT);
lcd.begin(16, 2);
lcd.print(tulisan);
mySerial.begin(9600);
delay(1000);
}


void loop() {
if (digitalRead(7)==1){
digitalWrite(10,HIGH);
}else{
digitalWrite(10,LOW);
}
if (mySerial.available()){
lcd.clear();
digitalWrite(13,HIGH);
while(mySerial.available()>0){
lcd.setCursor(0,0);
tulisan=mySerial.readString();
mySerial.println(tulisan);
lcd.print(tulisan);
}
}

//scLeft();
//scRight();
//scDef();
info ="Pin7 = ";
info+=digitalRead(7);

lcd.setCursor(0,1);
lcd.print(info);
digitalWrite(13,LOW);
delay(1000);
}

void scLeft(){
for (int i = 0; i < tulisan.length(); i++) {
lcd.scrollDisplayLeft();
delay(150);
}
}

void scRight(){
for (int i = 0; i < (tulisan.length()+16); i++) {
lcd.scrollDisplayRight();
delay(150);
}
}

void scDef(){
for (int i = 0; i < 16; i++) {
lcd.scrollDisplayLeft();
delay(150);
}
}
//PWM: 3, 5, 6, 9, 10, and 11


.


Menulis perintah ke baris pertama LCD via bluetooth, baris kedua digunakan untuk mengecek pin 7 (digital). Fitur scrill (di post sebelumnya dihilangkan, ada di bawah sebagai function tetapi tak dipanggil di program utama)



Monday, April 27, 2015

Displaying and Scrolling Text Typed via Serial Monitor on Arduino Nano

 Here we go. The challenge is reading serial data and store it in string, but fortunately there is readString command, :)

(I take the shoot from Photo Booth on my Mac)




#include <LiquidCrystal.h>

.
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);//rs e d4 d5 d6 d7
String tulisan = "Tadaa...";
void setup() {
lcd.begin(16, 2);
lcd.print(tulisan);
Serial.begin(9600);
delay(1000);
}

void loop() {
if (Serial.available()){
lcd.clear();
while(Serial.available()>0){
tulisan=Serial.readString();
lcd.print(tulisan);
}
}
// scroll 13 positions (string length) to the left
// to move it offscreen left:
for (int i = 0; i < tulisan.length(); i++) {
// scroll one position left:
lcd.scrollDisplayLeft();
// wait a bit:
delay(150);
}

// scroll 29 positions (string length + display length) to the right
// to move it offscreen right:
for (int i = 0; i < (tulisan.length()+16); i++) {
// scroll one position right:
lcd.scrollDisplayRight();
// wait a bit:
delay(150);
}

// scroll 16 positions (display length + string length) to the left
// to move it back to center:
for (int i = 0; i < 16; i++) {
// scroll one position left:
lcd.scrollDisplayLeft();
// wait a bit:
delay(150);
}

// delay at the end of the full loop:
delay(1000);

}

.


Menampilkan dan men-scroll text yang diketik menggunakan monitor serial di arduino nano.

Tantangannya adalah membaca serial data dan menyimpannya sebagai string. Di versi lama, kita harus membaca komunikai serial sebagai char yang tentu saja sangat merepotkan. Untungnya kita mempunyai perintah readString, :)

Arduino Nano Clone on OS X Yosemite

 After subconsciously try it on my debian machine about a week, now when I have a chance to write on arduino IDE on my Macbook, it wont upload the sketch, no port for nano.

installing FTDI driver didn't help because it use CH340G chip for com.

Grab the driver from http://www.wch.cn/downloads.php?name=pro&proid=178

install it

restart,

no change, :(

found out that we have to run this on terminal

sudo nvram boot-args="kext-dev-mode=1"

reboot,

yup, the life is easier again, :)







Thursday, April 23, 2015

Mengirim Perintah ke Arduino Nano via Bluetooth

Menggunakan HC-05

Arduino Nano

Menyalakan LED 13 (blink tanpa delay)

Menyalakan LED 3 dengan mode PWM dengan perintah analogRead, sehingga nyala LED berangsur-angsur dari redup ke terang ke redup lagi (255 tingkat kecerahan).

Menyalakan LED 2 dengan perintah  melalui port serial bluetooth dari Mac OS X.

(program ditulis dan dijalankan di linux Debian)

led pin 3 dapat dinyalakan (setelah microcontroler tersambung dengan komputer via bluetooth) dengan mengetikkan 'nyala' atau 'mati' pada konsole di komputer.




#include <softwareserial .h>

SoftwareSerial hc05(11,12); //RX TX

String baca;

int t=0;
int dt=1;
void setup() {
hc05.begin(9600);
hc05.println("Tadaa...");
pinMode(13, OUTPUT);
pinMode(2, OUTPUT);
}

void loop() {
t+=dt;
//hc05.print("nilai t = ");
//hc05.println(t);
while (hc05.available()){
char c = hc05.read();
baca += c;
}
if(baca.length()>0){
hc05.println(baca);
if (baca.indexOf("nyala")>=0){
digitalWrite(2,HIGH);
}
if (baca.indexOf("mati")>=0){
digitalWrite(2,LOW);
}
}

baca="";
if(t>=255){
dt=-1;
digitalWrite(13, LOW);
}
if(t<=0){
dt=1;
digitalWrite(13,HIGH);
}
analogWrite(3,t);
delay(27);
}
      

.






Wednesday, April 15, 2015

Fritzing, One Stop Apps for MicroController

We could write code in it, connecting parts on breadboard (or project-board), auto-route it to schematic and pcb layout (single or double layer).

It has several arduino board ready on parts section







Dengan Fritzing, kita bisa menulis kode mikrocontroler di sini, memasang komponen dan menyambung dengan kabel di project-board, kemudian me-route secara otomatis menjadi skematik seperti di EWB (Electronic Work Bench), routing otomahis juga dilakukan untuk menghasilkan layout PCB seperti di Protel (mendukung single dan double-layer)

Saturday, April 11, 2015

Blink Without Delay Problem on Arduino

Well, not for all, but for me it becomes problem while turning led on using analogWrite command, some led just won’t completely shut down.

(Maybe it completely unrelated, but my analog reading on A0 is oscillating, very unstable)



I have the commands packed on a function

unsigned long t0 = 0;
const long dt = 1000;
void blinkNoD(int pin) {
unsigned long t = millis();
if(t - t0 >= dt) {
t0 = t;
led=!led;
digitalWrite(pin, led);
}
}



Since I already have delay in loop, and it really messed with the timing (not mention that maybe the analog reading instability have anything to do with it), I decided to modify the blink code, still without delay command.

unsigned long t0 = 0;
const long dt = 1;
void blinkNoD(int pin) {
t0 += dt
if(t0 >= 4) {
t0 = 0;
led=!led;
digitalWrite(pin, led);
}
}

It turned out that my analogRead instability is another problem, get to work on it, :)


323f (5) amp (1) android (12) apple (7) arduino (18) art (1) assembler (21) astina (4) ATTiny (23) blackberry (4) camera (3) canon (2) cerita (2) computer (106) crazyness (11) debian (1) delphi (39) diary (286) flash (8) fortran (6) freebsd (6) google apps script (8) guitar (2) HTML5 (10) IFTTT (7) Instagram (7) internet (12) iOS (5) iPad (6) iPhone (5) java (1) javascript (1) keynote (2) LaTeX (6) lazarus (1) linux (29) lion (15) mac (28) macbook air (8) macbook pro (3) macOS (1) Math (3) mathematica (1) maverick (6) mazda (4) microcontroler (35) mountain lion (2) music (37) netbook (1) nugnux (6) os x (36) php (1) Physicist (29) Picture (3) programming (189) Python (109) S2 (13) software (7) Soliloquy (125) Ubuntu (5) unix (4) Video (8) wayang (3) yosemite (3)