Khởi đầu với Arduino - Phần 2

Category: Arduino Published: 13 December 2016
Hits: 1361

Bước 4: Bổ sung thêm đèn LED.

Giờ thì bạn đã nắm được ý tưởng làm thế nào để điều khiển được 1 đèn LED đơn, hãy thêm vài cái nữa vào mạch nào! Lấy số đèn và điện trở 1K còn lại. Ngắt Arduino khỏi cáp USB/ ngắt điện. Nhớ rằng luôn ngắt kết nối tới bất nguồn điện bất lúc nào bạn định thay đổi mạch.

Kết nối cặp đường dọc trên Breadboard với nhau: cắm 1 dây nối 2 đường nối cực dương lại với nhau (đỏ, +) và dây khác nối 2 đường nối cực dương (xanh,-). Đây là một cấu hình phổ biến, khi đó bạn có thể dễ dàng kết nối cực dương và âm trên 2 nửa của Breadboard. Uốn 2 đầu dây của điện trở 1 góc 90 độ và cắt phần thừa đi để lại khoảng ¼ inch (6mm) tính từ điểm uốn. 

Bạn không cần quá máy móc trong việc cần phải uốn và cắt ở điện trở, nhưng chắc chắn việc này sẽ làm cho mạch của bạn trông gọn gàng hơn. Thay các điện trở cũ bằng một cái mới ngắn gọn hơn và xem sự khác biệt lớn như thế nào trong việc đọc mạch của bạn.

Hãy thêm những đèn LED mới vào nửa còn lại chưa sử dụng của Breadboard. Bắt đầu bằng cách kết nối một điện trở từ đường cực âm (các ổ dọc theo đường màu xanh) tới một hàng trên Breadboard. Cắm 1 LED đỏ vào Breadboard, kết nối đầu ngắn hơn của LED (đầu âm) vào cùng hàng với điện trở.

Thêm các điện trở và LED còn lại theo cùng một cách như trên. Nhớ rằng điện trở có thể căm vào cả 2 hướng, nhưng đèn LED có sự phân cực và chỉ sáng khi dòng điện đi theo một hướng duy nhất qua nó.

Di chuyển dây vàng từ chân Arduino 13 sang chân 7. Nối dây vàng còn lại từ ổ Arduino 6 tới đầu dương của LED ngay bên cạnh.

Nối nhiều dây vàng hơn nữa theo sơ đồ trong Autodesk Circuits module (các chân Arduino 3-5 tới đầu dương của các LED còn lại).

Nhấn nút “Start Simulation” để xem chương trình chạy với phần code phía bên cạnh. Chương trình bật sáng đèn LED theo thứ tự xuống dòng và quay lại từ đầu. Nhấn “Code Editor” để xem code, và sau nhó nhấn “Download Code”. Ví dụ này có vài thay đổi từ một ví dụ tương tự trong phần mềm Arduino, vì thế chúng tôi sử dụng bản download này. Nháy đúp vào file .zip và giải nén nó, nháy đúp vào file "ForLoopIteration.ino" để mở nó lên. 

Nhấn OK nếu như thấy một nhắc nhở nào đó để thêm chương trình vào thư mục của bạn. Nếu file kết quả có tất cả code nằm trên 1 dòng, có lẽ bạn đã sử dụng một phiên bản Arduino cũ, và nên cập nhật phiên bản mới nhất. Nếu muốn hơn nữa, bạn cũng có thể chọn và copy đoạn code từ module bên trên và paste vào một trang mới – new (blank) Arduino sketch (File -> New, sau đó thay những nội dung mặc định ban đầu với đoạn code bạn đã copy ở trên).

 

Cắm vào và tải đoạn code lên mạch Arduino Uno của bạn. Có lẽ bạn sẽ phải chọn lại cổng kết nối từ Menu công cụ sau khi cắm lại. Hãy học cách code một dãy sáng bằng cách nhìn sâu hơn vào các thành phần của chương trình:

/*

 For Loop Iteration

 Demonstrates the use of a for() loop.

 Lights multiple LEDs in sequence, then in reverse.

 

 The circuit:

 * LEDs from pins 3 through 7 to ground

 

 created 2006

 by David A. Mellis

 modified 30 Aug 2011

 by Tom Igoe

 

This example code is in the public domain.

 <a href="http://www.arduino.cc/en/Tutorial/ForLoop"> <a href="http://www.arduino.cc/en/Tutorial/ForLoop"> http://www.arduino.cc/en/Tutorial/ForLoop

</a>

</a>

 */

Phần đầu này chỉ là 1 đoạn comment dài. Bạn đã được học về những dòng comment đơn, và giờ bạn được biết tới một chuối các dòng comments, được biểu thị bởi /* để bắt đầu và */ để kết thúc.

int timer = 200; // The higher the number, the slower the timing.

Một biến được khai báo ! Nó là một số nguyên gọi là "timer", và dòng này lệnh này đặt nó bằng giá trị 200. Như bạn đã biết, hầu hết các dòng lệnh đều được kết thúc bằng dấu chấm phấy – semicolon. Khi viết hay sửa bản phác thảo Arduino của bạn, nhớ để ý các lỗi thiếu dấu chấm phẩy vì nó là nguyên nhân gây nên các lỗi khi biên dịch chương trình, lỗi cơ bản mà sẽ hạ gục bạn.

void setup() {

 // use a for loop to initialize each pin as an output:

 for (int thisPin = 3; thisPin < 8; thisPin++) {

 pinMode(thisPin, OUTPUT);

 }

}

Thiết lập cho các chân từ 3 đến 7 ở trạng thái ouputs sử dụng một vòng lặp for – for loop, đây là một vòng đặc biệt, nó lặp một phần nhỏ của đoạn code trong một số lần nhất định được quy định dựa trên một điều kiện – condition, sử dụng một bộ đếm tăng – increment counter. Mỗi lần đếm một vòng nhỏ, điều kiện sẽ được kiểm tra và nếu điều kiện đúng, nó sẽ tiếp tục thực hiện đoạn code bên trong. Vì thế trong khung phía trên, một biến thisPin được gán với giá trị 3, điều kiện ở đây là thisPin phải nhỏ hơn 8, và bộ đếm tăng sẽ tăng giá trị của thisPin sau mỗi vòng (thisPin++ cũng có thể hiểu là thisPin = thisPin + 1). Vì thế trong lần đầu tiên qua vòng lặp, chân 3 được gán ở trạng thái output. Ở lần thứ 2 đi qua vòng lặp, chân 4 sẽ được gán ở trạng thái output. Cứ tiếp tục cho đến khi thisPin là 8, tại điểm/ổ này điều kiện bị sai và đoạn code sẽ không chạy vòng lặp, mà nó sẽ tiếp tục chạy trên các phần còn lại của chương trình. Đây có vẻ như là một cách phức tạp để làm một việc sơn giản, nhưng nó khá hiệu quả cho các lập trình viên. Bạn có thể dễ dang thực viện việc cấu hình các chân dựa theo thiết lập sau đây:

void setup() {

 // initialize each pin as an output:

 pinMode(3, OUTPUT);

 pinMode(4, OUTPUT);

 pinMode(5, OUTPUT);

 pinMode(6, OUTPUT);

 pinMode(7, OUTPUT);

}

Bạn nhớ chú ý rằng thường có nhiều hơn một cách để thực hiện các yêu cầu bằng chương trình Arduino. Mã hóa (coding) cũng giống như là việc để mọi thứ trong kho của bạn: và bạn có thế lấy chúng ra sự dụng bất cứ công cụ nào bạn có. Vì vậy, hãy sử dụng một vòng lặp một cách vui vẻ và đơn giản nhé !

void loop() {

 

 // loop from the lowest pin to the highest:

 for (int thisPin = 3; thisPin < 8; thisPin++) {

 // turn the pin on:

 digitalWrite(thisPin, HIGH);

 delay(timer);

 // turn the pin off:

 digitalWrite(thisPin, LOW);

 }

Vòng lặp ở khung trên sẽ bắt với cùng một vòng lặp for với đoạn hướng dẫn vừa rồi, bộ đếm tăng từ giá trị chân có mã số nhỏ nhất tới lớn nhất. Bên trong vòng lặp for, nó sẽ bật LED tại biến thisPin, ngừng lại khoảng 200ms (giá trị được gán với biến timer), sau đó sẽ tắt LED này trước thực hiện lại vòng lặp trên LED kế tiếp. 

 // loop from the highest pin to the lowest:

 for (int thisPin = 7; thisPin >= 3; thisPin--) {

 // turn the pin on:

 digitalWrite(thisPin, HIGH);

 delay(timer);

 // turn the pin off:

 digitalWrite(thisPin, LOW);

 }

}

Phần tiếp theo của đoạn code là một vòng lặp for khác, nhưng ngược lại nó sẽ bắt đầu ở chân có giá trị lớn nhất và sử dụng bộ đếm thisPin--, cái mà có thể hiểu như là thisPin = thisPin - 1(giá trị mà nó có trừ 1), và vòng lặp này chỉ chạy khi thisPin vượt qua giá trị >= 3 (lớn hơn hoặc bằng 3, hay lớn hơn 2). Dấu ngoặc đóng cuối cùng } sẽ kết thúc vòng lặp chính (main loop). Do đó, chương trình sẽ bật sáng mỗi LED theo thứ tự, sau đó đảo ngược lại thứ tự và lại bật sáng các LED.

Step 5: Tạo độ sáng giảm dần/tăng dần - Fade

Giờ bạn đã nắm được cách bật và tắt nhiều LED, giờ hãy tiếp tục làm một LED sáng dần và tối dần bằng cách sử dụng hàm analogWrite();.Tháo cáp USB và dỡ tất cả các linh kiện ra trừ đèn LED đầu tiên trên Breadboard, và chuyển dây vàng kết nối với nó sang chân Arduino 9.

Copy/download đoạn code từ Autodesk Circuits module hoặc mở phần ví dụ trong phần mềm Arduino theo cách phía dưới (File -> Examples -> 01.Basics -> Fade).

 

Cắm nguồn điện vào và tải bản phác thảo lên mạch Arduino Uno của bạn và quan sát đèn LED sáng dần và tắt dần.

 

Hãy xem lại đoạn để hiểu làm thế nào mà đèn sáng hoặc mờ dần. Chúng tôi đã đánh dấu số dòng trên các đoạn code, để bạn có thể dễ dàng tham khảo các phần khác nhau của đoạn code.

 /*

 Fade

 

 This example shows how to fade an LED on pin 9

 using the analogWrite() function.

 

 The analogWrite() function uses PWM, so if

 you want to change the pin you're using, be

 sure to use another PWM capable pin. On most

 Arduino, the PWM pins are identified with 

 a "~" sign, like ~3, ~5, ~6, ~9, ~10 and ~11.

 

 This example code is in the public domain.

 */

 

int led = 9;           // the PWM pin the LED is attached to

int brightness = 0;    // how bright the LED is

int fadeAmount = 5;    // how many points to fade the LED by

 

// the setup routine runs once when you press reset:

void setup() {

  // declare pin 9 to be an output:

  pinMode(led, OUTPUT);

}

 

// the loop routine runs over and over again forever:

void loop() {

  // set the brightness of pin 9:

  analogWrite(led, brightness);

 

  // change the brightness for next time through the loop:

  brightness = brightness + fadeAmount;

 

  // reverse the direction of the fading at the ends of the fade:

  if (brightness <= 0 || brightness >= 255) {

    fadeAmount = -fadeAmount;

  }

  // wait for 30 milliseconds to see the dimming effect

  delay(30);

}

Dòng 16 đến 18 khai báo cho ba biến sử dụng trong chương trình. Thiết lập cấu hình chân 9 trạng thái output ở dòng số 23. Trên dòng 29, hàm analogWrite(); gán chân 9 với một biến độ sáng (brightness) bất kì tại một thời điểm nhất định. Trên dòng 32, biến brightness được tăng từ 5 (fadeAmount). Dòng 35 sử dụng câu lệnh if – if statement để kiểm tra khi biến brightness sử dụng toán tử so sánh. Nếu biến brightness nhỏ hơn hoặc bằng <= 0, hoặc là || lớn hơn hoặc bằng >= 255. Câu lệnh if sẽ đúng, đoạn code bên trong sẽ được thực hiện, còn nếu sai nó sẽ bỏ qua không chạy đoạn code bên trong. Vì thế đoạn code này tăng độ sáng brightness cho đến khi đạt hoặc không vượt quá giá trị 255, sau đó gán fadeAmount với -5 and giảm độ sáng cho đến khi nó bằng 0 (hoặc một giá trị nhỏ hơn 0). Lệnh delay ở cuối ngăn đoạn code chạy quá nhanh, điều khiến bạn sẽ không thể thấy được ảnh hưởng của đoạn code. Cố thây đổi một vài giá trị của fadeAmount và tải code lên mạch của bạn. Xem sự thay đổi các biến đã có tác động sự thế nào đến hiện tượng sáng dân và tối dần?

Mạch Arduino chỉ có thể tạo tín hiệu kĩ thuật số (HIGH và LOW), nhưng với analogWrite(); nó giúp mô phỏng độ sáng giữa bật và tắt bằng cách sử dụng điều biến xung pulse width modulation (PWM). Đèn LED thường lóe sáng và tắt đi rất nhanh, nên mắt thường khó có thế cảm nhận được một ánh sáng mờ. Tỷ số giữa thời gian đèn LED bật và tắt xác định nó sáng và mờ dần đi như thế nào. Chỉ có một số chân xác định được phép kết nối với PWM, và chúng được dán nhãn với dấu ngã ~ bên canh số ổ. PWM cũng có thể sử dụng để điều chỉnh được tốc độ của động cơ một chiều, cái mà chúng ta sẽ học ở bài sau. 

Bước 6: RGB LEDs

Bộ màu RBG có 3 màu cơ bản là: đỏ, xanh, và xanh lục. Ta có thể cùng lúc điều chỉnh độ sáng của LED với bất kì màu nào của ánh sáng. Các đèn LED đổi màu được sử dụng theo cùng một cách như nhau, chúng được gọi với cái tên là RGB LED. Hãy làm RBG LED của bạn từ 3 LED 5mm trong bộ linh kiện. Trong bộ linh kiện Adafruit, có 3 LED có phần kính trong suốt bên trên, giúp chúng ta cắm chúng vào mạch để xác định LED với nhau. Các LED có phần kính trên trong suốt có thể là bất kì màu nào. Nếu bạn sử dụng bộ linh kiện khác, chỉ xác định một LED đỏ, một LED xanh và một LED lục (phần kính trên trong suốt hoặc có màu). Tháo cáp USB và thay LED đỏ bằng các LED trong suốt, sau đó cắm cáp USB lại.

 

Lúc này LED có màu gì? Nếu bạn thấy màu đỏ ở lần thử đầu tiên, hãy làm tương tự để xác định màu của 2 LED còn lại.

/*

Adafruit Arduino - Lesson 3. RGB LED https://learn.adafruit.com/adafruit-arduino-lesson-3-rgb-leds/

*/

 

int redPin = 9;

int greenPin = 10;

int bluePin = 11;

 

void setup()

{

  pinMode(redPin, OUTPUT);

  pinMode(greenPin, OUTPUT);

  pinMode(bluePin, OUTPUT);  

}

 

void loop()

{

  setColor(255, 0, 0);  // red

  delay(1000);

  setColor(0, 255, 0);  // green

  delay(1000);

  setColor(0, 0, 255);  // blue

  delay(1000);

  setColor(255, 255, 0);  // yellow

  delay(1000);  

  setColor(80, 0, 80);  // purple

  delay(1000);

  setColor(0, 255, 255);  // aqua

  delay(1000);

}

 

void setColor(int red, int green, int blue)

{

  analogWrite(redPin, red);

  analogWrite(greenPin, green);

  analogWrite(bluePin, blue);  

Nối 2 LED còn lại với điện trở 1K tới các chân 10 và 11, như bạn thấy trên sơ đồ. Download và mở đoạn code trong Autodesk Circuits module hoặc copy và paste nó vào một bản phác thảo Arduino mới. Tải nó lên mạch Arduino Uno của bạn và quan sát đèn LED để xem các dòng code hoạt động ra sao, như chúng ta đã làm ở các bài trước.

Có một phần hơi lạ ở đoạn code này là hàm setColor();. Nó là một hàm tùy chỉnh, được đặt ở bên dưới khi vòng lặp loop() đã kết thúc.

void setColor(int red, int green, int blue)

{

 analogWrite(redPin, red);

 analogWrite(greenPin, green);

 analogWrite(bluePin, blue); 

}

Một hàm định nghĩa – function definition khai báo một tên và những loại arguments mà hàm đó sẽ thực hiện, bạn có thể hiểu nó như là cấu hình cài đặt mà bạn muốn thay đổi mỗi lần mà bạn chạy đoạn code mà nó chứa bên trong. Trong hàm đơn giản này, 3 giá trị nguyên được viết lên 3 chân LED sử dụng analogWrite();.

setColor(255, 255, 0); // yellow

Mỗi lần mà hàm này được nhắc đến trong vòng lặp chính main loop, chương trình sẽ thực hiện đoạn code bên trong của hàm này trước khi tiếp tục chạy vòng lặp chính. Trong trường hợp này, arguments được dùng như là độ sáng của mỗi LED. Phạm vi độ sáng là từ 0-255 bởi vì mỗi màu được xác đinh bởi một Byte, như vậy ta có thể thấy 256 trạng thái khác nhau.

/*

* Code for cross-fading 3 LEDs, red, green and blue (RGB) 

* To create fades, you need to do two things: 

*  1. Describe the colors you want to be displayed

*  2. List the order you want them to fade in

*

* DESCRIBING A COLOR:

* A color is just an array of three percentages, 0-100, 

*  controlling the red, green and blue LEDs

*

* Red is the red LED at full, blue and green off

*   int red = { 100, 0, 0 }

* Dim white is all three LEDs at 30%

*   int dimWhite = {30, 30, 30}

* etc.

*

* Some common colors are provided below, or make your own

* LISTING THE ORDER:

* In the main part of the program, you need to list the order 

*  you want to colors to appear in, e.g.

*  crossFade(red);

*  crossFade(green);

*  crossFade(blue);

*

* Those colors will appear in that order, fading out of 

*    one color and into the next  

*

* In addition, there are 5 optional settings you can adjust:

* 1. The initial color is set to black (so the first color fades in), but 

*    you can set the initial color to be any other color

* 2. The internal loop runs for 1020 interations; the 'wait' variable

*    sets the approximate duration of a single crossfade. In theory, 

*    a 'wait' of 10 ms should make a crossFade of ~10 seconds. In 

*    practice, the other functions the code is performing slow this 

*    down to ~11 seconds on my board. YMMV.

* 3. If 'repeat' is set to 0, the program will loop indefinitely.

*    if it is set to a number, it will loop that number of times,

*    then stop on the last color in the sequence. (Set 'return' to 1, 

*    and make the last color black if you want it to fade out at the end.)

* 4. There is an optional 'hold' variable, which pasues the 

*    program for 'hold' milliseconds when a color is complete, 

*    but before the next color starts.

* 5. Set the DEBUG flag to 1 if you want debugging output to be

*    sent to the serial monitor.

*

*    The internals of the program aren't complicated, but they

*    are a little fussy -- the inner workings are explained 

*    below the main loop.

*

* April 2007, Clay Shirky <This email address is being protected from spambots. You need JavaScript enabled to view it.

*/ 

 

// Output

int redPin = 9;   // Red LED,   connected to digital pin 9

int grnPin = 10;  // Green LED, connected to digital pin 10

int bluPin = 11;  // Blue LED,  connected to digital pin 11

 

// Color arrays

int black[3]  = { 0, 0, 0 };

int white[3]  = { 100, 100, 100 };

int red[3]    = { 100, 0, 0 };

int green[3]  = { 0, 100, 0 };

int blue[3]   = { 0, 0, 100 };

int yellow[3] = { 40, 95, 0 };

int dimWhite[3] = { 30, 30, 30 };

// etc.

 

// Set initial color

int redVal = black[0];

int grnVal = black[1]; 

int bluVal = black[2];

 

int wait = 10;      // 10ms internal crossFade delay; increase for slower fades

int hold = 0;       // Optional hold when a color is complete, before the next crossFade

int DEBUG = 1;      // DEBUG counter; if set to 1, will write values back via serial

int loopCount = 60; // How often should DEBUG report?

int repeat = 3;     // How many times should we loop before stopping? (0 for no stop)

int j = 0;          // Loop counter for repeat

 

// Initialize color variables

int prevR = redVal;

int prevG = grnVal;

int prevB = bluVal;

 

// Set up the LED outputs

void setup()

{

  pinMode(redPin, OUTPUT);   // sets the pins as output

  pinMode(grnPin, OUTPUT);   

  pinMode(bluPin, OUTPUT); 

 

  if (DEBUG) {           // If we want to see values for debugging...

    Serial.begin(9600);  // ...set up the serial ouput 

  }

}

 

// Main program: list the order of crossfades

void loop()

{

  crossFade(red);

  crossFade(green);

  crossFade(blue);

  crossFade(yellow);

 

  if (repeat) { // Do we loop a finite number of times?

    j += 1;

    if (j >= repeat) { // Are we there yet?

      exit(j);         // If so, stop.

    }

  }

}

 

/* BELOW THIS LINE IS THE MATH -- YOU SHOULDN'T NEED TO CHANGE THIS FOR THE BASICS

* The program works like this:

* Imagine a crossfade that moves the red LED from 0-10, 

*   the green from 0-5, and the blue from 10 to 7, in

*   ten steps.

*   We'd want to count the 10 steps and increase or 

*   decrease color values in evenly stepped increments.

*   Imagine a + indicates raising a value by 1, and a -

*   equals lowering it. Our 10 step fade would look like:

*   1 2 3 4 5 6 7 8 9 10

* R + + + + + + + + + +

* G   +   +   +   +   +

* B     -     -     -

* The red rises from 0 to 10 in ten steps, the green from 

* 0-5 in 5 steps, and the blue falls from 10 to 7 in three steps.

* In the real program, the color percentages are converted to 

* 0-255 values, and there are 1020 steps (255*4).

* To figure out how big a step there should be between one up- or

* down-tick of one of the LED values, we call calculateStep(), 

* which calculates the absolute gap between the start and end values, 

* and then divides that gap by 1020 to determine the size of the step  

* between adjustments in the value.

*/

 

int calculateStep(int prevValue, int endValue) {

  int step = endValue - prevValue; // What's the overall gap?

  if (step) {                      // If its non-zero, 

    step = 1020/step;              //   divide by 1020

  } 

  return step;

}

 

/* The next function is calculateVal. When the loop value, i,

*  reaches the step size appropriate for one of the

*  colors, it increases or decreases the value of that color by 1. 

*  (R, G, and B are each calculated separately.)

*/

 

int calculateVal(int step, int val, int i) {

 

  if ((step) && i % step == 0) { // If step is non-zero and its time to change a value,

    if (step > 0) {              //   increment the value if step is positive...

      val += 1;           

    } 

    else if (step < 0) {         //   ...or decrement it if step is negative

      val -= 1;

    } 

  }

  // Defensive driving: make sure val stays in the range 0-255

  if (val > 255) {

    val = 255;

  } 

  else if (val < 0) {

    val = 0;

  }

  return val;

}

 

/* crossFade() converts the percentage colors to a 

*  0-255 range, then loops 1020 times, checking to see if  

*  the value needs to be updated each time, then writing

*  the color values to the correct pins.

*/

 

void crossFade(int color[3]) {

  // Convert to 0-255

  int R = (color[0] * 255) / 100;

  int G = (color[1] * 255) / 100;

  int B = (color[2] * 255) / 100;

 

  int stepR = calculateStep(prevR, R);

  int stepG = calculateStep(prevG, G); 

  int stepB = calculateStep(prevB, B);

 

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

    redVal = calculateVal(stepR, redVal, i);

    grnVal = calculateVal(stepG, grnVal, i);

    bluVal = calculateVal(stepB, bluVal, i);

 

    analogWrite(redPin, redVal);   // Write current values to LED pins

    analogWrite(grnPin, grnVal);      

    analogWrite(bluPin, bluVal); 

 

    delay(wait); // Pause for 'wait' milliseconds before resuming the loop

 

    if (DEBUG) { // If we want serial output, print it at the 

      if (i == 0 or i % loopCount == 0) { // beginning, and every loopCount times

        Serial.print("Loop/RGB: #");

        Serial.print(i);

        Serial.print(" | ");

        Serial.print(redVal);

        Serial.print(" / ");

        Serial.print(grnVal);

        Serial.print(" / ");  

        Serial.println(bluVal); 

      } 

      DEBUG += 1;

    }

  }

  // Update current values for next loop

  prevR = redVal; 

  prevG = grnVal; 

  prevB = bluVal;

  delay(hold); // Pause for optional 'wait' milliseconds before resuming the loop

}

Giờ hay download và mở đoạn code từ project RBG này, hoặc copy và paste đoạn code vào một trang phác thảo Arduino mới. Đọc các comments để hiểu rõ hơn về cách chương trình hoạt động. Làm một vài phép toán để chuyển khoảng giá trị từ 0-100 sang khoảng màu mà LED cần, từ đó bạn sẽ thấy được tỷ lệ phần trăm thay cho khoảng 0-255. Nó sử dụng một bộ các biến gọi là mảng arrays để chứa giá trị các màu, và 3 hàm được người dùng xác định dùng để tính toán giá trị nhạt dần giữa các màu, điều này giúp vòng lặp loop() trông đẹp và ngắn gọn hơn. crossFade(red); được đọc gần như là Tiếng Anh. Chúng ta sẽ học một vài từ khóa ít gặp trong bản phác thảo này ở các bài học tơi, nhưng trước hết hãy chúc mừng chính mình vì tất cả những gì mà bạn đã năm được sau bài học này. 

Biên dịch từ: http://www.instructables.com/id/Getting-Started-With-Arduino/

 

cuongbilly95
Author: Nguyễn Phú Cường
About: Nguyen Phu Cuong. Center for Training of Excellent Students (CTES), Hanoi University of Science and Technology (HUST), 1 Dai Co Viet road, Hai Ba Trung Dist., Hanoi, Vietnam. Mobile: +84 (0)986909050. https://www.fb.com/cuong.billy

Donate

Donate using PayPal
Amount: