domingo, 19 de marzo de 2023

Listado de primos empleando JavaScript

100 primeros números primos

  1. const fnPrimosArrow = () => {
  2. let lista = [2]; // Inicia con 2
  3. let val = 3, cont = 0;
  4. while (cont < 99) { // Hace 99 inserciones más
  5. let aux = 0;
  6. for (let i = 2; i < val; i++) {
  7. if (val % i === 0){
  8. aux++;
  9. continue; // Si hay 1 divisor avanza el bucle
  10. }
  11. }
  12. if (aux === 0) {
  13. lista.push(val);
  14. cont++;
  15. }
  16. val += 2; // Solo evalúa impares
  17. }
  18. return lista;
  19. };
  20. console.log(fnPrimosArrow());

Números primos con parámetro de cantidad

  1. const fnPrimosArrow = cantidad => {
  2. let lista = [2];
  3. let val = 3, cont = 0;
  4. while (cont < cantidad - 1) {
  5. let aux = 0;
  6. for (let i = 2; i < val; i++) {
  7. if (val % i === 0){
  8. aux++;
  9. continue;
  10. }
  11. }
  12. if (aux === 0) {
  13. lista.push(val);
  14. cont++;
  15. }
  16. val += 2;
  17. }
  18. return lista;
  19. };
  20. console.log(fnPrimosArrow(10).join(" - "));
  21. // 2 - 3 - 5 - 7 - 11 - 13 - 17 - 19 - 23 - 29

sábado, 18 de marzo de 2023

Template literals

Es una forma de imprimir resultados en pantalla de forma más armoniosa o para almacenar sin tener que recurrir a demasiada concatenación variables de tipo String, para su uso se emplea comillas invertidas (``), atajo ALT + 96, en lugar de comillas ("") para definir una cadena. Sus usos son:

  1. /*Mostrar datos en pantalla que contenga comillas simples o dobles*/
  2. console.log(`Bienvenido a "JavaScript"`);
  3. //Salida: Bienvenido a "JavaScript"
  4. console.log(`Puedes emplear comilla doble " y simple '`);
  5. //Salida: Puedes emplear comilla doble " y simple'

  1. // Listar elementos con saltos de línea sin necesidad de \n
  2. console.log(`LISTADO
  3. 1.- UNO
  4. 2.- DOS
  5. 3.- TRES`);
  6. /*Salida:
  7. LISTADO
  8. 1.- UNO
  9. 2.- DOS
  10. 3.- TRES
  11. */

  1. // Interpolar valores y texto
  2. let fecha = "6 de octubre";
  3. let perro = {nombre: "Argos", raza: "pastor alemán"};
  4. console.log(`Con fecha ${fecha} se registra a ${perro.nombre} de raza ${perro.raza}`);
  5. //Salida: Con fecha 6 de octubre se registra a Argos de raza pastor alemán

NOTA: Para interpolar valores se emplea ${...}

jueves, 1 de diciembre de 2022

Base de datos para un punto de venta

El siguiente código es para dar soporte a un sistema de venta mediante la inclusión de una base de datos relacional llamada ventas.


Código SQL para MySQL

  1. -- ------------------------------------
  2. -- Tabla "categoria"
  3. -- ------------------------------------
  4. CREATE TABLE `ventas`.`categoria` (
  5. `id` INT NOT NULL AUTO_INCREMENT ,
  6. `nombre` VARCHAR(50) NOT NULL ,
  7. `descripcion` TEXT NULL ,
  8. PRIMARY KEY (`id`)
  9. ) ENGINE = InnoDB;
  10. -- ------------------------------------
  11. -- Tabla "producto"
  12. -- ------------------------------------
  13. CREATE TABLE `ventas`.`producto` (
  14. `id` INT NOT NULL AUTO_INCREMENT ,
  15. `nombre` VARCHAR(255) NOT NULL ,
  16. `precio` DECIMAL(10,2) NOT NULL ,
  17. `descripcion` TEXT NULL ,
  18. `cantidad` INT NOT NULL ,
  19. `categoria` INT NOT NULL ,
  20. PRIMARY KEY (`id`),
  21. CONSTRAINT fk_prod_cat
  22. FOREIGN KEY (categoria)
  23. REFERENCES categoria (id)
  24. ON DELETE NO ACTION
  25. ON UPDATE NO ACTION
  26. ) ENGINE = InnoDB;
  27. -- ------------------------------------
  28. -- Tabla "cliente"
  29. -- ------------------------------------
  30. CREATE TABLE `ventas`.`cliente` (
  31. `id` INT NOT NULL AUTO_INCREMENT ,
  32. `dni` VARCHAR(20) NOT NULL UNIQUE ,
  33. `nombres` VARCHAR(150) NOT NULL ,
  34. `apellidos` VARCHAR(150) NOT NULL ,
  35. `correo` VARCHAR(200) NOT NULL UNIQUE ,
  36. PRIMARY KEY (`id`)
  37. ) ENGINE = InnoDB;
  38. -- ------------------------------------
  39. -- Tabla "empleado"
  40. -- ------------------------------------
  41. CREATE TABLE `ventas`.`empleado` (
  42. `id` INT NOT NULL AUTO_INCREMENT ,
  43. `dni` VARCHAR(20) NOT NULL UNIQUE ,
  44. `nombres` VARCHAR(50) NOT NULL ,
  45. `paterno` VARCHAR(50) NOT NULL ,
  46. `materno` VARCHAR(50) NOT NULL ,
  47. `correo` VARCHAR(200) NOT NULL UNIQUE ,
  48. `telefono` VARCHAR(30) NOT NULL UNIQUE ,
  49. `clave` BLOB(200) NOT NULL ,
  50. PRIMARY KEY (`id`)
  51. ) ENGINE = InnoDB;
  52. -- ------------------------------------
  53. -- Tabla "venta"
  54. -- ------------------------------------
  55. CREATE TABLE `ventas`.`venta` (
  56. `id` INT NOT NULL AUTO_INCREMENT ,
  57. `cliente` INT NOT NULL ,
  58. `empleado` INT NOT NULL ,
  59. `monto` DECIMAL(10,2) NOT NULL ,
  60. `fecha` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ,
  61. PRIMARY KEY (`id`),
  62. CONSTRAINT fk_venta_cliente
  63. FOREIGN KEY (cliente)
  64. REFERENCES cliente (id)
  65. ON DELETE NO ACTION
  66. ON UPDATE NO ACTION ,
  67. CONSTRAINT fk_venta_empl
  68. FOREIGN KEY (empleado)
  69. REFERENCES empleado (id)
  70. ON DELETE NO ACTION
  71. ON UPDATE NO ACTION
  72. ) ENGINE = InnoDB;
  73. -- ------------------------------------
  74. -- Tabla "detalle"
  75. -- ------------------------------------
  76. CREATE TABLE `ventas`.`detalle` (
  77. `id` INT NOT NULL AUTO_INCREMENT ,
  78. `venta` INT NOT NULL ,
  79. `producto` INT NOT NULL ,
  80. `precio` DECIMAL(10,2) NOT NULL ,
  81. `cantidad` INT NOT NULL ,
  82. PRIMARY KEY (`id`),
  83. CONSTRAINT fk_detalle_venta
  84. FOREIGN KEY (venta)
  85. REFERENCES venta (id)
  86. ON DELETE NO ACTION
  87. ON UPDATE NO ACTION ,
  88. CONSTRAINT fk_detalle_prod
  89. FOREIGN KEY (producto)
  90. REFERENCES producto (id)
  91. ON DELETE NO ACTION
  92. ON UPDATE NO ACTION
  93. ) ENGINE = InnoDB;

Datos para inicializar la base de datos

  1. -- ------------------------------------
  2. -- Datos de inicialización
  3. -- ------------------------------------
  4. -- 3 empleados
  5. INSERT INTO empleado(dni, nombres, paterno,
  6. materno, correo, telefono, clave) VALUES
  7. ('10001000','PAUL','GARCIA','MATTOS','paul@mail.com',
  8. '999888777',AES_ENCRYPT('2022','2022')),
  9. ('20002000','LORENA','HERRERA','SOTELO','lorena@mail.com',
  10. '999888666',AES_ENCRYPT('123456','123456')),
  11. ('30003000','DEMETRIO','GARCIA','GARCIA','demetrio@mail.com',
  12. '999888555',AES_ENCRYPT('ADMIN','ADMIN'));
  13. -- 2 clientes
  14. INSERT INTO cliente (dni, nombres, apellidos, correo) VALUES
  15. ('10101010','EMILIA','MELGAREJO CHAVEZ','emilia@mail.com'),
  16. ('10201020','KAREN','TORRES ALVA','karen@mail.com');
  17. -- 2 categorias
  18. INSERT INTO categoria(nombre, descripcion) VALUES
  19. ('BEBIDAS',null),('ENTRADAS','Lorem ipsum');
  20. -- 5 productos
  21. INSERT INTO producto(nombre, descripcion, precio, cantidad, categoria) VALUES
  22. ('Soda 500ml', 'Gaseosa de 500ml en botella de vidrio', 4.50, 100, 1),
  23. ('Soda 1l', 'Gaseosa de 1 litro retornable', 7.50, 50, 1),
  24. ('Chicha morada 500ml', 'Chicha morada de 500ml retornable', 3.50, 40, 1),
  25. ('Causa rellena - 250gr', 'Porción de causa de 250 gramos', 10.50, 10, 2),
  26. ('Papa a la huancaína', null, 11.00, 10, 2);
  27. -- 3 Ventas
  28. INSERT INTO venta(cliente,empleado,monto,fecha) VALUES
  29. (1,1,100,"2022-04-03 14:00:45"),
  30. (1,2,100,"2022-05-01 22:00:00"),
  31. (2,2,100,"2022-08-13 21:30:45");
  32. -- Detalle de cada venta
  33. INSERT INTO detalle(venta,producto,precio,cantidad) VALUES
  34. (1,4,10,5),
  35. (1,1,5,10);
  36. INSERT INTO detalle(venta,producto,precio,cantidad) VALUES
  37. (2,2,7.50,10),
  38. (2,3,2.50,10);
  39. INSERT INTO detalle(venta,producto,precio,cantidad) VALUES
  40. (3,4,10,10);

Vistas de la base de datos

  1. -- VISTAS
  2. -- ------------------------------------
  3. -- productos_view
  4. -- ------------------------------------
  5. CREATE VIEW productos_view AS SELECT
  6. p.id,
  7. p.nombre,
  8. p.precio,
  9. p.descripcion,
  10. p.cantidad,
  11. c.nombre AS categoria
  12. FROM producto p INNER JOIN categoria c
  13. ON p.categoria = c.id;
  14. -- ------------------------------------
  15. -- venta_view
  16. -- ------------------------------------
  17. CREATE VIEW venta_view AS SELECT
  18. v.id,
  19. CONCAT_WS(' ', c.nombres,c.apellidos) AS cliente,
  20. CONCAT_WS(' ', e.nombres,e.paterno,e.materno) AS empleado,
  21. v.fecha,
  22. v.monto,
  23. c.id AS id_cliente,
  24. e.id AS id_empleado
  25. FROM venta v
  26. INNER JOIN cliente c ON v.cliente = c.id
  27. INNER JOIN empleado e ON v.empleado = e.id;
  28. -- ------------------------------------
  29. -- detalle_view
  30. -- ------------------------------------
  31. CREATE VIEW detalle_view AS SELECT
  32. d.id,
  33. v.id AS venta,
  34. p.nombre AS producto,
  35. p.id AS id_producto,
  36. d.precio,
  37. d.cantidad
  38. FROM detalle d
  39. INNER JOIN venta v ON d.venta = v.id
  40. INNER JOIN producto p ON d.producto = p.id;

miércoles, 2 de marzo de 2022

Raspberry Pi - GPIO básico

Proyectos básicos

En este caso se presentarán 3 aplicaciones básicas en Raspberry Pi empleando diodos led, resistencias y pulsadores. Para el Raspberry Pi 4 modelo B, la distribución de sus 40 pines es:

EJERCICIO 01 - Encender y apagar un LED

El siguiente ejemplo encenderá un LED durante 5 segundos, luego lo apagará y así de forma consecutiva. Tener en cuenta que dependiendo del voltaje de funcionamiento del LED elegido se debe variar la resistencia para que este no resulte quemado y/o la luz se pueda apreciar.

Materiales:

  • Raspberry (Raspberry Pi 4 model B)
  • Led (Rojo con voltaje de 1.2v)
  • Protoboard
  • Cables dupont
  • Resistencia de 560 ohmnios

Diagrama de conexión:

Código

  1. #Biblioteca GPIO para controlar los pines del Raspberry Pi
  2. import RPi.GPIO as GPIO
  3. #Biblioteca "time" útil para realizar pausas
  4. import time
  5. GPIO.setmode(GPIO.BCM) #La numeración será según usar la numeración del chip BROADCOM
  6. GPIO.setwarnings(False) #Se deshabilitan las advertencias cuando entramos en un bucle
  7. GPIO.setup(21,GPIO.OUT) #Se indica que el PIN 21 es de salida
  8. #Bucle infinito
  9. while True:
  10. print("Encendido") #Mensaje en pantalla
  11. GPIO.output(21,GPIO.HIGH) #El PIN 21 se enciende (HIGH)
  12. time.sleep(5) #Se detiene 5 segundos
  13. print("Apagado") #Mensaje en pantalla
  14. GPIO.output(21,GPIO.LOW) #El PIN 21 se apaga (LOW)
  15. time.sleep(5) #Se detiene 5 segundos
  16. GPIO.cleanup #Se limpian los PINES

EJERCICIO 02 - Encender y apagar un LED con pulsador

El siguiente ejemplo encenderá un LED durante 5 segundos, luego lo apagará y así de forma consecutiva. Tener en cuenta que dependiendo del voltaje de funcionamiento del LED elegido se debe variar la resistencia para que este no resulte quemado y/o la luz se pueda apreciar.

Materiales:

  • Raspberry (Raspberry Pi 4 model B)
  • Led (Rojo con voltaje de 1.2v)
  • Protoboard
  • Pulsador
  • Cables dupont
  • Resistencia de 560 ohmnios

Diagrama de conexión:

Código

  1. import RPi.GPIO as GPIO
  2. GPIO.setmode(GPIO.BCM)
  3. GPIO.setwarnings(False)
  4. #Se indica expresamente que su estado por defecto es LOW (apagado)
  5. GPIO.setup(21,GPIO.OUT,initial=GPIO.LOW)
  6. #Se indica el PIN 20 como entrada. Además, configuración PULL DOWN
  7. GPIO.setup(20,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
  8. while True:
  9. if GPIO.input(20): #Se evalúa si el boton es pulsado
  10. print("Pulsado")
  11. GPIO.output(21,GPIO.HIGH)
  12. else:
  13. GPIO.output(21,GPIO.LOW)
  14. GPIO.cleanup

EJERCICIO 03 - Encender y apagar un LED con pulsadores sin mantener presionado

El siguiente ejemplo encenderá un LED durante 5 segundos, luego lo apagará y así de forma consecutiva. Tener en cuenta que dependiendo del voltaje de funcionamiento del LED elegido se debe variar la resistencia para que este no resulte quemado y/o la luz se pueda apreciar.

Materiales:

  • Raspberry (Raspberry Pi 4 model B)
  • Led (Rojo con voltaje de 1.2v)
  • Pulsador
  • Protoboard
  • Cables dupont
  • Resistencia de 560 ohmnios

Diagrama de conexión:

Código

  1. import RPi.GPIO as GPIO
  2. GPIO.setmode(GPIO.BCM)
  3. GPIO.setwarnings(False)
  4. GPIO.setup(21,GPIO.OUT,initial=GPIO.LOW)
  5. GPIO.setup(20,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
  6. #Variable auxiliar
  7. estado = False
  8. while True:
  9. if GPIO.input(20):
  10. estado = not estado #Se invierte el valor si se presiona el botón
  11. if estado:
  12. print("Encendido")
  13. GPIO.output(21,GPIO.HIGH)
  14. else:
  15. print("Apagado")
  16. GPIO.output(21,GPIO.LOW)
  17. GPIO.cleanup

Plataforma Arduino

 Según la documentación oficial de Arduino:

"Arduino es una plataforma electrónica de código abierto basada en hardware y software fáciles de usar. Las placas Arduino pueden leer entradas (luz en un sensor, un dedo en un botón o un mensaje de Twitter) y convertirlo en una salida: activar un motor, encender un LED, publicar algo en línea. Puede decirle a su placa qué hacer enviando un conjunto de instrucciones al microcontrolador en la placa. Para ello se utiliza el lenguaje de programación Arduino (basado en Wiring ), y el Software Arduino (IDE) , basado en Processing."

Las ventajas que ofrece Arduino frente a otras plataformas es el costo al ser en comparación más baratas que otras, su IDE es multiplataforma (sistemas operativos Windows, Mac y Linux), el IDE es basado en Processing empleando el lenguaje C++ que permite agregar nuevas bibliotecas y expandír aún más la cantidad de componentes y sistemas con los que puede interactuar. Finalmente, tanto el hardware como el software es abierto y extensible.

Modelos de Arduino

Arduino UNO

Características

  • Voltaje de entrada: 6v - 20v
  • Voltaje recomendado: 7v - 12v
  • Voltaje de operación: 5v
  • Pines digitales de entrada y salida: 14 (6 con salida PWM)
  • Pines análogos de entrada y salida: 6
  • Dimensiones: 68.6 mm por 53.4 mm

Arduino NANO

Características

  • Voltaje de entrada: 7v - 12v
  • Voltaje de operación: 5v
  • Pines digitales de entrada y salida: 22 (6 con salida PWM)
  • Pines análogos de entrada y salida: 8
  • Dimensiones: 18 mm por 45 mm

Arduino MEGA

Características

  • Voltaje de entrada: 6v - 20v
  • Voltaje recomendado: 7v - 12v
  • Voltaje de operación: 5v
  • Pines digitales de entrada y salida: 54 (15 con salida PWM)
  • Pines análogos de entrada y salida: 16
  • Dimensiones: 101.52 mm por 53.3 mm

Existen otros modelos como:

  • Arduino Zero
  • Arduino Due
  • Arduino Leonardo
  • Arduino Micro
  • Arduino Yún

Cada uno con sus características propias y variantes. Además, de otros modelos orientados a IoT como el Arduino MKR

Fuentes:

Arduino básico

Proyectos básicos

En este caso se presentarán 5 aplicaciones básicas en Arduino empleando diodos led, resistencias, pulsadores, interruptores DIP y potenciómetros.

EJERCICIO 01 - Encender y apagar un LED

El siguiente ejemplo encenderá un LED durante 3 segundos, luego lo apagará y así de forma consecutiva. Tener en cuenta que dependiendo del voltaje de funcionamiento del LED elegido se debe variar la resistencia para que este no resulte quemado y/o la luz se pueda apreciar.

Materiales:

  • Arduino (Arduino UNO)
  • Led (Verde con voltaje de 1.6v)
  • Protoboard
  • Cables dupont
  • Resistencia de 680 ohmnios

Diagrama de conexión:

Código

  1. //Constante que hace referencia al PIN donde se conecta el LED
  2. const int LED = 8;
  3. void setup(){
  4. pinMode(LED, OUTPUT); //Indica que el Pin es de salida
  5. digitalWrite(LED, LOW); //Indica que el LED por defecto esta apagado
  6. }
  7. void loop(){
  8. digitalWrite(LED, HIGH); //Enciende el LED
  9. delay(3000); //Espera 3000 milisegundos
  10. digitalWrite(LED, LOW); //Apaga el LED
  11. delay(3000); //Espera 3000 milisegundos
  12. }

EJERCICIO 02 - Encender y apagar un LED con pulsador

El siguiente ejemplo encenderá un LED mientras un pulsador se mantenga presionado, si se suelta se apagará y así de forma consecutiva. Tener en cuenta que dependiendo del voltaje de funcionamiento del LED elegido se debe variar la resistencia para que este no resulte quemado y/o la luz se pueda apreciar. Además, la configuración de la resistencia del pulsador es "PULL-DOWN" y de 10 KΩ

Materiales:

  • Arduino (Arduino UNO)
  • Led (Rojo con voltaje de 1.2v)
  • Protoboard
  • Pulsador
  • Cables dupont
  • Resistencias de 560Ω (LED) y 10KΩ (pulsador)

Diagrama de conexión:

Código

  1. //Constante que hace referencia al PIN donde se conecta el LED
  2. const int LED = 12;
  3. //Constante que hace referencia al PIN donde se conecta el pulsador
  4. const int PUL = 7;
  5. void setup(){
  6. pinMode(LED, OUTPUT); //Indica que el Pin es de salida
  7. pinMode(PUL, INPUT); //Indica que el Pin es de entrada
  8. digitalWrite(LED, LOW); //Indica que el LED por defecto esta apagado
  9. }
  10. void loop(){
  11. if(digitalRead(PUL)){ //Si el pulsador esta presionado
  12. digitalWrite(LED, HIGH); //Enciende el LED
  13. }else{ //Si el pulsador deja de estar presionado
  14. digitalWrite(LED, LOW); //Apaga el LED
  15. }
  16. }

EJERCICIO 03 - Encender y apagar un LED con pulsadores sin mantener presionado

El siguiente ejemplo encenderá un LED mientras al presionar un interruptor y se apagará al presionar otro, no es necesario mantenerlos presionados. Tener en cuenta que dependiendo del voltaje de funcionamiento del LED elegido se debe variar la resistencia para que este no resulte quemado y/o la luz se pueda apreciar. Además, la configuración de la resistencia de los pulsadores es "PULL-DOWN" y de 10 KΩ

Materiales:

  • Arduino (Arduino UNO)
  • Led (blanco con voltaje de 3.7v)
  • Protoboard
  • Pulsadores
  • Cables dupont
  • Resistencias de 100Ω (LED blanco) y 10KΩ (2 para los pulsadores)

Diagrama de conexión:

Código

  1. const int LED = 8;
  2. const int PUL_ON = 5;
  3. const int PUL_OFF = 2;
  4. boolean estado; //variable auxiliar para capturar el estado
  5. void setup() {
  6. pinMode(PUL_ON, INPUT);
  7. pinMode(PUL_OFF, INPUT);
  8. pinMode(LED, OUTPUT);
  9. }
  10. void loop() {
  11. //Estado en TRUE si se presiona el boton del PIN 5
  12. if(digitalRead(PUL_ON)){estado = true;}
  13. //Estado en FALSE si se presiona el boton del PIN 2
  14. if(digitalRead(PUL_OFF)){estado = false;}
  15. //Dependiendo del estado se enciendo o apaga el LED
  16. if(estado){
  17. digitalWrite(LED, HIGH);
  18. }else{
  19. digitalWrite(LED, LOW);
  20. }
  21. }

EJERCICIO 04 - Encender y apagar varios LED con interruptores DIP

El siguiente ejemplo encenderá varios LED mientras el interruptor correspondiente se mantenga en ON (cerrando circuito). Tener en cuenta que dependiendo del voltaje de funcionamiento del LED elegido se debe variar la resistencia para que este no resulte quemado y/o la luz se pueda apreciar. Además, la configuración de la resistencia de los interruptores es "PULL-DOWN" y de 10 KΩ

Materiales:

  • Arduino (Arduino UNO)
  • LES (Rojo con voltaje de 1.2v, blanco y azul con voltaje de 3.7v y amarillo con voltaje de 1.6v)
  • Protoboard
  • Conmutadores DIP de 4 canales
  • Cables dupont
  • Resistencias de 100Ω (LED blanco y azul), 220Ω (LED rojo), 390Ω (LED amarillo) y 10KΩ (4 para los conmutadores DIP)

Diagrama de conexión:

Código

  1. //Constantes para los LED
  2. const int LED1 = 7;
  3. const int LED2 = 8;
  4. const int LED3 = 12;
  5. const int LED4 = 13;
  6. //Constantes para cada conmutador
  7. const int PUL1 = 5;
  8. const int PUL2 = 4;
  9. const int PUL3 = 3;
  10. const int PUL4 = 2;
  11. void setup(){
  12. pinMode(LED1, OUTPUT);
  13. pinMode(LED2, OUTPUT);
  14. pinMode(LED3, OUTPUT);
  15. pinMode(LED4, OUTPUT);
  16. pinMode(PUL1, INPUT);
  17. pinMode(PUL2, INPUT);
  18. pinMode(PUL3, INPUT);
  19. pinMode(PUL4, INPUT);
  20. }
  21. void loop(){
  22. //Control del LED blanco con el conmutador 1
  23. if(digitalRead(PUL1)){
  24. digitalWrite(LED1, HIGH);
  25. }else{
  26. digitalWrite(LED1, LOW);
  27. }
  28. //Control del LED rojo con el conmutador 2
  29. if(digitalRead(PUL2)){
  30. digitalWrite(LED2, HIGH);
  31. }else{
  32. digitalWrite(LED2, LOW);
  33. }
  34. //Control del LED amarillo con el conmutador 3
  35. if(digitalRead(PUL3)){
  36. digitalWrite(LED3, HIGH);
  37. }else{
  38. digitalWrite(LED3, LOW);
  39. }
  40. //Control del LED azul con el conmutador 4
  41. if(digitalRead(PUL4)){
  42. digitalWrite(LED4, HIGH);
  43. }else{
  44. digitalWrite(LED4, LOW);
  45. }
  46. }

Funcionamiento:


EJERCICIO 05 - modificar la intensidad de un LED con un potenciómetro

El siguiente ejemplo encenderá un LED y se controlará su intensidad empleando un potenciómetro. Tener en cuenta que dependiendo del voltaje de funcionamiento del LED elegido se debe variar la resistencia para que este no resulte quemado y/o la luz se pueda apreciar.

Materiales:

  • Arduino (Arduino UNO)
  • Led (blanco con voltaje de 3.7v)
  • Protoboard
  • Potenciómetro de 5KΩ
  • Cables dupont
  • Resistencias de 100Ω (LED blanco)

Diagrama de conexión:

Código

  1. //El PIN del led debe ser PWM (tener el símbolo ~)
  2. const int LED =11;
  3. //El potenciómetro se debe conectar a un PIN analógico
  4. const int POT = A0;
  5. //Variable auxiliar para almacenar el valor del potenciómetro
  6. int aux;
  7. void setup(){
  8. pinMode(LED,OUTPUT);
  9. digitalWrite(LED,LOW);
  10. }
  11. void loop(){
  12. //Capturar el valor del potenciómetro
  13. aux = analogRead(POT);
  14. //Se emplea MAP para dar un valor análogo entre 0 y 255 al valor recibido entre 0 y 1023
  15. analogWrite(LED, map(aux,0,1023,0,255));
  16. }

domingo, 30 de mayo de 2021

Arduino y Processing - Encender y apagar un LED

 Diagrama de conexión


Código en Arduino

  1. const int LED = 5;
  2. char dato;
  3. void setup() {
  4. Serial.begin(9600);
  5. pinMode(LED, OUTPUT);
  6. digitalWrite(LED, LOW);
  7. }
  8. void loop() {
  9. if (Serial.available() > 0)
  10. {
  11. dato = Serial.read();
  12. if (dato == 'E') {
  13. digitalWrite(LED, HIGH);
  14. } else {
  15. digitalWrite(LED, LOW);
  16. }
  17. }
  18. }

Código en Processing

  1. import processing.serial.*;
  2. Serial port;
  3. String TITULO="Control de LED - Arduino";
  4. PFont font;
  5. int qx=150;
  6. int qy=150;
  7. int qr=50;
  8. boolean state = false;
  9. String texto;
  10. void setup()
  11. {
  12. //println(Serial.list());
  13. port = new Serial(this, Serial.list()[0], 9600);
  14. size(300, 300);
  15. font = createFont("Arial", 20, true);
  16. frameRate(10);
  17. }
  18. void draw()
  19. {
  20. background(220, 220, 220);
  21. textFont(font, 20);
  22. fill(0);
  23. textAlign(CENTER);
  24. text(TITULO, width/2, 60);
  25. fill(0);
  26. stroke(0, 255, 0);
  27. if (mouseX > qx-qr && mouseX < qx+qr &&
  28. mouseY > qy-qr && mouseY < qy+qr && mousePressed) {
  29. state=!state;
  30. }
  31. noStroke();
  32. if (state) {
  33. fill(0, 0, 255);
  34. texto="ON";
  35. port.write('E');
  36. } else {
  37. fill(255, 0, 0);
  38. texto="OFF";
  39. port.write('A');
  40. }
  41. rectMode(RADIUS);
  42. rect(qx, qy, qr, qr);
  43. fill(0);
  44. text(texto, 150, 150);
  45. }

Interfaz gráfica