新闻详情

新闻详情

首页 / 资讯中心 / 详情

Johnny-Five 实践:用 LED 数组与电位器实现多灯联动控制(Leds + Sensor 实战指南)

发布时间:2026/10/29 22:03:18来源:尧图网络
Johnny-Five 实践:用 LED 数组与电位器实现多灯联动控制(Leds + Sensor 实战指南)
Johnny-Five 实践用 LED 数组与电位器实现多灯联动控制Leds Sensor 实战指南【免费下载链接】johnny-fiveJavaScript Robotics and IoT programming framework, developed at Bocoup.项目地址: https://gitcode.com/gh_mirrors/jo/johnny-five本篇技术指南以 Johnny-Five 官方示例docs/led-array-controller.md为核心讲解如何通过Leds数组集合类一次管理多颗 LED并借助模拟电位器Sensor的旋钮位置动态点亮对应的 LED 数量实现旋钮驱动灯条的经典交互场景。读完本文你将掌握Leds集合的构造与批量控制方法、Sensor的模拟量读取与scaleTo()数值映射技巧以及change事件驱动的实时响应编程模式可直接在 Arduino 等开发板上复现运行。示例概览旋钮控制一串 LEDdocs/led-array-controller.md展示了一个小而完整的硬件交互程序在面包板上将 5 颗 LED 分别接到数字引脚 26把一个 10K 电位器的中间抽头wiper接到模拟引脚 A0程序根据电位器旋转位置把 LED 从第一颗开始依次点亮。电位器转到最左端时所有 LED 熄灭向右旋转时灯依次亮起形成类似音量灯条的效果。对应的完整示例代码位于 eg/led-array-controller.js运行命令为node eg/led-array-controller.jsconst {Board, Leds, Sensor} require(johnny-five); const board new Board(); board.on(ready, () { const leds new Leds([2, 3, 4, 5, 6]); const pot new Sensor(A0); pot.on(change, () { const lastIndex Math.round(pot.scaleTo([-1, 4])); if (lastIndex -1) { leds.off(); } else { leds.each((led, index) { if (index lastIndex) { led.on(); } else { led.off(); } }); } }); });文中配有的接线参考图为 docs/breadboard/led-array-controller.png对应的 Fritzing 可编辑工程文件为 docs/breadboard/led-array-controller.fzz可用于在 Fritzing 中查看或修改接线。硬件接线与面包板布局从 Fritzing 图与示例代码可以确认以下接线约定组件连接目标LED 15数字引脚 2、3、4、5、6经限流电阻接地电位器两端5VVCC与 GND电位器中间抽头模拟引脚 A0接线要点每颗 LED 都需串联一个合适的限流电阻典型 220Ω330Ω防止电流过大损坏 LED 或引脚电位器构成分压电路旋转旋钮时 A0 上的电压在 05V 之间连续变化对应 ADC 读数值的变化。核心 APILeds 集合类Leds是 Johnny-Five 提供的 LED 集合Collection类定义在 lib/led/leds.js构造时接收一个引脚数组并批量实例化const leds new Leds([2, 3, 4, 5, 6]);从源码看Leds extends Collection其typegetter 返回Ledlib/led/leds.js因此传入的数字会被逐一包装为Led实例最终得到一个类数组对象{ length: 5, 0: Led, 1: Led, ... }。它还通过Collection.installMethodForwarding把Led原型上的方法如on、off、toggle、brightness、fade、strobe等批量转发到集合上——这意味着leds.off()会一次性关闭集合内所有 LED无需手写循环。Leds还支持传入共享属性对象来批量声明相同配置例如const leds new Leds({ pins: [2, 3, 4, 5, 6], board: board });这种共享属性 pins 数组的初始化方式由 lib/mixins/collection.js 中的构造逻辑支持它会将pins之外的键如board复制到每个 LED 的独立配置对象中。核心 APISensor 与 scaleTo 数值映射Sensor是 Johnny-Five 的通用模拟/数字传感器类定义在 lib/sensor.js。示例中new Sensor(A0)会把 A0 配置为模拟输入ANALOG 模式并持续采样。源码中的关键实现事实传感器默认按 10-bit01023分辨率处理模拟量若板卡 IO 驱动声明了RESOLUTION.ADC则采用该值lib/sensor.js模拟读数通过中位数滤波降低噪声在每个采样周期内积累样本、排序后取中间值再触发data/change事件lib/sensor.js 与 lib/sensor.jschange事件仅在滤波值相对上次结果变化超过threshold默认 1时触发lib/sensor.js避免频繁抖动触发无意义更新。scaleTo(low, high)是示例的灵魂函数其实现位于 lib/sensor.jsscaleTo(low, high) { const scale Array.isArray(low) ? low : [low, high]; return Fn.map(this.raw, 0, this.resolution, scale[0], scale[1]); }它基于Fn.maplib/fn.js把原始 ADC 值raw从[0, resolution]线性映射到目标区间。本例中pot.scaleTo([-1, 4])把 01023 的旋钮读数映射到 -14电位器位置rawscaleTo 输出Math.round 后点亮效果0最左端-1.0-1全部熄灭~2050.00只亮第 1 颗~4091.01亮前 2 颗~6142.02亮前 3 颗~8183.03亮前 4 颗1023最右端4.04全部 5 颗点亮设计 -1 作为下界是为了让最左端熄灭拥有独立的整数值避免与只亮一颗0混淆。由于Fn.map采用按位取整| 0映射结果本身即为整数配合Math.round即可得到稳定的 LED 索引。若需要浮点映射Sensor还提供了fscaleTo()lib/sensor.js。事件驱动控制逻辑拆解程序采用 Johnny-Five 标准的事件驱动模型board.on(ready, ...)等待板卡初始化完成此时 Firmata 等 IO 固件已就绪创建Leds与Sensor实例监听pot的change事件每次旋钮读数变化时重算目标索引lastIndex用leds.each((led, index) ...)遍历集合索引小于等于lastIndex的 LED 点亮其余熄灭lastIndex -1时整体调用leds.off()一次熄灭全部。each回调签名与Array.prototype.forEach一致(element, index)定义于 lib/mixins/collection.js。由于集合方法转发机制leds.off()实际等效于逐个调用每个Led.off()而Led.off()会把状态值置 0 并调用底层update()写入 IOlib/led/led.js。值得注意的细节示例先处理lastIndex -1的分支再处理正常分支避免了在索引为 -1 时index lastIndex的判断把所有 LED 误判为点亮因为此时条件恒成立。深入原理Led.on()/off() 的底层行为从 lib/led/led.js 可以看到on()与off()的底层差异on()在数字输出模式下直接写 HIGH在 PWM 模式下会把亮度值设为 255全亮并处理value为 null 或 0 等边界情况off()一律把状态值置 0 后写回 IO输出低电平熄灭。因此本示例适用于普通数字输出引脚Arduino 的数字引脚 26 均为 OUTPUT 模式实现的是纯开关式非调光控制。若将引脚换为 PWM 引脚Leds集合同样支持brightness()、fade()、pulse()等调光方法可实现亮度渐变与动画效果Leds甚至把pulse、fade、fadeIn、fadeOut、blink这些带回调的方法做了回调收敛处理——只有集合内所有 LED 都完成动画后才会触发回调lib/led/leds.js 与 lib/mixins/collection.js。运行与验证运行环境要求 Node.js 环境、USB 连接的 Arduino或其他受支持板卡以及烧录好的 StandardFirmata 固件。执行node eg/led-array-controller.js程序启动后旋转电位器观察 26 号引脚的 LED 应呈现逐颗点亮、逐颗熄灭的联动效果。若 LED 无反应可依次检查板卡串口是否被占用、固件版本、面包板接线是否短路/断路、限流电阻是否遗漏。如果想在关闭 LED 集合后复用Led还提供了toggle()在isOn状态间切换lib/led/led.js可以基于本示例扩展出更多交互逻辑。小结通过本示例可以掌握 Johnny-Five 中两组高频 API 的组合用法Leds集合以类数组方式批量管理多个 LED内部基于 lib/mixins/collection.js 的集合与方法转发机制Sensor.scaleTo()则负责把连续模拟量映射为离散档位。二者结合即可用最小代码实现模拟输入 → 多路数字输出的典型控制链路是后续构建灯带、电平指示器、仪表盘等应用的直接基础。相关文档与示例可在 docs/led.md、eg/led.js 以及 docs/sensor.md 中继续深入。【免费下载链接】johnny-fiveJavaScript Robotics and IoT programming framework, developed at Bocoup.项目地址: https://gitcode.com/gh_mirrors/jo/johnny-five创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/10/28 16:06:12

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/10/28 13:44:36

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/10/29 13:36:24

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/10/29 19:55:35

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/10/29 13:36:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/10/28 16:06:10

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉