HACK NÃO gửi vào
- 6509 lượt xem
Thấy bài viết của Tôi yêu Arduino rất hay, mình quyết định thử và thành công. Sẵn tiện demo cho các bạn một ví dụ hay về nó luôn, đó là fade led 11. Sẽ có 2 vấn đề bạn học được: một là, hàm fade led và delay; hai là ứng dụng của .bind(this) trong javascript.
I. Chuẩn bị
II. Lắp mạch
III. Code ví dụ của Johnny-five về fade led
Với code trên từ http://johnny-five.io/examples/led-fade/, bạn sẽ thấy con LED sẽ sáng từ từ rồi tắt đi sau 5s. Nhưng bạn có để ý rằng, nó sẽ ko sáng lại như cách lập trình truyền thống? Vì sao?
Vì javascript là một ngôn ngữ hướng sự kiện nó không có khái niệm vòng lặp loop như Arduino, vì vậy, bạn cần phải tự làm một vòng for rồi chơi hàm sleep (npm install -g sleep). Nhưng như thế cùi bắp làm thế nào ý, trong khi javascript hoàn toàn có thể song song hóa vấn đề một cách dễ dàng.
Vì vậy, mình sẽ đi theo hướng xử lý bất đồng bộ của Javascript để làm cái example fade 1000ms như Arduino.
IV. Fade led bất đồng bộ 1000ms
Với việc chia ra các sự kiện, cụ thể kịch bản như sau:
Nhìn có vẻ đệ quy :), nhưng xin thưa, ko phải thế bạn nhé! Thực sự khi thực thi nó là một chuỗi các sự kiện liên tục nhau và được xếp thành một hàng - cùng 1 cấp! Nói một cách nôm na, nó như cái thư viện xử lý bất đồng bộ của bạn ksp viết đấy. Hay mình đoán ksp dựa vào nguyên lý bất đồng bộ của javascript để viết thư viện bất đồng bộ trên Arduino.
Javascript nó hay ở chỗ, bạn hoàn toàn có thể phân rã công việc theo hướng sự kiện ngay trong quá trình viết code như thế này, chứ không cần phải thiết đặt phức tạp như C++. Điều đó giúp bạn song song hóa đươc nhiều vấn đề (thực ra không song song mà là bất đồng bộ), thành ra với các ứng dụng giao tiếp thời gian thực thì javascript là số 1.
Trong ví dụ này mình chỉ muốn truyền đạt bấy nhiêu đó thôi, các bạn vọc thêm sẽ ok!