.. note::
¡Hola! Bienvenido a la Comunidad de Entusiastas de SunFounder Raspberry Pi & Arduino & ESP32 en Facebook. Profundiza en Raspberry Pi, Arduino y ESP32 con otros entusiastas.
**¿Por qué unirse?**
- **Soporte experto**: Resuelve problemas post-venta y desafíos técnicos con la ayuda de nuestra comunidad y equipo.
- **Aprender y compartir**: Intercambia consejos y tutoriales para mejorar tus habilidades.
- **Avances exclusivos**: Obtén acceso anticipado a nuevos anuncios de productos y vistas previas.
- **Descuentos especiales**: Disfruta de descuentos exclusivos en nuestros productos más recientes.
- **Promociones y sorteos festivos**: Participa en sorteos y promociones de temporada.
👉 ¿Listo para explorar y crear con nosotros? ¡Haz clic en [|link_sf_facebook|] y únete hoy mismo!
.. _2.1.6_js:
2.1.6 Módulo de Codificador Rotativo
========================================
Introducción
------------------
En este proyecto, aprenderás sobre el Codificador Rotativo. Un codificador
rotativo es un interruptor electrónico con un conjunto de pulsos regulares
en una secuencia de tiempo estricta. Cuando se usa con IC, puede lograr incrementos,
decrementos, cambio de página y otras operaciones como el desplazamiento del ratón,
selección de menús, entre otros.
Componentes necesarios
----------------------------
En este proyecto, necesitamos los siguientes componentes.
.. image:: ../img/Part_two_25.png
Es definitivamente conveniente comprar un kit completo, aquí está el enlace:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Nombre
- ARTÍCULOS EN ESTE KIT
- ENLACE
* - Kit Raphael
- 337
- |link_Raphael_kit|
También puedes comprarlos por separado en los enlaces a continuación.
.. list-table::
:widths: 30 20
:header-rows: 1
* - INTRODUCCIÓN DE COMPONENTES
- ENLACE DE COMPRA
* - :ref:`cpn_gpio_board`
- |link_gpio_board_buy|
* - :ref:`cpn_breadboard`
- |link_breadboard_buy|
* - :ref:`cpn_wires`
- |link_wires_buy|
* - :ref:`cpn_rotary_encoder`
- |link_rotary_encoder_buy|
Esquema de diagrama
-------------------------
.. image:: ../img/image349.png
:align: center
Procedimientos experimentales
---------------------------------
**Paso 1:** Construye el circuito.
.. image:: ../img/2.1.6_fritzing.png
:align: center
En este ejemplo, podemos conectar el pin del Codificador Rotativo directamente al
Raspberry Pi usando una placa de pruebas y un cable de 40 pines. Conecta el GND del
Codificador Rotativo a GND, 「+」a 5V, SW al GPIO digital 27, DT al GPIO digital 18
y CLK al GPIO digital 17.
**Paso 2:** Ve a la carpeta del código.
.. raw:: html
.. code-block::
cd ~/raphael-kit/nodejs/
**Paso 3:** Ejecuta el código.
.. raw:: html
.. code-block::
sudo node rotary_encoder_module.js
Verás el conteo en la terminal.
Cuando giras el codificador rotativo en el sentido de las agujas del reloj, el conteo aumenta;
cuando lo giras en sentido contrario a las agujas del reloj, el conteo disminuye.
Si presionas el interruptor del codificador rotativo, las lecturas volverán a cero.
**Código**
.. code-block:: js
const Gpio = require('pigpio').Gpio;
const clkPin = new Gpio(17, {
mode: Gpio.INPUT,
pullUpDown: Gpio.PUD_DOWN,
edge: Gpio.RISING_EDGE
});
const dtPin = new Gpio(18, {
mode: Gpio.INPUT,
pullUpDown: Gpio.PUD_DOWN,
});
const swPin = new Gpio(27, {
mode: Gpio.INPUT,
pullUpDown: Gpio.PUD_UP,
edge: Gpio.FALLING_EDGE
});
var globalCounter = 0;
clkPin.on('interrupt',()=>{
if(dtPin.digitalRead()==1){
globalCounter--;
}
else{
globalCounter++;
}
console.log(`globalCounter = ${globalCounter}`);
});
swPin.on('interrupt', () => {
globalCounter = 0;
console.log(`globalCounter = ${globalCounter}`);
});
**Explicación del código**
.. code-block:: js
var globalCounter = 0;
clkPin.on('interrupt',()=>{
if(dtPin.digitalRead()==1){
globalCounter--;
}
else{
globalCounter++;
}
console.log(`globalCounter = ${globalCounter}`);
});
Cuando dtPin pasa de bajo a alto, si clkPin está alto,
el conteo disminuye,
de lo contrario el conteo aumenta.
.. code-block:: js
swPin.on('interrupt', () => {
globalCounter = 0;
console.log(`globalCounter = ${globalCounter}`);
});
swPin dará salida a bajo cuando se presiona el eje.
Deja que globalCounter llegue a cero en este punto.
Imagen del fenómeno
------------------------
.. image:: ../img/2.1.6rotary_ecoder.JPG
:align: center