Projek Arduino Dengan LCD Menggunakan 3 Jenis LCD Yang Berbeda

12:43 PM Comment

 

Pada pembahasan ini akan dibahas mengenai tiga layar LED kecil dan murah yang dapat Anda sambungkan dengan mudah ke Arduino Anda.

Teknologi

Perangkat ini adalah Liquid Crystal Displays dan telah ada selama beberapa waktu. Mereka tidak memancarkan cahaya tetapi menghalanginya. Mereka mungkin memiliki lampu latar atau mengandalkan cahaya yang dipantulkan.

Setiap tampilan terdiri dari beberapa lapisan dan memanfaatkan cahaya terpolarisasi. Jika Anda mempolarisasi cahaya secara horizontal dengan satu filter, Anda dapat memotong cahaya sepenuhnya dengan filter terpolarisasi vertikal. Beberapa cairan akan memutar sudut polarisasi ketika tegangan diterapkan pada mereka yang memungkinkan cahaya terpolarisasi melewati filter.

Mereka disebut " twisted nematic liquid crystals". Jika Anda menjepit kristal seperti itu di antara dua polarisator, bersilangan pada 90°, cahaya biasanya akan terhalang. Jika tegangan diterapkan pada kristal, ia 'memutar' polarisasi cahaya saat melewati kristal dan diizinkan melalui filter polarisasi kedua. Layar kristal cair terdiri dari banyak lapisan tetapi tetap sangat tipis.

Salah satu penggunaan pertama layar LCD adalah dengan kalkulator elektronik pada awal 1970-an, menggantikan layar 8 segmen merah kecil sebelumnya dengan lensa pembesar. Perangkat monokrom kecil ini segera digunakan dalam jam, jam tangan, dan aplikasi kecil berdaya rendah lainnya.

Kelebihan

  • Kontras tinggi
  • Biaya rendah
  • Daya rendah
  • Kompak dan sangat ringan

Kekurangan

  • Seringkali membutuhkan sumber cahaya tambahan
  • Rentan
  • Lambat bereaksi

pada artikel kali ini menggunakan :

  • Layar OLED MakerHawk i2C dengan 128x64 piksel (biru)
  • Layar OLED MakerHawk i2C dengan 128×32 piksel (putih)
  • HD44780 2004 Tampilan dengan konverter i2C (4 baris 20 karakter)

Dua yang pertama dapat menampilkan elemen grafis (garis, lingkaran, gambar dll dan teks) sedangkan yang terakhir adalah tampilan karakter saja.

Tampilan OLED MakerHawk dengan chip driver SSD1306

Ini adalah perangkat I2C dan hanya perlu dihubungkan ke 3.3V-5V, GND, SCL, dan SDA. Bentuknya sangat kecil (diagonal masing-masing 0,96” dan 0,91”) ringan, dengan piksel kecil dan kontras yang sangat baik, membuatnya sangat mudah dibaca. Layar yang lebih besar berwarna biru sedangkan yang lebih kecil berwarna putih.

Mereka tidak memiliki lampu latar dan mengandalkan refleksi. Yang lebih besar dilengkapi dengan 40 kabel DuPont FF berwarna dan pin sambungan yang perlu disolder ke papan. Anda mendapatkan dua layar yang lebih kecil dalam paket, tetapi tidak ada pin koneksi, soket, atau kabel. Tidak ada informasi yang diberikan tentang cara menghubungkannya ke Arduino Anda atau cara mengontrolnya. Layar dilindungi dengan penutup plastik. (Lepaskan dengan hati-hati karena layarnya halus.) Empat sambungan untuk I2C ditandai dengan jelas di papan. Kedua perangkat memiliki alamat I2C 0x3C.

Langkah selanjutnya adalah menyolder pada pin atau soket dan menghubungkannya ke Arduino Anda.

Layar OLED MakerHawk 12C dengan 128×64 (biru)


Projek Arduino Dengan LCD  Menggunakan 3 Jenis LCD Yang Berbeda

Proyek #1: Menggunakan Arduino dengan papan LCD 128×64 piksel SSD1306

Bahan yang dibutuhkan:

  • Arduino – UNO standar atau kloning
  • Layar OLED MakerHawk 12C dengan 128×64
  • Menghubungkan kabel
  • Potensiometer 10K Ohm

Projek Arduino Dengan LCD  Menggunakan 3 Jenis LCD Yang Berbeda

Untuk demonstrasi ini potensiometer akan memberikan tegangan input variabel pada pin A0 Arduino.

A4 adalah pin SDA dan A5 adalah pin SCL pada Arduino UNO. Papan lain mungkin memiliki pin yang berbeda, jadi periksalah sebelum Anda menghubungkannya. VCC pergi ke 5V dan GND ke GND. Penghapus potensiometer menuju A0 pada Arduino dan pin lainnya ke 5V dan GND.

Sekarang kita perlu mendapatkan library yang sesuai untuk papan SSD1306 dan untuk tampilan grafis. Adafruit telah menyediakan beberapa perpustakaan yang sangat berguna yang mudah dipasang pada versi Arduino IDE saat ini.

Mulai perangkat lunak Arduino dan gunakan Manajer Perpustakaan untuk mencari dan menginstal perpustakaan Adafruit SSD1306 (2.2.1 pada saat penulisan). Ini mencakup ukuran papan dan versi I2C dan SPI. Itu juga menginstal semua dependensi. Ambil opsi untuk menginstal pustaka GFX dan pustaka BusIO secara bersamaan (https://github.com/adafruit/Adafruit_SSD1306

Periksa di bagian bawah Menu Contoh bahwa semua library yang diperlukan telah diinstal.

Projek Arduino Dengan LCD  Menggunakan 3 Jenis LCD Yang Berbeda


Perhatikan bahwa library mencakup kedua ukuran layar serta protokol SPI dan I2C.

Sekarang kita siap untuk melihat dapat melihat apa yang dapat dilakukan oleh layar. Saya telah menyediakan beberapa skrip untuk menunjukkan keserbagunaan tampilan ini. Yang pertama menunjukkan kemampuan grafis, tanpa campur tangan pengguna melalui potensiometer. Saya telah menyertakan banyak komentar sehingga Anda dapat melihat apa yang sedang terjadi.

Projek Arduino Dengan LCD  Menggunakan 3 Jenis LCD Yang Berbeda


Asal layar adalah kiri atas (0,0) dengan 128 piksel horizontal (0…127) bergerak ke kanan dan 64 piksel vertikal (0…63) bergerak ke bawah.

Projek Arduino Dengan LCD  Menggunakan 3 Jenis LCD Yang Berbeda


Layarnya mungkin kecil tetapi sangat jernih dan tajam dengan ruang yang cukup untuk menjadi sangat berguna.

[program1]
#include 
#include 
#include 

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

void show() { // Often used sequence - Function to simplify code
  display.display();
  delay(2000);
  display.fillScreen(SSD1306_BLACK);
}
void show2() { // Faster
  display.display();
  delay(400);
  display.fillScreen(SSD1306_BLACK);
}
void setup() {
  Serial.begin(9600);
  randomSeed(analogRead(0));
  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Old Address 0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }
  
// Initialise some variables
  int cw = SSD1306_WHITE; // colour white
  int cb = SSD1306_BLACK; // colour black
  int wait = 2000; // 2 second delay
  int x0 = 7; // 3 pairs of co-ordinates
  int y0 = 7;
  int x1 = 123;
  int y1 = 23;
  int x2 = 50;
  int y2 = 61;
  int w = 117; // Width
  int h = 56;  // Height
  
// Draw a Title screen
  display.clearDisplay();
  display.setTextSize(2);              // Middle
  display.setTextColor(cw);
  display.setCursor(0,15);
  display.println("SSD1306");
  display.println("       GFX");
  display.setCursor(10,53);
  display.setTextSize(1);
  display.println("Tutorial45.com");
  display.display(); delay(wait);
  randomSeed(analogRead(1));
  display.fillScreen(cw);              // Fill screen WHITE
  display.setTextColor(cb);
  display.setCursor(40,53);
  display.println("Tutorial45.com");
  display.setTextColor(cw);
  display.display(); delay(wait); 
  display.fillScreen(cb);              // Fill screen BLACK
  display.display();
  
// Display some Pixels
  for (int m = 0; m <= 17; m++)  {     // 17 random pixels
    int xx = random(127);
    int yy = random(63);
    display.drawPixel(xx, yy, cw);
    display.display();
    delay(130);
  }
  delay(wait); 
  display.clearDisplay();
  
// Draw a Sine curve
  float sine[127]; 
// Initialise variables
  display.fillScreen(cb);
  display.setTextColor(cw);
  display.setCursor(10,56);
  display.setTextSize(1);
  display.println("Sine Curve");
  display.drawFastHLine(0, 32, 127 ,cw);
  for (int i = 0; i < 128; i++){
    sine[i] = (sin(radians(i *2.8125))) * -1; 
    display.drawPixel(i,int(sine[i]*25+32),cw);
    display.display();
  }
  show();

// Demonstrate basic shapes
  display.drawLine(x0, y0, x1, y1 + 30, cw);
  show2();
  display.drawFastVLine(50, 12, h, cw);  // Fast vertical line of length l
  show2();
  display.drawFastHLine(5, 45, w ,cw);   // Fast horizontal line of length w 
  show2();
  // Random lines
  for( int m = 0; m <10 -1="" -="" 0..3="" 0="" 0ptions="" 10="" 11="" 127="" 130="" 14="" 180="" 1:1="" 1="" 21="" 270="" 2="" 31="" 32="" 4="" 5="" 64="" 90="" a="" along="" and="" at="" backgnd="" blocky="" cb="" ch="" char="" circles="" code="" colour="" corner="" corners="" cw="" degrees="" delay="" display.cleardisplay="" display.display="" display.drawchar="" display.drawcircle="" display.drawfasthline="" display.drawfastvline="" display.drawline="" display.drawrect="" display.drawroundrect="" display.drawtriangle="" display.fillcircle="" display.fillrect="" display.fillroundrect="" display.filltriangle="" display.print="" display.println="" display.setcursor="" display.setrotation="" display.settextcolor="" display.settextsize="" draw="" empty="" ext="" few="" finish="" float="" for="" foregnd="" grid="" h="" halts="" har="" inished="" int="" large="" linear="" loop="" m="" medium="" middle="" moving="" msg2="" msg="" n="" normal="" of="" otate="" p="" path="" pixel="" program="" r="" radius="" rather="" rduino="" rotation="" rounded="" rt="" scale="" screen="" show2="" show="" size="" sizes="" splash="" start="" text="" the="" title="" top-left="" tutorial45.com="" up="" utorial45.com="" values="" void="" w="" wait="" which="" white="" x0="" x1="" x2="" x="" xl="" xr="" xx="" y0="" y1="(cos(radians(p" y2="y2" y="" yl="" yr="" yy="">

Yang paling penting untuk diingat adalah bahwa tidak ada perubahan yang ditentukan oleh skrip yang akan benar-benar muncul di layar sampai instruksi display.display() dijalankan. Perubahan berlangsung di latar belakang dan instruksi ini memaksa pembaruan ke tampilan. Dalam skrip ini sering disembunyikan di dalam rutin show().

Ingatlah bahwa ini adalah tampilan monokrom sederhana jadi kami hanya memiliki dua warna.

Contoh kedua menunjukkan pengguna memperbarui tampilan dengan mengubah input fisik. Saat potensiometer diputar, beberapa nilai yang ditampilkan berubah dan grafik batang berubah panjangnya.

Projek Arduino Dengan LCD  Menggunakan 3 Jenis LCD Yang Berbeda


[program2]

#include               
#include 
#include 

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

int sensorPin = A0;   // select the input pin for the potentiometer
int sensorValue = 0;  // variable to store the value coming from the sensor

void setup() {
  Serial.begin(9600);
  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }
  display.clearDisplay();
  display.setTextSize(1);             // Small
  display.setTextColor(SSD1306_WHITE); 
  display.setCursor(0,0);             // Top Left corner
  display.println("SSD1306 Project");
  display.setCursor(20,10);
  display.println("Volts - Turn Pot");
  display.setCursor(64,118);
  display.setCursor(0,57);
  display.println("  Raw Pot    Volts");
  display.display();
}
// Functions for right alignment of integers
int iAlign2(int s){  // Space in 100s and 10s
  if (s < 100) {display.print(" ");}
    if (s < 10) {display.print(" ");}    
}
int iAlign3(int s){  // Space in 1000s
  if (s < 1000) {display.print(" ");}
  iAlign2(s);
}
int bar(int yy,int v) {
  display.drawLine(0,yy,0,yy+14, SSD1306_WHITE);
  display.fillRect(1,yy+2,127,10,SSD1306_BLACK);
  display.fillRect(0,yy+2,v,10, SSD1306_WHITE);
  display.setCursor(102,yy+2);
  iAlign2(v);
  display.print(v);
  display.println("%");
  display.display();
}
// ++++++++++++Main Loop ++++++++++++++
void loop() {
  // Read pot and display values
  sensorValue = analogRead(sensorPin); // Read the value from the sensor
  float volts = (sensorValue * 5.0 / 1023.0);  // Calculate voltage
  int x = float(sensorValue * 100.0/1018);     // Calculate percentage
  bar(20,x);  // Redraw bar graph
  display.fillRect(0, 40, 127, 15, SSD1306_BLACK); // Clear line
  display.setCursor(5,40);
  display.setTextSize(2);
  iAlign3(sensorValue);  
  display.println(sensorValue);  // Raw pot value
  display.setCursor(78,40);
  display.print(volts);          // Equivalent voltage
  display.setTextSize(1);
}

Perhatikan bahwa seluruh layar tidak diperbarui. Dua baris teratas dan baris terbawah ditulis di bagian setup(). Dalam loop kami memperbarui grafik batang dan 3 nilai. Flicker minimal dan disebabkan oleh ADC daripada layar. Nilai Raw Pot telah disejajarkan dengan benar dengan menambahkan spasi dengan fungsi.

Proyek #2 Menggunakan Arduino dengan papan LCD SSD1306 128×32 piksel

Sekarang saya akan melihat papan yang lebih kecil. Jelas, ia memiliki setengah ukuran layar papan sebelumnya, tetapi ini mungkin memiliki keuntungan jika Anda hanya ingin menampilkan sedikit informasi atau memasukkan layar ke dalam ruang yang sangat terbatas.

Koneksinya sama seperti pada tampilan sebelumnya dan diberi label dengan benar, jadi tukar saja tampilannya. Ini adalah voltmeter digital menggunakan potensiometer sebagai input.

[program3]

#include               
#include 
#include 

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 32 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

int sensorPin = A0;   // select the input pin for the potentiometer
int sensorValue = 0;  // variable to store the value coming from the sensor

void setup() {
  Serial.begin(9600);
  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }

// Title screen
  display.clearDisplay();
  display.setTextSize(2);             // Medium size
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(5,5);
  display.println("Volt Meter");
  display.setCursor(40,24);
  display.setTextSize(1); 
  display.println("Tutorial45.com");
  display.display();
  delay(3000);
// Static part of screen
  display.clearDisplay();
  display.setTextSize(1);             // Small
  display.setTextColor(SSD1306_WHITE); 
  display.setCursor(0,0);             // Top Left corner
  display.println("Volts - Turn Pot");
}

int wedge(int v,float vv) {  // Wedge shaped bar graph - like Volume control
  display.drawLine(0,12,0,31, SSD1306_WHITE);
  display.fillRect(1,12,127,20,SSD1306_BLACK);
  display.fillTriangle(0,31,v,31,v,(31 - (19*v / 100)),SSD1306_WHITE);
  display.setCursor(102,20);
  display.print(vv);
  display.display();
}
// ++++++++++++Main Loop ++++++++++++++
void loop() {
  // Read pot and display values
  sensorValue = analogRead(sensorPin); // Read the value from the sensor
  float volts = (sensorValue * 5.0 / 1023.0);  // Calculate voltage
  int x = float(sensorValue * 100.0/1023);     // Calculate percentage
  wedge(x,volts);  // Redraw bar graph
  delay(100);      // Delay to reduce jitter  
}

Ada dua cara untuk menimpa teks di layar. Cetak teks yang sama di atas teks sebelumnya dengan warna latar belakang. Ini memiliki kelemahan karena harus menyimpan nilai lama untuk dicetak ulang. Atau, Anda dapat menggambar persegi panjang berwarna latar belakang di atas teks. Saya telah menggunakan yang terakhir dalam contoh ini.

Kesimpulan

Tampilan ini tidak mahal, sangat sederhana untuk dihubungkan, menggunakan beberapa pin Arduino dan mudah diprogram. Mereka sangat jelas dan mendukung berbagai elemen grafis. Mereka mungkin agak terlalu kecil, terutama papan 128x32.

Proyek yang disarankan

Menggunakan sensor suhu, buat termometer digital Current dan Max-Min.

Menggunakan dua sensor suhu dan sensor kelembaban membuat tampilan suhu & Kelembaban Luar/Dalam.

Menggunakan joystick sebagai perangkat input (potensiometer horizontal plus vertikal dan sakelar tombol) dengan layar yang lebih besar membuat game jenis 'Etch-A-Sketch'. Posisi 'pena' saat ini dapat ditunjukkan oleh titik-titik kecil di keempat tepi layar dan tombol yang digunakan untuk beralih antara warna latar depan dan latar belakang.

Bundel Layar LCD  HD44780 2004 4×20


Projek Arduino Dengan LCD  Menggunakan 3 Jenis LCD Yang Berbeda


Anda memerlukan obeng kecil untuk menyesuaikan pengaturan pot trim biru setelah layar terhubung dan menjalankan skrip.

Ini adalah perangkat I2C lain jadi kami terhubung seperti sebelumnya. Berhati-hatilah karena pin SCL dan SDA berada dalam urutan yang berbeda dari SSD1306 Alamat I2C adalah 0x27. tersedia dari banyak produsen yang berbeda. Mereka datang dengan berbagai alamat I2C tetapi banyak library yang tersedia, seringkali dengan nama yang sama, tidak tidak membuat alamat dapat dikonfigurasi dan hanya akan berfungsi dengan papan tertentu.

Projek Arduino Dengan LCD  Menggunakan 3 Jenis LCD Yang Berbeda

Sebelum kita dapat menjalankan skrip, kita perlu mengunduh pustaka yang sesuai untuk LCD 2004 versi I2C ini. Sayangnya, AZ-Direct tidak menyarankan situs yang cocok. Saya telah menggunakan library di (https://github.com/johnrickman/LiquidCrystal_I2C) dan ternyata berfungsi dengan baik dengan papan antarmuka ini. Setelah library terinstal, kami siap untuk mencoba tampilan. Coba skrip singkat ini untuk menguji koneksi Anda:

[program4]

#include 
// https://github.com/johnrickman/LiquidCrystal_I2C
// Set LCD address to 0x27 with 20 chars by 4 lines display
LiquidCrystal_I2C lcd(0x27, 20, 4);  //(0x27, 16, 2) small LCD

// Character definitions - 5 cols x 7 rows
byte pi[8]  = {0,1,14,26,10,10,10};  // Compact version

byte smiley[8] = {                   // Easy but verbose version
  B00000,
  B01010,
  B00000,
  B00000,
  B10001,
  B01110,
  B00000,
};
byte sad[8] = {
  B00000,
  B01010,
  B00000,
  B00000,
  B01110,
  B10001,
  B00000,
};
void setup() {
  // Initialize the LCD
  lcd.init();
  // Create 3 new characters Max of 8 (0…7)
  lcd.createChar(0, pi);
  lcd.createChar(1, smiley);
  lcd.createChar(2, sad);
  
  // Set Cursor position and print text
  lcd.backlight();
  lcd.setCursor(3,0);
  lcd.print("Hello, world!");
  lcd.setCursor(3,1);
  lcd.print("Arduinos Rock");
  lcd.setCursor(0,2);
  lcd.print("Arduino LCD 2004 I2C");
  lcd.setCursor(3,3);
  lcd.print("belajarit.net");
  delay(2000);            //  Wait 2 seconds
  
  // print special characters to 4 corners of screen
  lcd.setCursor(0,3);
  lcd.write(0);
  lcd.setCursor(0,0);
  lcd.write(1);
  lcd.setCursor(19,0);
  lcd.write(2);
  lcd.setCursor(19,3);
  lcd.write(255);  // solid 5x8 block – built in
}

void loop(){}

Anda harus dapat melihat karakter putih yang jelas, cerah, dengan latar belakang biru cerah. Anda mungkin perlu menyesuaikan pot trim biru kecil di papan belakang untuk mendapatkan kontras terbaik.

Sekali lagi, titik asal berada di kiri atas dengan karakter sudut di (0, 0). Ada 20 karakter dalam satu baris (0…19) dan empat baris (0…3).

Kami harus sangat berhati-hati saat melewati garis akhir.

Mengubah

lcd.print("Arduino LCD i2c 2004");

ke

lcd.print("Arduino LCD i2c 2004xx*");

dan ubah

lcd.print("Hello, world!");

ke

lcd.print("Hello, world!123456");

Ketika kami menjalankan skrip lagi, kami menemukan bahwa baris 0 terlewat batas ke baris 2 dan baris 1 meluap ke baris 3 tetapi "*" segera ditimpa oleh "T".

Ini dapat menyebabkan beberapa masalah, jadi berhati-hatilah untuk tidak melewati garis.

Script ini juga menunjukkan definisi karakter khusus. Pengguna dapat menentukan hingga 8 karakter pada kisi 7 kali 5. Ini mudah dilakukan. Perhatikan baik-baik definisi wajah bahagia dan sedih. 1 bit menunjukkan piksel putih.

byte pi[8]  = {0,1,14,26,10,10,10};

Ini adalah program yang panjang tapi menarik dan menunjukkan set karakter 'bawaan' yang lengkap dan bagaimana karakter yang Anda kirim ke layar disimpan.

Berikut adalah script untuk menampilkan semua karakter yang tersedia.

[program5]

#include 
#include 
LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 and 20x4

byte heart[8] = {0,10,31,31,14,4,0};
byte bknht[8] = {10,31,0,31,14,4,0};
byte ok[8] = {0,1,3,22,28,8,0};
byte no[8] = {0,27,14,4,14,27,0};
byte bong[8]  = {4,14,14,14,31,0,4}; 
byte music[8]  = {2,3,2,14,30,12,0};
byte clk[8] =  {0,14,21,29,17,14,0};
byte turn[8] = {1,1,5,9,31,8,4};

void setup(){
  lcd.init();  // initialize the lcd 
  lcd.backlight();
  lcd.createChar(1, heart);
  lcd.createChar(2, bknht);
  lcd.createChar(3, ok);
  lcd.createChar(4, no);
  lcd.createChar(5, bong);
  lcd.createChar(6, music);
  lcd.createChar(7, clk);
  lcd.createChar(0, turn);
  lcd.home();

// Show the character
  int n = 0;
  while (n < 255) {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("ASCII Codes: ");
    lcd.setCursor(4,1);
    lcd.print("Dec: ");
    lcd.print(n);
    lcd.print("-");
    lcd.print(n+15);
    lcd.setCursor(4,2);
    lcd.print("Hex: ");
    lcd.print(n, HEX);
    lcd.print("-");
    lcd.print(n+15, HEX);
    lcd.setCursor(2, 3);
    for (int m=0; m<16 16="" code="" delay="" lcd.write="" loop="" m="" n="n" void="">
Projek Arduino Dengan LCD  Menggunakan 3 Jenis LCD Yang Berbeda


Proyek #3 Menggunakan Arduino dengan AZ-Delivery LCD 2004 dan FC-113 I2C

Bahan yang dibutuhkan

  • Arduino – UNO standar atau kloning
  • AZ-Delivery LCD 2004 dan ransel FC-113 I2C Menghubungkan kabel
  • Potensiometer 3 x 10K Ohm
  • 1 x RGB LED atau resistor Merah, hijau dan Biru tunggal
  • 3 x 560 Ohm resistor – nilai terdekat
  • Project board atau papan strip

Menghubungkan kabel

Projek Arduino Dengan LCD  Menggunakan 3 Jenis LCD Yang Berbeda


[program6]

#include  
#include 
#include 

LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE);  // Set the LCD I2C address

void setup()
{
  lcd.begin(20,4);
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print(">AZ-Delivery.de<");
  lcd.setCursor(0,1);
  lcd.print(">20x4 & FC-113!<");
}

void loop()
{
   lcd.setBacklight(HIGH);  // blink the backlight
   delay(1000);
   lcd.setBacklight(LOW);
   delay(1000);
}

Projek Arduino Dengan LCD  Menggunakan 3 Jenis LCD Yang Berbeda

Perbandingan

SSD1306 128×64

Kelebihan

  • Grafis luar biasa 3 ukuran karakter Pustaka dukungan luar biasa
  • Sangat jelas – kontras tinggi
  • Hanya membutuhkan 2 pin Murah Kabel gratis

Kekurangan

  • Ukuran agak kecil

SSD1306 128×32

Kelebihan

  • Grafis luar biasa 3 ukuran karakter Pustaka dukungan luar biasa
  • Sangat jelas – kontras tinggi
  • Hanya membutuhkan 2 pin(2 dalam paket)Murah

Kekurangan

  • Ukuran terlalu kecil

LCD 2004

Kelebihan

  • Sangat mudah dibaca
  • Karakter besar Mudah dilihat dari kejauhan
  • Hanya perlu 2 pin

Kekurangan

  • Tidak dapat menampilkan grafik
  • Menemukan library yang sesuai


Tutorial Menggunakan LED RGB Dengan Arduino

12:28 PM Comment

Semua orang menyukai LED, murah, mudah digunakan, dan Anda dapat dengan mudah mempelajari semua trik Arduino dengannya. Tapi di sini ada beberapa jenis LED yang lebih keren lagi, yang ini berbeda dengan LED biasa yang kami gunakan di sini. Ini disebut LED RGB.

Apa itu LED RGB?

LED RGB adalah LED tunggal yang berisi 3 LED: merah, hijau dan biru.

Ini dapat bersinar dalam lebih dari 16 juta warna dan mudah digunakan seperti LED biasa. Kami memiliki dua jenis utama LED RGB: katoda umum dan anoda umum.

Jika Anda memiliki katoda umum, Anda harus menghubungkan kaki terpanjang LED ke ground (GND) dan 3 kaki lainnya ke 3 pin Arduino. Itu bersinar di status TINGGI pin.

Jika Anda memiliki anoda umum, Anda harus menghubungkan kaki terpanjang ke VCC (5V) dan sisanya ke pin Arduino. Itu bersinar pada status RENDAH dari pin.

Jangan lupa untuk memasang resistor secara seri dengan masing-masing 3 pin antara pin Arduino dan LED

Bahan yang dibutuhkan

  • 1 x Papan Arduino Uno
  • 1 x LED RGB
  • 3 x 200 – 220Ω resistor
  • 1 x projectboard
  • Kabel jumper

Berikut adalah dua diagram untuk tujuan koneksi. Yang pertama adalah untuk arus pemicu daya anoda (saya menggunakannya) dan yang kedua adalah untuk arus daya katoda.

Apa pun yang Anda gunakan, pastikan untuk menghubungkan LED dengan benar. Kode program tidak berubah.



Tutorial Menggunakan LED RGB Dengan Arduino


Kita perlu menghubungkan 4 kabel dan 3 resistor. Berikut adalah tampilannya:


Tutorial Menggunakan LED RGB Dengan Arduino


Sekarang, kita dapat mengunggah program pertama ke Arduino. Kode berikut akan menyalakan LED merah, hijau dan biru secara berurutan.

[program]


void setup() {
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}
void loop() {
for(int r = 0; r < 255; r++){
analogWrite(9, r);
delay(10);
}
for(int g = 0; g < 255; g++){
analogWrite(10, g);
delay(10);
}
for(int b = 0; b < 255; b++){
analogWrite(11, b);
delay(10);
}
}
Tutorial Menggunakan LED RGB Dengan Arduino


Kode sebelumnya digunakan untuk menunjukkan kepada Anda tampilan dan cara kerjanya.

Sekarang, kita bisa membangun sesuatu yang lebih canggih.

Di sini, kami menggunakan fungsi acak.

Fungsi ini memanggil random([min_value], [max_value]); Itu membuat Anda mendapatkan angka acak dalam rentang, min_value (nilai terkecil yang bisa kita dapatkan adalah 0 dan nilai maksimalnya adalah 255 karena itu adalah nilai maksimal yang bisa kita tulis ke fungsi analogWrite()).

Kami memiliki 3 nilai berikut untuk setiap warna dan kami secara acak menghasilkan angka untuk warna tersebut.

Ketika current_color_value sama dengan random_color_value, kita mendapatkan nilai acak baru.

[program]
float now_r = 0, now_g = 0, now_b = 0;
float ran_r, ran_g, ran_b;
void setup() {
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
}
void loop() {
if(now_r > ran_r){
now_r--;
}else if(now_r < ran_r){
now_r++;
}else{
//we bove values are qeual we have to set new random value
ran_r = random(0, 255);
}
if(now_g > ran_g){
now_g--;
}else if(now_g < ran_g){
now_g++;
}else{
ran_g = random(0, 255);
}
if(now_b > ran_b){
now_b--;
}else if(now_b < ran_b){
now_b++;
}else{
ran_b = random(0, 255);
}
}

LED itu sendiri sangat terang dan kami tidak dapat melihatnya berubah warna. Kita harus entah bagaimana menyebarkan warnanya agar terlihat lebih baik.

Anda kemungkinan besar memiliki jenis busa ini di suatu tempat di rumah Anda, biasanya datang dalam kotak untuk melindungi isinya saat dikirim. Ini sempurna untuk ini. Buat saja lubang kecil untuk LED masuk dan kita siap untuk pergi.


Tutorial Menggunakan LED RGB Dengan Arduino


Sekian artikel kali ini semoga bermanfaat, sampai bertemu pada artikel selanjutnya. Terimakasih..

Tutorial Cara Membuat Led Cube 4 X 4 X 4 Dengan Arduino

2:16 PM Comment

 

LED Cube Anduino adalah proyek yang menarik untuk dibuat, karena dapat digunakan sebagai hiasan atau digunakan dengan peralatan lain seperti mikrofon atau sensor gerak untuk berbagai aplikasi. Pada dasarnya LED Cube adalah kubus 3 dimensi yang terbuat dari Light Emitting Diodes (LED). Kubus dapat dibuat dengan berbagai cara tetapi untuk proyek ini akan menggunakan cara yaitu dikendalikan oleh mikrokontroler Arduino Uno.

Seperti yang terlihat pada gambar di bawah, kubus terdiri dari sumbu XY dan 4 lapisan yang ditumpuk satu sama lain. Lapisan bawah adalah nomor 0 dan yang atas adalah nomor 3. Demikian pula, LED diberi nomor seperti matriks 3 dimensi. Jadi, LED kiri bawah adalah (1,1) pada layer 0. Yang di atasnya juga (1,1) tetapi pada layer 1. Yang di sebelah kanan LED sudut ini adalah (2,1) pada layer 0 dan seterusnya. Semua lapisan horizontal adalah pin positif dari LED yang disolder bersama.


Tutorial Cara Membuat Led Cube 4 X 4 X 4 Dengan Arduino

Semua pin negatif LED diletakkan pada kolom kubus matriks ini. Jadi akan memiliki 4 lapisan dan 16 kolom yang menjadikannya 20 kabel yang terhubung ke Arduino. Pin positif (lapisan) memiliki resistor 100 Ohm untuk membatasi aliran arus hingga 20mA (arus standar untuk LED).

Proses Pembuatan

Mikrokontroler – dalam kasus ini digunakan Arduino Uno, arduino uno memiliki batasan sumber arus pada pinoutnya, yaitu hanya dapat mengirimkan arus dalam jumlah yang aman sebelum terjadi kerusakan. Dalam kasus Arduino Uno, ini memiliki sumber arus 40mA. Jadi kalian pasti bertanya-tanya, tunggu dulu, jika sebuah LED membutuhkan 20mA, kenapa kita bisa menyalakan semua lampu secara bersamaan dan masih tidak membakar board Arduino? Ini karena pada waktu tertentu, hanya satu LED yang menyala.

Mata manusia (karena kegigihan penglihatan) tidak dapat melihat kedipan cepat LED jika dinyalakan dan dimatikan dengan sangat cepat. Karena kode pada Arduino berjalan sangat cepat, mata kita memikirkan beberapa LED seperti menyala. Ini juga membatasi arus ke tingkat yang aman karena pada waktu tertentu hanya satu LED yang menyala dan bahkan jika kita mengambil arus rata-rata dalam 1 detik, itu jauh di bawah ambang batas bahaya. Misalnya Anda ingin menyalakan LED di kiri bawah kubus, Anda akan memberikan sinyal positif dari mikrokontroler ke lapisannya yaitu lapisan 0, ini akan memberi tegangan positif pada pin positif LED. Kemudian Anda harus menginstruksikan mikrokontroler untuk membumikan pin kolom yang relevan dari LED itu, ini akan menghubungkan pin negatif LED ke ground dan Anda memiliki rangkaian bias maju lengkap yang akan menyalakan LED.

Bahan yang perlu disiapkan yaitu :

  • Karton atau kayu (tebal sekitar 1 inci)
  • baterai 3V
  • Amplas (kelas sedang)
  • 64 x Dioda Pemancar Cahaya Biru (LED)
  • 4 x 100 Ohm Resistor
  • 24 x Kabel Pita Berwarna Pria-Pria
  • 1 x Female Pin Socket/Header (harus memiliki 20 pin socket inline)
  • PCB Perfboard (sekitar 24×10 cm)
  • Arduino Uno + Kabel USB
  • Adaptor soket daya Arduino Uno
  • Adaptor baterai 9V
  • Baterai 9V
  • Zip-dasi (25 cm)
  • Pistol Lem + Tongkat Lem
  • Besi Solder + Kawat Solder + Busa Basah
  • Pompa Pematrian (jika penyolderan buruk)
  • Kaca pembesar (untuk melihat penyolderan Anda)
  • Pemotong Kawat Mini
  • Tang Hidung Mini
  • Kabel koneksi untuk kabel di bawah PCB (sekitar 1m) dan selotip

Tahap pembuatan led cube

Pertama-tama, Anda membutuhkan karton atau kayu yang cukup tebal (kira-kira satu inci sudah cukup). Bor lubang ke dalamnya sehingga membentuk pola kubus 4x4 dengan jarak yang sama antara semua lubang.

Dalam hal ini, pola tercetak ditempatkan di atas karton dan lubang 5mm (setiap lubang berjarak 2,4cm dari lubang berikutnya (tengah-tengah) dibor untuk LED. Pada gambar di bawah, Anda dapat melihat panah yang menunjuk ke arah kaki LED.


Tutorial Cara Membuat Led Cube 4 X 4 X 4 Dengan Arduino


Sekarang, Anda harus menguji dan menyiapkan LED Anda. Anda dapat menggunakan baterai dengan daya 3V untuk tujuan ini. Uji semua LED agar Anda terhindar dari masalah nanti kaerna jika ada led yang bermasalah akan susah menggantinya dan cukup memakan waktu ketika setelah dirangkai secara keseluruhan.


Tutorial Cara Membuat Led Cube 4 X 4 X 4 Dengan Arduino


Jika Anda ingin cahaya keluar dari semua sisi LED, Anda dapat menggosok keseluruhan kaca LED dengan amplas seperti pada gambar dibawah ini.


Tutorial Cara Membuat Led Cube 4 X 4 X 4 Dengan Arduino


Pada gambar di bawah, LED di sebelah kiri menyebar dan yang di sebelah kanan dalam bentuk transparan aslinya. Terlihat perbedaan pada cahaya yang dihasilkan.

Tutorial Cara Membuat Led Cube 4 X 4 X 4 Dengan Arduino


Ingat, bahwa kaki LED yang pendek adalah Katodanya (- pin) dan kaki panjangnya adalah Anode (+ pin). Jika Anda tidak yakin, maka Anda dapat mengujinya dengan multimeter atau baterai 3v untuk menemukan polaritasnya. Sekarang, dengan tang tekuk katoda (kaki pendek) pada sudut 90 derajat ke kanan dan tekuk lagi ke atas untuk membuat bentuk seperti yang ditunjukkan pada gambar di bawah.


Tutorial Cara Membuat Led Cube 4 X 4 X 4 Dengan Arduino

Tempatkan LED di karton tetapi hati-hati dengan orientasinya. Ingat panah pada gambar di atas? Pin negatif dari LED yang ditekuk harus disejajarkan seperti panah. Ini karena kita akan membuat empat lapisan seperti itu dan mudah untuk menyoldernya. Tekuk semua kaki positif dari semua LED dan lakukan sedemikian rupa sehingga menghubungkan semua terminal positif LED bersama-sama, ini akan membuat lapisan arus positif





Tutorial Cara Membuat Led Cube 4 X 4 X 4 Dengan Arduino


Namun, Anda akan melihat bahwa dua area di tengah lapisan ini dibiarkan tidak terhubung seperti yang ditunjukkan oleh lingkaran merah. Anda dapat menghubungkan pin ini dengan kabel tunggal atau kaki dari LED yang dipotong.


Tutorial Cara Membuat Led Cube 4 X 4 X 4 Dengan Arduino


Sekarang, dengan menggunakan baterai 3v, buat penguji sederhana untuk memeriksa apakah semua LED berfungsi. Hubungkan kabel positif ke sembarang tempat pada lapisan dan satu per satu periksa semua kolom dengan kabel negatif.


Tutorial Cara Membuat Led Cube 4 X 4 X 4 Dengan Arduino


Sekarang telah jadi lapisan pertama, kemudian buat 3 lapisan lagi sehingga menjadi 4 lapisan


Tutorial Cara Membuat Led Cube 4 X 4 X 4 Dengan Arduino


Dalam proyek ini, potongan karton sederhana dipotong dan ditempatkan di antara lapisan yang akan disolder. Ini membuatnya mudah untuk menyoldernya tetapi Anda selalu dapat menggunakan alat lain seperti dudukan PCB, dll.


Tutorial Cara Membuat Led Cube 4 X 4 X 4 Dengan Arduino


Setelah menyolder tiga lapisan, ada baiknya untuk memeriksa semua LED sekali lagi untuk berjaga-jaga. Seperti sebelumnya, hubungkan pin positif tester sel tombol Anda ke layer dan kemudian pin negatif ke semua kolom LED (- pin) satu per satu

Akhirnya, kubus LED disolder dan seperti inilah tampilannya:


Tutorial Cara Membuat Led Cube 4 X 4 X 4 Dengan Arduino


Solder 20 pin (atau lebih) inline female header (celah 0,1 inci antara pin) ke PCB perfboard siap pakai dan letakkan Kubus di atasnya (pin kolom). Anda dapat menekuk beberapa kaki kubus LED di bawah papan untuk sementara agar tidak jatuh tetapi belum menyoldernya. Mereka akan disolder dengan kabel yang berasal dari pin header perempuan nanti.


Tutorial Cara Membuat Led Cube 4 X 4 X 4 Dengan Arduino


Solder resistor dengan satu kaki terhubung ke pin header perempuan dan satu lagi untuk dihubungkan ke setiap lapisan terpisah pada kubus. Ingatlah untuk melihat pengaturan koneksi. Dalam proyek ini sisi paling kiri adalah pin nomor 0 pada Arduino hingga pin nomor 13 dan kemudian empat pin Analog untuk lapisan dan kemudian dua pin Analog untuk kolom yang tersisa. Lakukan beberapa pengujian cepat melalui soket header perempuan juga.


Tutorial Cara Membuat Led Cube 4 X 4 X 4 Dengan Arduino


Tutorial Cara Membuat Led Cube 4 X 4 X 4 Dengan Arduino


Hubungkan semua wirings menggunakan kabel pita jumper (male-male) sesuai dengan tabel koneksi yang ditunjukkan di bawah ini. Arduino dapat ditempel ke papan dengan doubletape sehingga dapat dengan mudah dilepas untuk digunakan dalam proyek lain. Anda dapat menyalakan Arduino dengan baterai 9V dan colokan listrik Arduino (setelah mengupload kode program ke papan arduino)

Setelah mengupload kode ke Arduino Uno, LED Cube 4x4x4 Anda sudah siap dinikmati.


Tutorial Cara Membuat Led Cube 4 X 4 X 4 Dengan Arduino
[program]

/*
  4x4x4 LED Cube
  Connection Setup: 
  Columns
  [(x,y)-Pin]
  (1,1)-13
  (1,2)-12
  (1,3)-11
  (1,4)-10
  (2,1)-9
  (2,2)-8
  (2,3)-7
  (2,4)-6
  (3,1)-5
  (3-2)-4
  (3-3)-3
  (3,4)-2
  (4,1)-1
  (4,2)-0
  (4,3)-A5
  (4,4)-A4
  Layers
  [layer-Pin]
  a-A0
  b-A1
  c-A2
  d-A3
*/
//initializing and declaring led rows
  int column[16]={13,12,11,10,9,8,7,6,5,4,3,2,1,0,A5,A4};
//initializing and declaring led layers
  int layer[4]={A3,A2,A1,A0};

  int time = 250;
 
void setup()
{
  //setting rows to ouput
  for(int i = 0; i<16; i++)
  {
    pinMode(column[i], OUTPUT);
  }
  //setting layers to output
  for(int i = 0; i<4; i++)
  {
    pinMode(layer[i], OUTPUT);
  }
  //seeding random for random pattern
  randomSeed(analogRead(10));
}
//xxxxxxxxxxxxxxxxxxxxFUNCTION LOOPxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

void loop()
{
  turnEverythingOff();//turn all off
  flickerOn();
  turnEverythingOn();//turn all on
  delay(time);
  turnOnAndOffAllByLayerUpAndDownNotTimed();
  layerstompUpAndDown();
  turnOnAndOffAllByColumnSideways();
  delay(time);
  aroundEdgeDown();
  turnEverythingOff();
  randomflicker();
  randomRain();
  diagonalRectangle();
  goThroughAllLedsOneAtATime();
  propeller();
  spiralInAndOut();
  flickerOff();
  turnEverythingOff();
  delay(2000);
}


//xxxxxxxxxxxxxxxxxxxxFUNCTIONSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

///////////////////////////////////////////////////////////turn all off
void turnEverythingOff()
 {
   for(int i = 0; i<16; i++)
   {
     digitalWrite(column[i], 1);
   }
   for(int i = 0; i<4; i++)
   {
     digitalWrite(layer[i], 0);
   }
 }
 
////////////////////////////////////////////////////////////turn all on
void turnEverythingOn()
{
  for(int i = 0; i<16; i++)
  {
    digitalWrite(column[i], 0);
  }
  //turning on layers
  for(int i = 0; i<4; i++)
  {
    digitalWrite(layer[i], 1);
  }
}
///////////////////////////////////////////////////////turn columns off
void turnColumnsOff()
{
  for(int i = 0; i<16; i++)
  {
    digitalWrite(column[i], 1);
  }
}
/////////////////////////////////////////////////////////////flicker on
void flickerOn()
{
  int i = 150;
  while(i != 0)
  {
    turnEverythingOn();
    delay(i);
    turnEverythingOff();
    delay(i);
    i-= 5;
  }
}
//////////////turn everything on and off by layer up and down NOT TIMED
void turnOnAndOffAllByLayerUpAndDownNotTimed()
{
  int x = 75;
  for(int i = 5; i != 0; i--)
  {
    turnEverythingOn();
    for(int i = 4; i!=0; i--)
    {
      digitalWrite(layer[i-1], 0);
      delay(x);
    }
    for(int i = 0; i<4; i++)
    {
      digitalWrite(layer[i], 1);
      delay(x);
    }
      for(int i = 0; i<4; i++)
    {
      digitalWrite(layer[i], 0);
      delay(x);
    }
    for(int i = 4; i!=0; i--)
    {
      digitalWrite(layer[i-1], 1);
      delay(x);
    }
  }
}
//////////////////////////turn everything on and off by column sideways
void turnOnAndOffAllByColumnSideways()
{
  int x = 75;
  turnEverythingOff();
  //turn on layers
  for(int i = 0; i<4; i++)
  {
    digitalWrite(layer[i], 1);
  }
  for(int y = 0; y<3; y++)
  {
    //turn on 0-3
    for(int i = 0; i<4; i++)
    {
      digitalWrite(column[i], 0);
      delay(x);
    }
    //turn on 4-7
    for(int i = 4; i<8; i++)
    {
      digitalWrite(column[i], 0);
      delay(x);
    }
    //turn on 8-11
    for(int i = 8; i<12; i++)
    {
      digitalWrite(column[i], 0);
      delay(x);
    }
    //turn on 12-15
    for(int i = 12; i<16; i++)
    {
      digitalWrite(column[i], 0);
      delay(x);
    }
    //turn off 0-3
    for(int i = 0; i<4; i++)
    {
      digitalWrite(column[i], 1);
      delay(x);
    }
    //turn off 4-7
    for(int i = 4; i<8; i++)
    {
      digitalWrite(column[i], 1);
      delay(x);
    }
    //turn off 8-11
    for(int i = 8; i<12; i++)
    {
      digitalWrite(column[i], 1);
      delay(x);
    }
    //turn off 12-15
    for(int i = 12; i<16; i++)
    {
      digitalWrite(column[i], 1);
      delay(x);
    }
    //turn on 12-15
    for(int i = 12; i<16; i++)
    {
      digitalWrite(column[i], 0);
      delay(x);
    }
    //turn on 8-11
    for(int i = 8; i<12; i++)
    {
      digitalWrite(column[i], 0);
      delay(x);
    }
    //turn on 4-7
    for(int i = 4; i<8; i++)
    {
      digitalWrite(column[i], 0);
      delay(x);
    }
    //turn on 0-3
    for(int i = 0; i<4; i++)
    {
      digitalWrite(column[i], 0);
      delay(x);
    }
    //turn off 12-15
    for(int i = 12; i<16; i++)
    {
      digitalWrite(column[i], 1);
      delay(x);
    }
    //turn off 8-11
    for(int i = 8; i<12; i++)
    {
      digitalWrite(column[i], 1);
      delay(x);
    }
    //turn off 4-7
    for(int i = 4; i<8; i++)
    {
      digitalWrite(column[i], 1);
      delay(x);
    }
    //turn off 0-3
    for(int i = 0; i<4; i++)
    {
      digitalWrite(column[i], 1);
      delay(x);
    }
  }
}
/////////////////////////////////////////up and down single layer stomp
void layerstompUpAndDown()
{
  int x = 75;
  for(int i = 0; i<4; i++)
  {
    digitalWrite(layer[i], 0);
  }
  for(int y = 0; y<5; y++)
  {
    for(int count = 0; count<1; count++)
    { 
      for(int i = 0; i<4; i++)
      {
        digitalWrite(layer[i], 1);
        delay(x);
        digitalWrite(layer[i], 0);
      }
      for(int i = 4; i !=0; i--)
      {
        digitalWrite(layer[i-1], 1);
        delay(x);
        digitalWrite(layer[i-1], 0);
      }
    }
    for(int i = 0; i<4; i++)
    {
      digitalWrite(layer[i], 1);
      delay(x);
    }
    for(int i = 4; i!=0; i--)
    {
      digitalWrite(layer[i-1], 0);
      delay(x);
    }
  }
}
////////////////////////////////////////////////////////////flicker off
void flickerOff()
{
  turnEverythingOn();
  for(int i = 0; i!= 150; i+=5)
  {
    turnEverythingOff();
    delay(i+50);
    turnEverythingOn();
    delay(i);
  }
}
///////////////////////////////////////////around edge of the cube down
void aroundEdgeDown()
{
  for(int x = 200; x != 0; x -=50)
  {
    turnEverythingOff();
    for(int i = 4; i != 0; i--)
    {
      digitalWrite(layer[i-1], 1);
      digitalWrite(column[5], 0);
      digitalWrite(column[6], 0);
      digitalWrite(column[9], 0);
      digitalWrite(column[10], 0);
      
      digitalWrite(column[0], 0);
      delay(x);
      digitalWrite(column[0], 1);
      digitalWrite(column[4], 0);
      delay(x);
      digitalWrite(column[4], 1);
      digitalWrite(column[8], 0);
      delay(x);
      digitalWrite(column[8], 1);
      digitalWrite(column[12], 0);
      delay(x);
      digitalWrite(column[12], 1);
      digitalWrite(column[13], 0);
      delay(x);
      digitalWrite(column[13], 1);
      digitalWrite(column[15], 0);
      delay(x);
      digitalWrite(column[15], 1);
      digitalWrite(column[14], 0);
      delay(x);
      digitalWrite(column[14], 1);
      digitalWrite(column[11], 0);
      delay(x);
      digitalWrite(column[11], 1);
      digitalWrite(column[7], 0);
      delay(x);
      digitalWrite(column[7], 1);
      digitalWrite(column[3], 0);
      delay(x);
      digitalWrite(column[3], 1);
      digitalWrite(column[2], 0);
      delay(x);
      digitalWrite(column[2], 1);
      digitalWrite(column[1], 0);
      delay(x);
      digitalWrite(column[1], 1);
    }
  }
}
/////////////////////////////////////////////////////////random flicker
void randomflicker()
{
  turnEverythingOff();
  int x = 10;
  for(int i = 0; i !=750; i+=2)
  {
  int randomLayer = random(0,4);
  int randomColumn = random(0,16);
  
  digitalWrite(layer[randomLayer], 1);
  digitalWrite(column[randomColumn], 0);
  delay(x);
  digitalWrite(layer[randomLayer], 0);
  digitalWrite(column[randomColumn], 1);
  delay(x); 
  }
}
////////////////////////////////////////////////////////////random rain
void randomRain()
{
  turnEverythingOff();
  int x = 100;
  for(int i = 0; i!=60; i+=2)
  {
    int randomColumn = random(0,16);
    digitalWrite(column[randomColumn], 0);
    digitalWrite(layer[0], 1);
    delay(x+50);
    digitalWrite(layer[0], 0);
    digitalWrite(layer[1], 1);
    delay(x);
    digitalWrite(layer[1], 0);
    digitalWrite(layer[2], 1);
    delay(x);
    digitalWrite(layer[2], 0);
    digitalWrite(layer[3], 1);
    delay(x+50);
    digitalWrite(layer[3], 0);
    digitalWrite(column[randomColumn], 1);
  }
}
/////////////////////////////////////////////////////diagonal rectangle
void diagonalRectangle()
{
  int x = 350;
  turnEverythingOff();
  for(int count = 0; count<5; count++)
  {
    //top left
    for(int i = 0; i<8; i++)
    {
      digitalWrite(column[i], 0);
    }
    digitalWrite(layer[3], 1);
    digitalWrite(layer[2], 1);
    delay(x);
    turnEverythingOff();
    //middle middle
    for(int i = 4; i<12; i++)
    {
      digitalWrite(column[i], 0);
    }
    digitalWrite(layer[1], 1);
    digitalWrite(layer[2], 1);
    delay(x);
    turnEverythingOff();
    //bottom right
    for(int i = 8; i<16; i++)
    {
      digitalWrite(column[i], 0);
    }
    digitalWrite(layer[0], 1);
    digitalWrite(layer[1], 1);
    delay(x);
    turnEverythingOff();
    //bottom middle
    for(int i = 4; i<12; i++)
    {
      digitalWrite(column[i], 0);
    }
    digitalWrite(layer[0], 1);
    digitalWrite(layer[1], 1);
    delay(x);
    turnEverythingOff();
    //bottom left
    for(int i = 0; i<8; i++)
    {
      digitalWrite(column[i], 0);
    }
    digitalWrite(layer[0], 1);
    digitalWrite(layer[1], 1);
    delay(x);
    turnEverythingOff();
    //middle middle
    for(int i = 4; i<12; i++)
    {
      digitalWrite(column[i], 0);
    }
    digitalWrite(layer[1], 1);
    digitalWrite(layer[2], 1);
    delay(x);
    turnEverythingOff();
    //top right
    for(int i = 8; i<16; i++)
    {
      digitalWrite(column[i], 0);
    }
    digitalWrite(layer[2], 1);
    digitalWrite(layer[3], 1);
    delay(x);
    turnEverythingOff();
    //top middle
    for(int i = 4; i<12; i++)
    {
      digitalWrite(column[i], 0);
    }
    digitalWrite(layer[2], 1);
    digitalWrite(layer[3], 1);
    delay(x);
    turnEverythingOff();
  }
  //top left
  for(int i = 0; i<8; i++)
  {
    digitalWrite(column[i], 0);
  }
  digitalWrite(layer[3], 1);
  digitalWrite(layer[2], 1);
  delay(x);
  turnEverythingOff();
}
//////////////////////////////////////////////////////////////propeller
void propeller()
{
  turnEverythingOff();
  int x = 90;
  for(int y = 4; y>0; y--)
  {
    for(int i = 0; i<6; i++)
    {
      //turn on layer
      digitalWrite(layer[y-1], 1);
      //a1
      turnColumnsOff();
      digitalWrite(column[0], 0);
      digitalWrite(column[5], 0);
      digitalWrite(column[10], 0);
      digitalWrite(column[15], 0);
      delay(x);
      //b1
      turnColumnsOff();
      digitalWrite(column[4], 0);
      digitalWrite(column[5], 0);
      digitalWrite(column[10], 0);
      digitalWrite(column[11], 0);
      delay(x);
      //c1
      turnColumnsOff();
      digitalWrite(column[6], 0);
      digitalWrite(column[7], 0);
      digitalWrite(column[8], 0);
      digitalWrite(column[9], 0);
      delay(x);
      //d1
      turnColumnsOff();
      digitalWrite(column[3], 0);
      digitalWrite(column[6], 0);
      digitalWrite(column[9], 0);
      digitalWrite(column[12], 0);
      delay(x);
      //d2
      turnColumnsOff();
      digitalWrite(column[2], 0);
      digitalWrite(column[6], 0);
      digitalWrite(column[9], 0);
      digitalWrite(column[13], 0);
      delay(x);
      //d3
      turnColumnsOff();
      digitalWrite(column[1], 0);
      digitalWrite(column[5], 0);
      digitalWrite(column[10], 0);
      digitalWrite(column[14], 0);
      delay(x);
    }
  }
  //d4
  turnColumnsOff();
  digitalWrite(column[0], 0);
  digitalWrite(column[5], 0);
  digitalWrite(column[10], 0);
  digitalWrite(column[15], 0);
  delay(x);
}
//////////////////////////////////////////////////////spiral in and out
void spiralInAndOut()
{
  turnEverythingOn();
  int x = 60;
  for(int i = 0; i<6; i++)
  {
    //spiral in clockwise
    digitalWrite(column[0], 1);
    delay(x);
    digitalWrite(column[1], 1);
    delay(x);
    digitalWrite(column[2], 1);
    delay(x);
    digitalWrite(column[3], 1);
    delay(x);
    digitalWrite(column[7], 1);
    delay(x);
    digitalWrite(column[11], 1);
    delay(x);
    digitalWrite(column[15], 1);
    delay(x);
    digitalWrite(column[14], 1);
    delay(x);
    digitalWrite(column[13], 1);
    delay(x);
    digitalWrite(column[12], 1);
    delay(x);
    digitalWrite(column[8], 1);
    delay(x);
    digitalWrite(column[4], 1);
    delay(x);
    digitalWrite(column[5], 1);
    delay(x);
    digitalWrite(column[6], 1);
    delay(x);
    digitalWrite(column[10], 1);
    delay(x);
    digitalWrite(column[9], 1);
    delay(x);
    ///////////////////////////////////////spiral out counter clockwise
    digitalWrite(column[9], 0);
    delay(x);
    digitalWrite(column[10], 0);
    delay(x);
    digitalWrite(column[6], 0);
    delay(x);
    digitalWrite(column[5], 0);
    delay(x);
    digitalWrite(column[4], 0);
    delay(x);
    digitalWrite(column[8], 0);
    delay(x);
    digitalWrite(column[12], 0);
    delay(x);
    digitalWrite(column[13], 0);
    delay(x);
    digitalWrite(column[14], 0);
    delay(x);
    digitalWrite(column[15], 0);
    delay(x);
    digitalWrite(column[11], 0);
    delay(x);
    digitalWrite(column[7], 0);
    delay(x);
    digitalWrite(column[3], 0);
    delay(x);
    digitalWrite(column[2], 0);
    delay(x);
    digitalWrite(column[1], 0);
    delay(x);
    digitalWrite(column[0], 0);
    delay(x);
    ///////////////////////////////////////spiral in counter clock wise
    digitalWrite(column[0], 1);
    delay(x);
    digitalWrite(column[4], 1);
    delay(x);
    digitalWrite(column[8], 1);
    delay(x);
    digitalWrite(column[12], 1);
    delay(x);
    digitalWrite(column[13], 1);
    delay(x);
    digitalWrite(column[14], 1);
    delay(x);
    digitalWrite(column[15], 1);
    delay(x);
    digitalWrite(column[11], 1);
    delay(x);
    digitalWrite(column[7], 1);
    delay(x);
    digitalWrite(column[3], 1);
    delay(x);
    digitalWrite(column[2], 1);
    delay(x);
    digitalWrite(column[1], 1);
    delay(x);
    digitalWrite(column[5], 1);
    delay(x);
    digitalWrite(column[9], 1);
    delay(x);
    digitalWrite(column[10], 1);
    delay(x);
    digitalWrite(column[6], 1);
    delay(x);
    //////////////////////////////////////////////spiral out clock wise
    digitalWrite(column[6], 0);
    delay(x);
    digitalWrite(column[10], 0);
    delay(x);
    digitalWrite(column[9], 0);
    delay(x);
    digitalWrite(column[5], 0);
    delay(x);
    digitalWrite(column[1], 0);
    delay(x);
    digitalWrite(column[2], 0);
    delay(x);
    digitalWrite(column[3], 0);
    delay(x);
    digitalWrite(column[7], 0);
    delay(x);
    digitalWrite(column[11], 0);
    delay(x);
    digitalWrite(column[15], 0);
    delay(x);
    digitalWrite(column[14], 0);
    delay(x);
    digitalWrite(column[13], 0);
    delay(x);
    digitalWrite(column[12], 0);
    delay(x);
    digitalWrite(column[8], 0);
    delay(x);
    digitalWrite(column[4], 0);
    delay(x);
    digitalWrite(column[0], 0);
    delay(x);
  }
}
//////////////////////////////////////go through all leds one at a time
void goThroughAllLedsOneAtATime()
{
  int x = 15;
  turnEverythingOff();
  for(int y = 0; y<5; y++)
  {
    //0-3
    for(int count = 4; count != 0; count--)
    {
      digitalWrite(layer[count-1], 1);
      for(int i = 0; i<4; i++)
      {
        digitalWrite(column[i], 0);
        delay(x);
        digitalWrite(column[i], 1);
        delay(x);
      }
    digitalWrite(layer[count-1], 0);
    }
    //4-7
    for(int count = 0; count < 4; count++)
    {
      digitalWrite(layer[count], 1);
      for(int i = 4; i<8; i++)
      {
        digitalWrite(column[i], 0);
        delay(x);
        digitalWrite(column[i], 1);
        delay(x);
      }
    digitalWrite(layer[count], 0);
    }
    //8-11
    for(int count = 4; count != 0; count--)
    {
      digitalWrite(layer[count-1], 1);
      for(int i = 8; i<12; i++)
      {
        digitalWrite(column[i], 0);
        delay(x);
        digitalWrite(column[i], 1);
        delay(x);
      }
    digitalWrite(layer[count-1], 0);
    }
    //12-15
    for(int count = 0; count < 4; count++)
    {
      digitalWrite(layer[count], 1);
      for(int i = 12; i<16; i++)
      {
        digitalWrite(column[i], 0);
        delay(x);
        digitalWrite(column[i], 1);
        delay(x);
      }
    digitalWrite(layer[count], 0);
    }
  }
}