Introducción a la programación orientada a objetos | Markus Edenhauser | Skillshare

Velocidad de reproducción


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Introducción a la programación orientada a objetos

teacher avatar Markus Edenhauser, Bringing IT and People togehter

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      Introducción a este curso

      2:29

    • 2.

      Experiencia práctica versus teoría

      1:10

    • 3.

      Requisitos previos para este curso

      2:46

    • 4.

      Descargo de responsabilidad

      1:45

    • 5.

      ESP32 Pinout

      2:25

    • 6.

      Código VS vs Arduino

      6:17

    • 7.

      Código fuente del código VS en Arduino

      4:58

    • 8.

      Simulador en línea

      2:07

    • 9.

      Enum

      6:38

    • 10.

      Estructura

      2:40

    • 11.

      Configuración básica de un proyecto vacío

      4:39

    • 12.

      Estructura de una clase y encapsulación

      5:11

    • 13.

      Instancia y constructor

      5:05

    • 14.

      Constructor de sobrecarga

      3:29

    • 15.

      Ejemplo de ejercicio Interacción de archivos de encabezado y CPP

      6:29

    • 16.

      Getter

      10:21

    • 17.

      Setter

      4:46

    • 18.

      Herencia

      7:21

    • 19.

      Función heredada

      5:47

    • 20.

      Recap Introducción

      1:48

    • 21.

      Cálculo de resistencia a las series

      4:52

    • 22.

      Controla el led con un objeto

      10:23

    • 23.

      Archivo de cabecera

      6:14

    • 24.

      LED de palanca

      7:12

    • 25.

      Apague el led después de x segundos

      7:50

    • 26.

      Desvanecimiento

      6:14

    • 27.

      Pulsado

      5:06

    • 28.

      Objetos instantáneos

      7:07

    • 29.

      Efecto de persecución de led

      2:35

    • 30.

      Cableado

      2:22

    • 31.

      Crear proyectos y clases

      5:42

    • 32.

      Cómo dirigir el sensor IR

      8:03

    • 33.

      Objetos en Array

      4:11

    • 34.

      Cómo hacer un motor

      4:00

    • 35.

      Evaluación de los sensores IR

      6:48

    • 36.

      Resumen de proyectos

      1:06

    • 37.

      Recap OOP

      1:35

    • 38.

      Cableado

      2:01

    • 39.

      Cómo agregar botón

      5:21

    • 40.

      Botón de debounce con milis

      10:39

    • 41.

      Detecta la duración de los clics

      2:22

    • 42.

      Interfaz limpia

      3:49

    • 43.

      Ledes de control

      3:29

    • 44.

      ButtonHeadlamp hereda de Button

      5:27

    • 45.

      Función Mantenga presionado el botón

      3:01

    • 46.

      Añadir función

      9:52

    • 47.

      Clase de implementación de tareas adicionales

      1:17

    • 48.

      Solución posible

      8:19

    • 49.

      Cableado

      2:45

    • 50.

      Cómo crear archivos de clase

      2:12

    • 51.

      Archivo de cabecera

      6:48

    • 52.

      Modo de juego

      6:08

    • 53.

      Modo de juego

      6:12

    • 54.

      Crear un sitio web

      5:58

    • 55.

      Acceder a la página web a través de ESP32

      11:13

    • 56.

      Transfiere datos desde el sitio web

      9:38

    • 57.

      Modo de juego en dos juegos

      13:49

    • 58.

      Cómo enviar eventos paralelos

      6:31

    • 59.

      Eventos de Prettify

      7:46

    • 60.

      Clase led

      7:16

    • 61.

      Crea y publica tu propia biblioteca

      7:01

    • 62.

      Resumen de los conocimientos

      4:17

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

391

Estudiantes

--

Proyectos

Acerca de esta clase

Especialmente en el desarrollo de microcontroladores a menudo trabajamos con bibliotecas, por ejemplo para controlar los componentes de hardware. En este curso te presentaremos las ventajas de un diseño de código fuente flexible y eficiente.

En todo el curso se usa un ESP32, pero todos los ejemplos (excepto el último con el sitio web/servidor web y WIFI), puedes hacer ejercicios y explicaciones con cualquier Arduino.

Una vez que hayas terminado este curso, podrás hacerlo…

  • ...crea tus propios programas y bibliotecas orientados a objetos

  • ...código fuente reutilizable

  • ... crear una arquitectura de código fuente limpia para una programación y adaptación

  • ... clases generalizadas con código y proporcionar las bibliotecas

  • ... aplica los conceptos básicos de OOP para tus proyectos y aplícalos inmediatamente.

  • ... ahorra tiempo para programar engorro. Debido al diseño conceptual dado, tu código escrito es más fácil de adaptar.

  • ... mantener tu propio código mejor incluso después de un período de tiempo más largo.

Qué vamos a hacer en el curso:

  • Fundamentos de programación orientada a objetos en el entorno Arduino. Pasaremos por los contenidos esenciales de la OOP Vamos a obtener ejemplos prácticos.

  • Ejemplo práctico: clase led propia. Muchas funciones e interfaces diferentes.

  • Ejemplo práctico 2: Galton con ascensor de mármol y evaluación de 12 sensores IR.

  • Ejemplo práctico 3: faro con solo uno(!) botón, dos led y tres modos de luz.

  • Ejemplo práctico: juego de rocas, papel, tijeras. Desarrollamos este pequeño juego. Competimos contra el bot y jugamos para ganar dos juegos. La lógica es activada por un servidor web en ESP32 (con eventos laterales al servidor).

Mi enfoque en el curso:

  • Ninguna (ok, solo muy pocas) diapositivas o Powerpoints. Comenzamos en lo básico inmediatamente con un ejemplo práctico. También la teoría se puede probar inmediatamente en el Arduino con el Monitor serie y así comprender mejor inmediatamente.

  • Los proyectos prácticos se desarrollan juntos en instrucciones paso a paso.

  • Juntos significa que yo demuestro el código, dependiendo de la tarea, y puedes seguirme junto con el código fuente.

  • Todos los códigos están disponibles para descargar en la plataforma, para que puedas llegar al resultado sin frustración.

  • No hay explicaciones o monólogos de teorías, tenemos derecho a trabajar en el capítulo básico.

Todos los bocetos o archivos de este curso se adjuntan en la sección Proyecto.

Aprovecha mis años de experiencia y obtén las habilidades clave en el desarrollo de microcontroladores.

Espero verte en clase

Markus Edenhauser

Conoce a tu profesor(a)

Teacher Profile Image

Markus Edenhauser

Bringing IT and People togehter

Profesor(a)

Hello!

I am Markus Edenhauser from Austria/Tyrol. I have professional experience in electrical engineering & finance industry as well as in the non-profit sector. My experiences range from IT auditor and trainer for it-topics, head of department for finance and technology to personnel management. Nowadays I develop funny things with microcontrollers for IoT devices #smarthome.

Education: Foreman in Electrical Engineering, Train the Trainer and Bachelor & Master degree in Business Informatics and Master degree in Coaching, Organizational & Human Resources Development.

I am looking forward to welcoming you in my courses.

pixelEDI

Ver perfil completo

Habilidades relacionadas

Desarrollo Lenguajes de programación HTML
Level: Intermediate

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • Sí
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

Transcripciones

1. Introducción a este curso: Introducciones y enfoque orientado a objetos con Arduino y ESPs. Hola y bienvenidos a este curso online. Estoy fuera porque sabe que soy desarrollador senior en el entorno de laboratorio, pero también en sistemas embebidos. En este curso online, estoy siguiendo en enfoque práctico que estamos construyendo juntos algunos proyectos. En primer lugar, pasamos por la teoría como mínimo, pero también estamos implementando en el primer capítulo, las primeras clases e imprimiendo algún código en el monitor serial. En el siguiente ejemplo, estamos controlando LEDs en tiempo de ejecución en diferentes tipos de estados. Y esta es una de las principales ventajas con el enfoque orientado a objetos que podemos editar y también ajustar aquí muchas cosas con diferentes componentes en tiempo real. Lo que quiero decir con diferentes estados al mismo tiempo. También estamos tratando con otros componentes, por ejemplo, sensores infrarrojos. Entonces, cuando tenemos diez o más sensores, ¿cómo podemos evaluarlos? Nosotros iniciamos eso. Estás haciendo esto con una matriz, por ejemplo. Y te mostraré cómo podemos controlarlos y evaluarlos de una manera fácil y conveniente. En el entorno Arduino cuando estamos desarrollando en sistemas embebidos con microcontroladores. lo que también estamos tenemos que lidiar con el uso limitado en los libros. Y este es uno de nuestros próximos dos ejemplos. Estamos creando un faro. Este faro solo tiene un empujón. Este pulsador. Estamos controlando tres tipos diferentes de voz ligera. El primero es un atajo porque el botón, se encenderá. El segundo. Estamos presionando el botón por 1 segundo, segundo, LET continúa. Si presiona el botón y lo mantiene presionado durante más de dos segundos, el primer LED encajará en nuestro último ejemplo. Hacemos el clásico juego rock paper tijera con varios motores y recreando la lógica del juego por nuestro yo de una manera orientada a objetos. Cuando te interesa llevar tu propio código fuente al siguiente nivel para escribir y limpiador de códigos y también de una manera más estructurada. No lo dudes y esperes más y consigue esta clase y código conmigo de la manera orientada a objetos. Estoy deseando darle la bienvenida en este curso online. 2. Experiencia práctica vs. teoría: Antes de empezar con la parte de programación, me gustaría centrarme en un tema importante. Eso significa experiencia práctica versus la teoría. Soy consciente y estoy seguro de que muchos de ustedes tienen muchos años de experiencia en codificación y también en el desarrollo de programas. Pero aquí en este entorno, me gustaría estar un poco más de mente abierta. Eso significa que tú, por supuesto, tienes tu propio acercamiento a algunas cosas. Y tal vez te estás preguntando, ¿por qué lo complica demasiado? Seguramente hay otra forma de cómo podemos implementar partes de códigos tan pequeños, por ejemplo, esto está bien. Esto está completamente bien. Puedes adaptarte a todas mis versiones a tu enfoque y también implementadas individualmente para ti. Siempre hay alguna discusión en curso cuando se trata de lenguajes de programación, cuando se trata de implementar datos codificados por fuentes. Y no te tomes demasiado en serio, sé de mente abierta, y adaptarlo a ti en el acercamiento. 3. Prerrequisitos para este curso: Prerrequisitos. ¿ Qué puedo suponer que traes a este curso online que he recogido aquí cuatro puntos principales. Me gustaría estar aquí muy transparente. Lo que puedes esperar se deshace curso online y lo que no está cubierto. El primero será, por supuesto, debes traer algunos conocimientos básicos de programación. Eso significa que debes conocer los diferentes tipos de tipos de datos. Deberías saber qué es un si está en el conocimiento fundamental, básico de la programación porque esto realmente no está cubierto aquí. Por supuesto, le expliqué lo que hago en toda la decodificación y luego el código fuente, pero no hay un conocimiento más profundo detrás de él. La segunda parte es también que estoy cubriendo todos los diagramas de cableado, etc, en el ESP 32. Por supuesto, todos estos objetos están en deuda. El código fuente es aplicable para el entorno Arduino. No obstante, si se utiliza una unidad externa, normal n, nano, etc, siempre es el mismo concepto, el mismo código fuente. Pero solo ten en cuenta, estoy usando el ESP 3200 porque tiene alguna conexión Wi-Fi. Es muy barato y puedes usarlo para dispositivos de Internet de las Cosas. Pero también es aplicable para el entorno Arduino. Estoy usando Visual Studio Code con la sangre para el bloqueo masculino. Y es un poco diferente a la unión original EDI, pero puedes usarlo. Es, no importa porque el código fuente es C plus plus y funciona en casi cada programación, programación, cuál usar. Te mostré también cómo puedes usar mi código fuente e implementado en el EDI de Arduino. El último, creo que también uno de los puntos principales es que te interese una programación orientada a objetos porque el primer comienzo te parece como un poco más en el código fuente, más líneas de código. Pero cuando se pasa por los ejemplos como aquí están los LEDs a los que puede ver las principales ventajas cuando estamos codificando con forma orientada a objetos porque somos más flexibles, podemos adaptarnos a ciertas situaciones y podemos hacer programas realmente, realmente cool con diferentes tipos de componentes de una manera fácil y rápida. Y es por eso que traigo este punto porque en el primer comienzo, escribimos, parece que estamos escribiendo más código, pero es más práctico, más factible, más adaptable. 4. Exención de responsabilidad: Algunas reflexiones sobre el descargo de responsabilidad. Traté de ser lo más cuidadoso posible cuando se trata de cinemática. Y la fuente va a ser precisa y mirarla una y otra vez. Pero no estoy libre de ningún error. Eso significa que tal vez cometí un error en partes de Bahrein y tú juntas todo. Y entonces la USP sí por ejemplo, una competencia automotriz se dañará o peor aún, podría ser quemada. Porque a menudo cuando estás cableando juntos los componentes de una manera forestal, entonces se pusieron realmente, realmente calientes. Y también se podría ocurrir en su piedra quemada. También es podría suceder si creces en un circuito abierto. Existe un peligro de vida. Podría ser asegurado de varias maneras. Siempre estar activo en el pod de Byron y en la parte de codificación. B también muy, muy reflexivo cuando se trata de diferentes tipos de componentes. Por ejemplo, no tengo la USP 32, que tiene pinouts un poco diferentes. A lo mejor tu ESP inició E2F. Entonces cuando estamos conectando el virus juntos, siempre revisa los GPIO, los datos de la pena de muerte. Tenga en cuenta lo que estamos haciendo un implementado y adaptado a sus propias versiones. No puedo garantizarles que todo lo que muestro trabaje en su sistema porque hay demasiados componentes y enfoques diferentes aquí afuera. Pero en mis videos anteriores mostrados, es muy sencillo seguir o estar tanto de los riesgos y luego tenemos un buen resultado. 5. ESP32 Pinout: Unas palabras al tema del cacahuete. Como es posible que sepas, un GPO o significa entrada y salida de propósito general. Eso significa que podemos utilizar, por ejemplo aquí el GPIO número 27 como entrada. Por lo que tenemos aquí en puro sensor detecta movimientos. Y cuando se detecta movimiento, podemos enviar y señalar aquí al pin 27. Pero en otro ejemplo fue a I-SPY herramienta de estudio. También podemos utilizar el pin GPO, pin 27 como salida. Eso significa que encenderá un LED, por ejemplo, que el LED se carnará o parpadeará. Por lo tanto, también debemos saber que hay un pinout y GPO P nada, y depende de qué empresa, fabricante y usa? Lo uso desde entrega AC. Y como puedes ver aquí, este es el pinout para ESPs 32 de una entrega fija. Y es un poco diferente a otros fabricantes. Por ejemplo, aquí no tengo conexión a tierra. Eso significa que siempre revise su p-naught. No obstante, si se trata de una certeza ESP, no siempre son las mismas. Consulta el GPO hará referencia a la referencia de pinout para que puedas estar seguro que este pin será me da necesidad de lo que necesites. Por ejemplo, aquí tengo aquí no hay pin de tierra o el pin 3534 son solo de entrada. Nsc es algunos otros 32s que tienen también 3232 solo como entrada declarada. Tenemos jóvenes usados para flash interno, nunca recomendamos para otro uso, los amarillos. Así que estar al tanto de los diferentes tipos. También hemos utilizado algunos pines táctiles. También tenemos algún convertidor AD, AD y DCM para que podamos transferir señales que datos. Esto también es siempre necesario cuando se trata cuando se trata cableado de partes de la TB conscientes de diferentes GPO, diferentes tipos de ESPs tienen diferentes GPIO y pinouts. Y entonces ojalá podamos tener y buen esquema de cableado y también podamos implementarlo en. 6. Código VS vs. Arduino: ¿ Por qué debería cambiar el EDA de Arduino a Visual Studio Code? Y hay una respuesta más simple que no tienes que hacerlo. Me gustaría mostrarles aquí solo mi opinión, cómo usted, ¿cuál es el flujo de trabajo? ¿ Por qué? Creo que Visual Studio Code es un poco más conveniente hora de decodificar la rutina diaria. En el lado izquierdo, lo vi en tu ED50, Python 2 en debajo, había dicho que son coordenadas de Visual Studio. Se puede ver que es muy similar en la superposición visual, pero está en el núcleo y el compilador estaba en una curva de exceso de velocidad. Y cuando lo compilamos, hay muchas diferencias. Siento muy primer ejemplo que estamos tratando aquí en este curso online, está haciendo aquí los LEDs con objetos están en fechados y te mostraré 1 primera cosa. Por ejemplo, si hago clic aquí en compilar y haga clic en el lado izquierdo del compilador, se puede ver que la literatura, el código necesita 1.7 segundos. No he hecho clic bien. Una vez más, agregando nueva EDA. Se tarda el doble de tiempo, tal vez tercero de largo. Y esto no es tanto necesariamente cuando realmente no hemos implementado bibliotecas de terceros, pero cuando lo hacemos más adelante, su miedo 678 bibliotecas externas, entonces realmente reconoces y diferencia significativa en las velocidades de compilación desde la rotonda de 20 segundos a través de más de un minuto en el ARN. Y esto es realmente molesto cuando solo estás cometiendo corto error de ortografía equivocada. Y también la velocidad cuando nos atrapan es diferente. Por ejemplo, creo el objeto rojo para dentro del constructor y estamos pasando el valor que haría. Entonces estamos saltando a la configuración solo para mostrarte la diferencia. Entonces estoy escribiendo aquí rojos dos puntos y veo toda la función en qué camino implementé en la clase que estamos tratando más adelante. Por ejemplo, hago clic en los corchetes de carne y luego veo que tengo que introducir un entero. mismo ejemplo aquí, el mismo flujo de trabajo, pero un poco diferente. Rojo dos puntos. No pasa nada. Voy a esperar. Y espero que algo se abra con control y espacio. El Arduino se está cargando ahí. Todas las funciones necesarias. Ahora lo tengo. Me gustaría poner la carne y T me pegó en retardo entero, vale, ya está seleccionado así que puedo anularlo con 500 por ejemplo. Y está hecho. No muy rápido, diría yo. Pero por supuesto lo puedes hacer en un ejemplo más. Entonces cuando tenemos año abierto la función de sabiduría del objeto que pudimos golpear la tecla Control y el ratón izquierdo. Y entonces debería saltar a la clase misma. Aquí. Etiqueta muy fácil aquí. Y aquí no se han cargado. No sé si soy torpe o no se ha cargado ya. No lo noté. Control. No lo sé. Debe funcionar, pero no tan rápido como en Visual Studio Code. Ahora, lo ha hecho. Como se puede ver, Sandberg fluye un poco diferente en bajo velocidades de reserva. También en su historia visual, cortesana, mi opinión y realmente gran portador tengo que saltarme warp que aquí está mi espacio de trabajo. Sangre de indio, realmente gran gerente de dependencia. Ahí hay que decir, por ejemplo, me gustaría actualizar el AnalogWrite. Quería tener dos versión 1.2 y todo lo anterior. Cuando hay una nueva versión art, llego a la actualización. De inmediato. Podría establecer el marco en la parte de subida y también el puerto del monitor. Es decir, cuando esté subiendo el código, se abrirán tiendas en un determinado monitor en la misma plataforma de datos de puerto. Cualquiera también debe detectar automáticamente el informe. Pero aquí lo configuro porque muchas veces tengo más de dos Arduinos conectados a mi PC. Por lo que me gustaría tenerlo codificado aquí. También porque estoy usando mucho espacio y poco FS Management. Y por lo tanto también en su plataforma i o, podemos construir la imagen del sistema de archivos y también subir archivos desde la investigación del fondo al código, a nuestros ESPs. Y esto es necesario cuando queremos interactuar. Por ejemplo, el ESP 32 puede tener la mitad y un servidor web en él. Cuando estamos construyendo un sitio web, entonces podemos poner en calibrar algo o poner en algunos, algunos, algunos valores, por ejemplo, ¿cómo debe ser carne de establecido para nuestros otros ejemplos? Y sin un EDA nuevo, tenemos que instalar componentes de terceros. Es un poco, sí, no, no intuitivo y fácil de usar. Código Visual Studio. Hay muchas de las cosas integradas. Y también una vez más, la velocidad es realmente, realmente otra dimensión. Solo unas cuantas vistas de visión cuando se desea cambiar a Visual Studio Code. Hay muchos buenos videos de YouTube donde puedes hacer tus primeros ejemplos. Describiré y mostraré cómo configuré los proyectos aquí en este curso. Pero no voy a profundizar en toda la mecánica de Visual Studio Code. Justin primero reclama lo dedicado para que se obtenga una visión general. 7. Código de código de VS en Arduino: En este video, cubrimos cómo podemos transferir los códigos, el código fuente del Código Visual Studio al sindicato Arduino EDA. Definitivamente tener un ejemplo. Este es el ejemplo de LED desde nuestro primer salto hacia abajo y asumiendo que ya hemos terminado con él. Y quieres ahora transferir este tipo de códigos. En el lado izquierdo está el Arduino IDE versión 2. Y en el lado derecho después de Visual Studio Code con la plataforma blogging. Y como se puede ver, se ven muy similares, pero están en el núcleo y el compilador un poco diferente. Y también el Visual Studio Code es mucho más rápido a la hora de combinar. Por lo que aquí se puede ver la estructura del proyecto y se puede ver que hay algunas fotos más, estas dos IF edit, pero como las otras fotos están siempre en el Oresteia, mismo cuando estás creando un nuevo proyecto. Dos son de Visual Studio Code. Entonces lo que es interesante para nosotros es la carpeta fuente y tenemos tres archivos principales de Sui es LEDs dot CPP y LEDs dot H. Estas son la clase y la clase también es 100% compatible con el IDE de Arduino. Y luego se ve el punto principal CPP. Y su principal CPP él es nuestro archivo principal, y este es nuestro expediente interno, que puedes ver aquí. Por lo que en breve introducción. Y ahora estamos saltando a un explorador y saltando justo a estas carpetas. Aquí está mi proyecto. Una vez más, los diferentes tipos de proyectos, hago clic en los LEDs, como se puede ver, la misma estructura que antes. Haga clic en fuente. Ahora copio los archivos en una carpeta. Supongamos que se llama 0.1 para que ahora podamos copiarlo, pegarlo aquí. Y así podemos tener una sub carpeta. Y ahora renombramos el main.cpp. Haga clic con el botón derecho en él, cambió el nombre para ejecutar punto. Deshazte del CPP. Y sí, ahora hemos cambiado aquí. El extensión ahora a nuestra copia mediática, el camino. Acuda a ellos. Archivo Abierto. Ir a la carpeta que acabamos de crear, y abrimos el archivo que renombramos. Se abrirá nueva instancia, cambiando a la izquierda. Y lo que me gustaría mostrarles ahora es que por eso escogí este ejemplo porque tienen diferentes tipos de compiladores. Vamos a compilar en Visual Studio Code. Este código exactamente. Y también aquí he dicho que tiene que ser 32. ¿ Es una bibliotecas más antiguas se cargan aquí. Si hay una biblioteca de terceros incluida, puedes descargarla desde la biblioteca o gestor, pero en este caso ya no necesitamos. Y luego vamos aquí a compilarlo. Y como puedes ver aquí, el Código de Visual Studio compilar con éxito el código. Pero aquí el IDE de Arduino es un poco más estricto en, y se puede ver, el mensaje de error se llama array debe ser inicializado con brace enclose initializador. Y esto es, no lo he hecho en el código de Visual Studio. Por lo tanto, sólo tenemos que descomentar estas líneas y tenemos que, por supuesto, vamos a tratar el contenido ahí más adelante, pero tenemos que inicializar todos los objetos, por ejemplo. Entonces, una vez más, recompícalo. Y como se puede ver ahora, toma un poco más de tiempo que el Código de Visual Studio. Es siempre también lo han combinado. Ahora, puedes subir el boceto a USBE sin duda hacer, por ejemplo, y tienes el mismo código Con remodelación creada a la cancha, pero lo adaptó a la EDA Arduino. Una vez más. Esto es un poco, ahí, un poco de diferencias en la compilación, pero en general, se implementaría el 99%. Puedes implementarlo a tu ya en edi, que viene de Visual Studio Codes. Y una vez más, solo dale una oportunidad y para usar Visual Studio Code. Es mucho, mucho más rápido en la compilación. Y además, creo que es un poco más conveniente codificar porque hay muchas buenas características clave en lugar de Visual Studio Code, que puedes usarlo en tu vida diaria de programación. 8. Simulador de línea: Cuando lo estás, durante tu proceso de codificación, suele ser el caso de que quieres probar algunas partes lógicas, solo unas pocas líneas de código para que no tengas que compilar todo el código una y otra vez. Por lo tanto, algunos simuladores en línea son realmente útiles porque entonces solo agarras Dakota pegado en disputado. ¿ Qué podemos ser.com? Proyectos de TI similares en tu navegador es en mi opinión, realmente no son buena manera y bueno simular hecho. Porque aquí tienes, puedes usar la certeza ESP para hacer click sobre ella. Y luego tienes aquí el simulador en línea. Y lo bueno aquí es que también se pueden agregar algunos, algunos, algunos componentes, alguna parte eléctrica, pero así como bibliotecas externas. Y también puedes pegar aquí tus clasificadores para que puedas probar tu, todo tu proyecto dentro del simulador. Entonces primer ejemplo, voy a crear aquí, LED, conectado a un pedido con, por ejemplo, 25 a GPIO en el cetotic va a tierra. Entonces el pin LED es de 25. Este es el mismo PinMode. Ellos, PinMode. Pin led. Incorrecto. Salida. En el bucle. Estamos haciendo un retraso. No, no es la mejor manera, pero es sólo para fines de prueba. Después haremos clic en asimilar. Y lo bueno aquí es también cuando empezamos a verlo comenzar, también deberíamos ver aquí la consola, la comunicación del suero. Y como lo pueden ver, podemos oírte perfectamente. prueba también componentes y cómo podemos controlar los componentes y también nuestro código si tenemos un código limpio o no. Walkway.com, buen simulador para probar tu código. 9. Enum: En los siguientes capítulos siguientes, estamos haciendo un poco más complejos códigos y código fuente y personal lo que también queremos comprobar qué estados estamos tratando actualmente. Por ejemplo, cuando estamos desarrollando y juego, entonces queríamos saber, estamos esperando la entrada del usuario, estamos terminando de jugar o estamos jugando actualmente, estamos calculando algo. Y muchas veces esto se hará con flex. Entonces, por ejemplo, podrías definir o declarar, en este caso, alguna variable de pool, por ejemplo, espera estatal es falsa o de salón de baile. Inicio. El juego es cierto. Entonces en el bucle, puedes comprobarlo con un IF. Y con respecto a los estados, se podría calcular algo, oh, espera, para los datos de entrada del usuario. En mi opinión, hay otra forma más conveniente a la hora de revisar estados en C plus. Y por lo tanto estoy realmente usando a menudo enum. Enum es, de algunas maneras. Creo que la mejor manera de elegir. No. Se refleja porque con las enumeraciones, se tiene una variable. En este caso un estatus. combinan alrededor de tres estados. Por lo que te da una buena visión general cuántos estados has definido en tu programa podrías abordar fue estado es un modelo por ejemplo. Y también puedes imprimirlo, imprimir estado de línea. Pero ahora no llegas aquí y una cadena porque esto es sólo el nombre de la variable, eso significa que estamos llegando aquí 0 porque es 0 índice cuando estamos configurando pausar, entonces estamos obteniendo y uno, eso significa que el compilador elige el tipo de datos correcto en la enumeración, porque también podrías declarar aquí algunas otras cosas. Pero no les doy valor, sólo fijando el estado. Y esto es lo que creo que lo hace realmente conveniente en la programación. Tomemos un ejemplo un poquito más para ver a qué me refiero aquí. En primer lugar, dije el estado de lo normal y estamos imprimiendo el estado. Entonces en la primera parada, me gustaría definir el prototipo de función porque realmente se encuentra más tarde en Es Y botón de verificación de función. Entonces estamos simulando algo así como nuestro programa espera un clic de Patrón y luego estamos cambiando los estados. Millones más libres porque me gustaría cambiar después de dos segundos para quedarme allí automáticamente. Y por lo tanto implementé la lógica de Blink sin demora. Estoy seguro de que todo el mundo ya se ha ocupado de ello. Y si no así sucesivamente solo Google Blink sin demorar. Por lo tanto, estamos sentados aquí en los años intermedios. Y después de dos segundos, me gustaría cambiar el estado por fatiga de estado, por ejemplo, acabamos de terminar el botón check. El mismo fin. Por ejemplo, hago normal el estado. Entonces veamos. Estamos iniciando el programa Debra Thompson para configurar la configuración Cs. Estamos cambiando el estado para empezar con normalidad. Yo diría que el cónyuge para cónyuge la estamos imprimiendo el primer estado, luego estamos saltando al botón Check. El estado se cambiará para comenzar con normalidad. Después de dos segundos al estado se cambiarán a telas de estado. Entonces tenemos aquí tres estados diferentes. Y ahora queremos visualizarlo también en impreso los diferentes estados. Por lo tanto, recomendaría ciudades y cambiaría caso. Caja de interruptor. Queremos revisar el estado. No estamos tratando aquí con una cuerda. Por lo tanto podríamos usar aquí, el caso empieza como normal. Sólo estamos escribiendo aquí el nombre de la variable, y luego estamos escribiendo aquí. Vamos por ejemplo. Entonces el segundo caso comenzó como pase o descanso. Palpitante en. Ahora es hora de descanso. El último es que está terminado. Mi caso, es universidad empieza a estática y luego podemos dopar adentro. Estamos terminados. Bit more review. Y entonces sólo pudimos comprobarlo. Si tienes derecho o no. ¿ Cuál es el problema? A menudo retrasamos aquí. Eliminar es bueno. Estamos en T de 500s y éste demasiado. Una vez más. Entonces, ¿qué tenemos aquí? Doy clic en pausar en el primer inicio, se imprimirá uno porque el estado está sin pausa. Índice Sera. Después saltamos al botón Check, verificamos cambios de botón para iniciar esta normal, normal. Y después, sí, terminamos con la configuración. Y luego en el bucle, este no es el hecho de que estemos saltando, en cuyo caso, y ahora se imprimirá. Vámonos porque han pensado que esto no es una milla. Después de dos segundos, el estado se cambiará porque aquí en el abrir y cerrar sin demora, lógica salta y configuramos el estado a fatiga de estatus. Y así el estatus, oh, estamos terminados donde lo imprimimos. Este es sólo un caso pequeño, un caso rápido que se puede ver cómo podemos cambiar el estado, o también podríamos revisar el estado en un proyecto. Y como lo pueden ver te da una buena visión general. ¿ Qué estados diferentes tenemos y también cómo podríamos cambiarlo? 10. Estructura: También utilicé de forma regular structs. Las estructuras son realmente una forma conveniente donde se pueden resumir diferentes tipos de variables que diferentes tipos de tipos de datos. También lo llamaría y clase ligera más pequeña. Entonces, ¿cómo es, cómo podemos utilizar una estrategia C plus plus en entorno Arduino? Por ejemplo, podemos escribir en una struct, luego les damos nombre de estructura, por ejemplo, persona abajo y podemos definir algunas variables. No tengo cadena, nombra una edad entera. Boolean es la cuota personal o no. Y sólo por ejemplo, si razones largo saldo de cuenta en centavos de dólar. Y siempre es una buena práctica cuando se trata saldos de cuentas, dinero, etcétera No se calcula con carrozas porque siempre es el ojo. Podría ser complicado cuando estamos calculando con carrozas respecto a la posición decimal o no es fácil. Y por lo tanto, también recomendaría que estemos calculando con, por ejemplo, un sentido y luego lo visualicemos en dólares normales. Pero aquí estamos lidiando con dólar, con structs. Por ejemplo. Ahora podíamos verlo persona, pesada, pero este paréntesis punto y coma el nombre de la misma. Por ejemplo, y coma, el comando edad 25, se codifica a través de coma. Y luego podemos sentarnos en el saldo de su cuenta, por ejemplo, propósito. Después, también podríamos cambiar sus diferentes tipos de variables. Por lo tanto, escribo en punto de pájaro pesado, y ahora podría abordar la variable dentro, por ejemplo, un nombre. Mi nuevo nombre. También sobre punto, trimestre es falso. Estoy imprimiendo aquí. Cualquiera por su nombre y si no estoy mal escrito, algo debería imprimir mi nuevo nombre porque lo hemos sobrescrito de los barcos Harry. Y como lo pueden ver, ahora hemos discutido cómo podríamos definir una estructura, cómo podríamos inicializarla, y también cómo podríamos cambiar en huelgas repentinas algunas cosas. 11. Configuración básica de un proyecto vacío: En este video, me gustaría mostrarte mi configuración básica y cómo podemos crear un nuevo proyecto en blanco en Visual Studio Code. En primer lugar, si el espacio de trabajo y yo hago clic en la plataforma, soy dueño del menú, haga clic en abrir, y luego me mostrará cuál es mi plataforma core o etcétera. Lo que me gustaría enfocarme contigo es que me he ido a plataformas. Y aquí la entrega, ves mi versión expresiva es 3.5. Y por supuesto, cuando muestres, mira este video, tal vez en uno o dos años después, por supuesto, será otra versión. Y esto también podría suceder que algunos de mis fragmentos de código no funcionarán de inmediato porque hiciste algunos cambios. Por ello, es necesario que siempre tengas en cuenta que tienes que adaptar cierto tipo de códigos cuando se trata de actualizaciones desde la plataforma. Sólo que ya sabes, cuando los consiguió compilar error para ver dónde podría suceder. También, discutimos en un video anterior, juntas estatales, estoy usando el tablero de reparto AEC, niños sordos C4. Y aquí también puedes navegar a través de tus tableros. Y cuando tienes ESP 32 normal, entonces creo que también podrías llevarte éste o puedes buscar un ESP 32. Encuentras un tipo diferente de marcos y también fabricante. Ahora vamos a los proyectos y dejaría salir en Inicio, click en Nuevo Proyecto. Y por ejemplo, escribo, OOP. En Toronto. Estoy seleccionando los tableros. Ac entrega. Estoy usando el ID o el marco interno, y estoy eligiendo aquí mi ubicación. Y eso es todo lo que necesitamos para hacerlas, hago click en Finalizar y se creará mi proyecto. Y he dejado lado aquí en el espacio de trabajo. Puedes ver aquí ahora mi 51, mi proyecto. Y lo primero que estamos haciendo es aquí en la plataforma. Estamos abiertos aquí los ajustes generales del proyecto. Y te recomendaría que hicieras los siguientes cambios. Estábamos agregando velocidad de monitor oculta, por ejemplo, a 1152 sera, sera framework y al puerto de carga y monitor. El puerto del monitor o el puerto desde tu dispositivo que puedes obtener desde la plataforma que todos, estás conectando tu dispositivo y pincha aquí en los dispositivos. Entonces conectando, haz clic en refrescar. Y como pueden ver aquí, este es mi puerto tres es la razón por la que estoy editado aquí y la plataforma. También agrego aquí y biblioteca de terceros. Se llama AnalogWrite. No obstante, si lo usamos, pero aquí entonces esta es una de mis cosas básicas. Yo siempre implemento. El gestor de biblioteca de sangre de IO es muy, muy bueno. que puedas hacer clic en tus bibliotecas y por ejemplo, Adafruit, Neil pixel, solo para fines de entrenamiento. Puedes hacer click sobre él. Y aquí se pueden ver los ejemplos, cómo podría abordarlo en el código fuente y también en la instalación. Por ejemplo, si siempre tendrías la versión actualizada en versión específica, solo copias aquí esta línea, pasa por las tendencias del laboratorio Deborah, y luego puedes incluirla en tu programa como normal. Y estos bienes para ir, para empezar con ella. Seguro. En el lado izquierdo, tenemos aquí ahora nuestro menú en el que vamos a explorar, y esto es todo proyecto y luego una fuente. Tenemos un expediente asegurado. Y también trabajaré desde India para poner frente a todo en primer lugar. Justin cabecera de tus credenciales, tu tal vez tu licencia, etcétera. Intro repetida en una fecha real. Y entonces estás listo para irte. También es muy útil cuando estás escribiendo aquí tus versiones de plataforma. ¿ Para que también personas de fuera? No. ¿Cuál fue su configuración básica y cómo se desarrolló con qué circunstancias? Esto es solo algunos ajustes que hago cuando estoy iniciando un nuevo proyecto. 12. Estructura de una clase y encapsulación de datos: Empecemos con los fundamentos de la estructura de clase y también con encapsulación de datos y chico práctico motor. Por lo que me gustaría empezar aquí abriendo el CPP principal. Y lo que sugiero hacer es que aquí escribimos todo en un solo archivo con fines formativos. Y lo primero cuando estamos declarando clases es que estamos escribiendo en clase. Entonces el nombre de la clase, corchetes rizados abiertos, soporte rizado cerrado. Y al final, tiene que ser un punto y coma. Y esta es la estructura básica de la clase que limitan. Un elemento de clase es también que estamos definiendo aquí si su función o la variable es visible al exterior o no. Y esto podría, esto es, um, ¿ podemos hacer con el identificador público y también con privado? Entonces todo lo que viene después de lo privado es justo, por ejemplo, aquí tenemos una cadena llamada name, y estos elementos solo son visibles y accesibles dentro de la clase. En este siguiente ejemplo, podemos tener tu apellido. Y por supuesto, dentro de la clase y dentro de todas las funciones que estamos definiendo más adelante, tenemos exceso de nombres de esta variable y también el contenido de la variable cuando estamos utilizando aquí algunas cosas públicas. Y por supuesto que también podría escribir un nombre de archivo de cadena. Entonces tenemos x's en estas variables también fuera de esta clase, y fuera de esta clase significa fuera de esta estructura. Cuando instanciamos el objeto más adelante, entonces no es posible acceder a tus cosas que están en privado. Estamos sólo tenemos acceso a cosas que estamos definiendo en el área pública. Esto es que siempre somos conscientes de ese tipo de mecanismo. Y debido a que se trata de encapsulación de datos, eso significa que sólo estamos mostrando datos al público, que es accesible desde fuera de la clase. Y esto nos da también en función de seguridad porque podemos agregar aquí algunas cosas muy confidenciales, pero también es que no estás cambiando inconscientemente aquí algunos datos. Entonces, por lo tanto, no sólo se trata de seguridad de datos, también está en tema de seguridad cuando estamos utilizando aquí privado y público. Y al público, por ejemplo, podríamos usar su cadena getName y podría ver aquí devolver un nombre. Y como se puede ver, la función en sí es pública desde fuera. Y esta función puede devolvernos aquí algunas variables privadas. Esto es lo que aprenderemos más adelante, getters y setters para que podamos utilizar sus funciones públicas para conseguir elementos privados. También hay otra identificación que me gustaría discutir con ustedes y se llama protegida. Protegido no es forma que estemos usando más adelante en cuando nos heredan algunas clases. Entonces eso significa que en el área protegida, podemos las variables aquí, por ejemplo, string, mi segundo nombre solo es visible en la clase estudiantil como privada, maneja como privada. Pero más tarde, cuando le das a alguien la biblioteca y se hereda la biblioteca, entonces el protegido actúa como algo público. Esto significa que tu clase principal será manejada como privada, todo lo que no está protegido. Pero más tarde, es cuando alguien heredó, se usa como público. Y esto es algo bueno cuando te estás desarrollando. Y biblioteca, que más adelante se distribuirá a otros desarrolladores para que puedan hacer su propia cosa fuera de ella. Pero te gustaría haberte protegido clase propia. Esto es lo que significa protegido y podría ser muy, muy práctico. Por lo que hablamos un poco sobre los diferentes tipos de particulares y públicos y protegidos nos identifican, pero más adelante lo veremos un poco más en la práctica cuando iniciemos los objetos y también programa más funcional para encajar solo en breve introducción, así es como configuramos una clase con clase el nombre, los corchetes de columna, y el punto y coma al final. Y con lo privado y público, esta es la forma más habitual como lo programamos. Estamos definiendo nuestras funciones y variables. 13. Instancia y constructor: Centrémonos ahora en lo que es una instancia y en lo que no es constructor. Entonces, en primer lugar, el borde de Arduino, estamos poniendo frente a todo. Y luego también en el tiempo de configuración, recomendaría tipo en 0 comenzar porque después estamos tal vez no lo pienses. Entonces entonces estamos listos para irnos. Por lo que hemos terminado ahora el primer paso de nuestra clase. Entonces estos son nuestros planos hasta ahora. Y ahora queremos configurar en el mundo real de la codificación nuestra clase. Por lo tanto, iniciamos un objeto. Y esto podría hacerse con el nombre de la clase, luego nombre variable del objeto en mi caso, modismo, luego estudiantes, soporte, corchete abierto cerrado y punto y coma. Y ahí vamos. Hemos iniciado nuestro primer objeto con el nombre de Eddie. Entonces estoy saltando aquí dentro de la configuración. Y escribiendo en 80, tengo acceso a todos los miembros públicos de mi clase. Y como pueden ver, no puedo acceder al nombre ni al apellido porque esto es en privado. Para que pueda usar esta, la función que definí aquí, y f x está sobre la función a mis miembros privados. Esta es una forma incómoda, cómo podemos programar y cómo podríamos acceder aquí a todos los elementos. Entonces como segundo ejemplo, podemos iniciar aquí y el segundo objeto, y se llama Julia. Y como se puede ver también aquí, Julia dots consigue nombre. Podemos acceder aquí también lo mismo desde Trulia, pero no tenemos ningún almacenamiento de datos hasta el momento. Por lo que sería el siguiente paso para rellenar aquí algunas, algunas cuerdas para que conozcas también escuchar los nombres de nuestros objetos. Y por supuesto podríamos decir que establecería todos mis datos. Y podría decir cadena, nombre uno, último para cadena, y así sucesivamente y así sucesivamente. Y podría invocar esta función después, pero esta no es la forma en que quiero hacerlo. Porque para la primera configuración, hay un constructo como se llama constructor. Este constructor nos lleva nuestras primeras entradas cuando estamos inicia el objeto. ¿ Cómo podríamos definir un constructor simplemente agregando el nombre de la clase al público. Por lo que no hay valor de retorno. En este caso se llama estudiante e inserto. Podríamos decir cadena, FirstName por ejemplo. Y entonces como lo hicimos aquí, podemos decir que los nombres son privados. Miembro será una, obtiene el primerNombre. Entonces este es ahora nuestro constructor. El constructor será invocado cuando iniciemos el objeto. Y el objeto está aquí iniciado y como se puede ver ahora tenemos un error porque éste necesita ahora un parámetro de entrada. Por lo tanto, podría decir lugareños y Julia. Entonces solo para ver, este es un tipo diferente de hace es solo la declaración del nombre y este es el parámetro de entrada. Ahora, queremos conseguir el nombre. Esto es, esto es un retorno, un valor. Por lo que tenemos que cubrirlo aquí en seriada de impresión, línea de impresión. Y también podríamos ponernos delante línea de impresión en serie. Mi primera clase. Entonces conéctate aquí. Usa pm, por lo que T2 a tu proyecto. Para ver aquí en el objeto correcto está aquí seleccionado el proyecto correcto. Hacemos click en check y construimos el proyecto, y luego vamos a subirlo. Entonces y también el monitor de suero comenzaría de inmediato. Y deberíamos conseguir ahora tres líneas de salida y nuestro monitor serial de primera clase que el nombre de Marco debe ser mostrado. Y también aquí, se debe exhibir la Trulia. Se ve tan bien. Hasta ahora, tan bueno. Sí, mis marcadores de primera clase y Trulia. Por lo que ahora hemos discutido lo que es una instancia a menudo de clase y también lo que no es constructor. 14. Constructor de sobrecarga: También suele suceder que no haya un requisito de que no solo necesitemos un constructor, sería realmente útil cuando tengamos un segundo o tercero, lo que nos da más oportunidad tener más valores de entrada, por ejemplo. Esto también es lo que podemos implementar para que podamos sobrecargar el constructor también son función en esto se llama polimorfismo. ¿ Y cómo podríamos hacer eso? Simplemente escribimos el nombre del constructor y definimos aquí. Y segundo, tiene el mismo nombre, pero otros valores de entrada. Por ejemplo, pinwheel tu cuerda. Nombre. Por ejemplo, podemos decir aquí, el nombre es FirstName. Y aquí también podríamos hacer algo con el pinwheel usted. Pero esto es sólo para fines de entrenamiento. Desplazarse un poco hacia abajo y me gustaría mostrarte, ahora puedo entrar un entero. Y como se puede ver, ambos objetos, ambos constructor funcionarán porque éste invocará el primero es el compilador también comprueba, vale, solo hay una pirámide, oscura una pirámide de cadena que yo se llevará éste. Y el segundo tiene dos entradas parlamento que nuestro primero es un entero. El compilador tomará el segundo. Esta no es una manera conveniente. ¿ Cómo podría la profundidad de nuestro programa? Porque muchas veces es el caso de que necesitamos más valores de entrada al mismo tiempo. Pero me gustaría hacer aquí otro ejemplo. Entonces, por ejemplo, podríamos tomar su cadena firstName, string, lastName, apellido. Y se llama lote. Ese apellido es el apellido. Entonces bajando, ahora, claro me sale un error porque sólo hemos construido con dos parámetros de entrada. Y ahora, como pueden ver, tenemos aquí un objeto iniciado con un constructor, y este es el constructor sobrecargado. String, LastName, return, apellido. Por lo que este es nuestro miembro privado y podemos acceder al miembro privado con nuestra función pública, obtener apellido. Y estamos cambiando aquí getName para obtener LastName. Y lo estamos compilando y subiéndolo a nuestro USBE 32. Y cuando todo funciona bien, tenemos tres líneas en nuestra ceremonia hecha. Mi primera clase, el nombre de Eddie ingresa sólo el apellido de Julia. Entonces veamos qué imprimirá nuestro programa. Terminado, subirlo. Entonces estamos abiertos la ceremonia hecha. Mi primera clase, y se llama marcadores como tenemos aquí. Y sólo estamos imprimiendo el bien del último nombre de Julie y Julia. Como se puede ver, esto es lo que permanece el constructor de sobrecarga o canal de funciones, y también cómo podemos usarlo de forma orientada a objetos. 15. Ejemplo de ejercicio, Interacción de archivos de encabezado y CPP: En este video, vamos a explorar el objeto orientado de manera un poco más y cubriendo todos los aspectos del entorno Arduino desde el, desde la forma orientada al objeto. Y por lo tanto, sugeriría que eliminemos la clase y todos los objetos que se definieron en el CPP principal. Porque queremos ahora definir tus encabezados y archivos CPP. Y esta es la forma estándar de programar y codificar de manera orientada a objetos. Pero antes que nada, deshazte de todas las cosas que estamos definidos y declarados aquí en el archivo principal del CPP. No obstante, si estás bajo ED o en el Visual Studio Code ahora en la carpeta principal, en mi caso, es la carpeta fuente. Creamos dos nuevos archivos, y se llama person dot h para el archivo de cabecera. Y también nuevo archivo con persona dot cpp. Si no solo estás en la esquina superior derecha donde puedes crear un nuevo archivo en el explorador de archivos. Y también puedes editar aquí la extensión. Y uno de los primeros pasos que sugeriría hacer clic derecho en persona dot h, dividido a la derecha hasta que tengamos los dos fuegos. En el entorno o en un entorno C Plus Plus, es muy común que no hayamos tenido un archivo en el archivo de encabezado. Ahí está mi definición de clase y los miembros privados y públicos y los prototipos de función. Un prototipo de función es solo la declaración del parámetro de retorno y el nombre de la función. Sólo una visión general. On en el expediente del CPP. Existe toda la lógica dentro de todas las partes interpretativas. En el CPP principal, estamos definiendo el objeto y el trabajo quién es el objeto. Pero primer paso primero, me gustaría comenzar con el archivo de cabecera. En el archivo de encabezado, ahora podíamos definir nuestra clase como lo hicimos antes en el archivo principal CPP. Por lo tanto, estamos haciendo aquí en clase, persona, corchetes rizados, punto y coma abierto. Y como lo hicimos antes, pudimos ver la edad entera privada en Detroit por nombre. Eran de público, un constructor vacío por ejemplo. Y luego tenemos función, se llama print all. Y como se puede ver, no hay corchetes rizados, sólo un punto y coma. Y este es el prototipo de función. Ya que el compilador habrá en función imprimir todo en pero con el nombre imprimir todo y sin retorno parlamento. Y la función en sí será declarada un poco más adelante. Pero aún no hemos terminado. Porque necesitamos aquí también el incluir arduino dot h para que tengamos exceso de todos. Están los parámetros de, ya sabes, medio ambiente. Te voy a mostrar una pequeña porque si la estoy tomando una cadena como fonema, obtendré un error porque el C Plus Plus no sabe desprecio solo chars. Por lo tanto, incluimos aquí punto h y el error se ha ido. Una cosa lo que también necesitamos saber es que tus datos incluyen guardias, nombre Include Guard es, podríamos decir si n define y algún nombre, sugeriría que lo llames igual que el archivo justo una subyacente definir la edad de la persona. Y si es así, ¿qué era? ¿ Qué no está haciendo la Guardia Incluida? Incluyen guardias muestra el compilador. Hay algún archivo llamado persona dot h. y si aquí hay algún código ya incluido, no lo incluyas. Y si debemos incluirlo, no hay ninguna persona dot h definida, entonces incluirlo. Por lo que necesitamos incluir a la persona dot h. Por supuesto en dominio dot cpp archivo incluir punto personal h. por lo que esta es la primera vez que estoy incluyendo año toda la cancha. Pero también he incluido en el CPP o en el CPP de una persona incluye persona dot h. y como pueden ver, lo he incluido dos veces. Y esto también, el compilador lo usará y dirá dos veces, pero aún incluimos guardias. Se, solo se usará una vez a la primera vez. A lo mejor aquí se incluirá. Y entonces en este punto, el compilador tal vez ve un duro, hay una definición de persona, edad ya existente y él la saltaría. Y este será código más rápido y también en curso más limpio. Entonces esto es incluir guardias y urea de la definición de clase. Y este es hasta ahora nuestro archivo de encabezado terminado. Revolvemos parámetros de función y su declaración de las variables. Pero cuál era esta la lógica. Entonces en la persona dot cpp, podemos definir tu print blanco, o por ejemplo, Sarah print line H. Y podemos ver que tenemos aquí un error porque h no está definido. ¿ Por qué es así que esto es sólo una función. No hay referencia de que estemos queremos actuar con la clase de la persona. Por lo tanto, tenemos que adherirse al nombre de la clase. Se llama Persona doble puntos, doble punto. Y ahora tenemos exceso de todos los integrantes de la clase. Y como se puede ver, el error se ha ido. Y ahora también hemos estado actuando dentro de la clase. Esta es la razón por la que también tenemos aquí el acceso a los miembros privados. Y esto es todo. Hasta el momento, hemos implementado nuestra primera clase en el entorno Arduino de una manera con el encabezado y el archivo cpp. 16. Getter: En este video ahora, queremos discutir los getters y setters y lo que podemos hacer ahora cada vez que queremos acceder a miembros privados, utilizar una función pública funcional que tenga acceso a nuestro, nuestro públicos o privados. Por ejemplo, cuando quisiéramos cambiar , quemó el ciclo de vida, algunas variables, o también cuando queremos conseguir algunos de los miembros privados. Pero antes de empezar, queremos agregar algunas variables más privadas para que podamos usarla en nuestros ejemplos. Por ejemplo, una altura entera solo para convertir la cadena de barbero LastName, sexo de cadena. Y también dirección String para fines posteriores. Cadena SIP país, código y un país de cadena. Hasta ahora tan bueno. Y como función más adelante queremos utilizar persona impresa, imprimir detalles de persona. Y por supuesto, no deberíamos imprimir algo directamente de la clase. Deberíamos pasar por un valor de retorno. Y después en el programa principal, deberíamos imprimir algo a cabo con fines de debug. Pero aquí es sólo un propósito de entrenamiento. Y yo diría que esto estaría bien. Ahora no tenemos ningún objeto. Queremos asignar algunos objetos vía constructor. Por lo tanto, estamos agregando aquí algunas entradas cadena subrayado para que no mezcle los miembros privados normales y los mentores prestados de entrada, diría por nombre, cadena de coma, subyacente lastName, string . Ahora, ¿qué más necesitamos? Sí, altura, diría altura entera. Eso se ve bien. Copio todo el constructor. ¿De acuerdo? Todo el constructor cambia al CPP de la persona, pegarlo en. Después, elimino los corchetes rizados de punto y coma abiertos y cierran. Y ahora, como pueden ver, tenemos un error porque queremos, queremos, o deberíamos tener que identificar aquí el nombre de clase doble ciego, doble punto. Y ahora tenemos acceso a todos nuestros miembros. Firmar por nombre. Esta es mi variable privada, se pasarán nuestros insumos. Pero para el marcador, por nombre, luego apellido, apellido, solo usa el auto completo, sexo y sexo un extremo donde la altura es la altura. Entonces veamos cualquier error. Sí, algo mal escrito, por ejemplo, ¿qué es lo que no te gusta aquí? Aha, aha, aha, sin subrayado. Entonces, lo que estamos haciendo aquí, pasamos los parámetros de entrada a nuestras variables privadas. Y esto se invocará cuando iniciemos un objeto. Entonces cambiando a nuestro CPP principal, ahora queremos sumar algunos objetos nuevos. Por lo tanto, estamos escribiendo persona, ese es el nombre de clase y el nombre de la variable para el objeto se llama AT person. Y dentro del constructor Person tenemos que rellenar por nombre, apellido, sexo y altura. Entonces Eddie, LastName, teléfono y moléculas. Eddie, por ejemplo. Masculino, 180 centímetros. Por supuesto, también podríamos cambiar el nombre de altura en centímetros. Sería un poco más claro y limpio acuerdo con la segunda persona. Es la persona de la olla. Se llama, pero no género. Y es sólo 25 centímetros más alto. Persona inservida. Tenemos a Julia Julia, femenina. Y tenemos que esconderla 175 hembra y dijo, correcto, Sí, hembra. Por lo que ahora hemos iniciado tres objetos. Y ahora se pueden ver también las principales ventajas de la forma orientada a objetos, porque si lo harías de manera normal, has declarado aquí 1234 variables. Por supuesto que también tenemos aquí desvío, declarado aquí por virus, pero para la segunda persona. Necesaria también para las variables ocho en resumen, luego también aquí, ahora tenemos 12 tipos diferentes de variables cuando se quiere tratar en el código con este tipo de información. La principal ventaja en las formas orientadas a objetos que tenemos aquí, nuestro anteproyecto. Y asignamos estas informaciones a nuestro anteplano. Y en el fondo, se ocuparán gestión de la memoria del titular y todo con la declaración. Es en esto, acabamos hacerles blueprint y usarlo una y otra vez tantas veces como tengamos memoria y uso de CPU para, para que podamos usarla. Entonces ahora acabamos de inicializarlo. Pero también teníamos algunos detalles de persona impresa. Esta función me gustaría invocar null, por tanto, puntos Abby, y como pueden ver, tengo dos opciones porque sólo tenemos aquí dos funciones públicas. El constructor solo será invocado automáticamente cuando estemos creando el objeto. Por lo tanto, estoy usando los detalles de la persona, sin parámetros de entrada. Y estamos bien para ir. Pero lo mismo trae detalles. Y así como Julia quiere imprimir aquí algunos datos. Una cosa me perdí volver a persona, um, porque hasta ahora no declaramos ninguna de estas funciones. Por lo tanto, qué persona, Doble punto, doble bonos, detalles de persona impresa. Ahora queremos utilizar esta función seriada de impresión f. función de impresión F es muy conveniente. Podemos usar aquí y cadena. Y luego después de que la coma llega a nombres de variables, por ejemplo, me gustaría usar aquí el nombre completo y puedo mezclar sus textos. Por ejemplo, nombre. Y este es un marcador de lugar. Estaba respondiendo a este marcador de lugar. El muy capaz de nombre se pondrá automáticamente aquí. El marcador de posición. Ahora también se puede añadir aquí dentro de la cadena. Y segunda variable, por ejemplo, LastName, como también en cadena. Y aquí, la segunda variable se utilizará aquí para el segundo marcador de posición. Y como pueden ver, yo sólo, también puedo usar su variable incierta. En realidad no es ciencia de cohetes. Pero, ¿qué hacemos ahora cuando estamos mezclando tus cuerdas y enteros? Además, esto no es problema para nosotros. Podemos usar aquí y d para entero, añadir algún marcador de lugar. Una información menor para usted. Mi compilador y el código de Visual Studio convertirán automáticamente la cadena en un char. Y como sabemos en el Arduino, hay algo que puedo ensanchar, pero en un C plus, además, no hay cuerda, solo hay chars. Y por lo tanto, algunos compiladores necesitan también aquí en Ven conversación convertida a un char. No lo necesito, pero si estás en 3D, por ejemplo, te da aquí error de compilación solo agrega a las cadenas aquí, ver cadena subyacente de subrayado STR. Y entonces todo debería estar bien. Por lo que ahora también implementamos una prima prima de accesorios y detalles. Veamos si tenemos razón. Voy a escribir proyecto como puedes ver aquí. Aquí está la advertencia. Deberías cambiar tu cadena I-System, pero está sin carga, se espera. Pero es conversación implícita. Es en mi caso, todo se renta. Bueno. Así Éxito. Muéstrame el monitor serial. Reiniciar. Tenemos todo en una línea y podríamos cambiar esto. Bueno, Como estamos justo al final del texto y salto de línea, para que aquí tengamos un poco más en mejor resultado que conectarnos. Simplemente mantente atento. Estamos cerca del resultado. Ahora tengo que imprimir el botón de arranque. Es un comportamiento extraño. A veces tengo que lavarlo a través del botón de arranque, a veces no. Una vez más, se reinició la nueva línea. Aquí tenemos moléculas, LastName 86 m, altura 100, ochenta. Y como pueden ver, estas son la información de nuestro constructor. Y también aquí, y también aquí. Enhorabuena, implementaste aquí constructor y también implementaste todavía y función getter. 17. Ajustar: Pero y si queremos cambiar la vida actual del ciclo de vida de nuestro programa, algunas informaciones. Y aún así no tenemos acceso a nuestros miembros aquí porque como se puede ver, no puedo acceder aquí a, por ejemplo, por nombre es nuevo nombre. Cuando intenté compilar esto, obtendré un error porque este es algún miembro privado es privado. Entonces, ¿qué puedo hacer ahora? Puedo utilizar aquí también algunas funciones públicas para acceder a ella. Entonces déjame ver qué podemos hacer ahora. Por ejemplo, estamos definiendo aquí y apellido del conjunto blanco. Y somos un subrayado de cadena LastName. Y también conjunto blanco H, entero h. Se ve bien hasta el momento. Entonces estamos cambiando de nuevo a nuestra persona dot h persona nada que H plus es CPP. Y ahora estamos definiendo aquí blanco, vacío, conjunto, edad, edad entera. Y podríamos ver edge es subrayado H. Podríamos hacer eso también con qué? Establecer apellido tomará un parlamento de entrada la cadena LastName. Y configuramos en el LastName es subrayado lastName. ¿ Cuál es el problema? Una vez más, tenemos que asignarle persona suelta, doble ciego, puntos dobles. Y ahora tenemos la referencia correcta. Volvemos al CPP principal. Y ahora podría decir, por ejemplo, 80. Yo diría lo que puso h uno hasta 55 años. Y podríamos decir que Julia puso LastName, tal vez se casó. Y luego vemos aquí. Entonces déjame ver qué hay aquí. Cuerdas cierta edad. ¿ Cuál es el problema aquí? Dentro de estos contextos? Vamos a probarlo. Si hay algún error. No, se ve bien para mí. Después lo subimos una vez más. Y permítanme ver si tenemos aquí algún cambio reiniciado desde el salto de línea clara. Lo que he cambiado hasta ahora es que Julia tiene un nuevo, um, apellido, pero no hemos asignado aquí el H. Así que el CPP de la persona. Me gustaría imprimir también eres el h. Entonces vamos aquí, H en este punto, por ejemplo, es un entero 123 h. Y lo que me gustaría subrayar aquí un poco más por qué hacemos esto con el setter y getter es que no sólo para obtener los datos de nuestros miembros privados, también tienen y buena manera que podamos escuchar en alguna lógica antes de entrar en ella. Por ejemplo, podríamos decir si la edad mayor a 100, dijimos que la h es 299, por ejemplo, respecto a la limitación de la base de datos o cualquier otra cosa. Asignamos la variable a nuestros miembros privados. Una vez más, subimos. Y como pueden ver, esta también es una buena manera de cómo podemos ver QRA y además mantener el nivel de mayor calidad a toda nuestra programación y gestión de datos al ras para usar PM. Ahora, una vez más, aquí hemos cambiado en el plan de vida actual, 155, fijamos la edad, mientras que mi bot, y en la configuración nos agregan alguna lógica y se tiene aquí el 99 Julia LastName MANOVA. Estamos asignados a tu horror en el primer lugar. Y luego los segundos en la configuración, agregamos el apellido al malware. Este es el principio de los setters y getters en la programación orientada a objetos. 18. Herencia: También uno del concepto principal es que podemos heredar clase de otra clase. Eso significa que tenemos anteproyecto, algunos registros generales. Y luego podemos usar toda esta función, todas estas variables en nuestra clase. Entonces cuando google e investigas un poco sobre la forma orientada a objetos, uno de los principales ejemplos es siempre en general y generalmente calentador. Y este vehículo es una clase. Y luego puedes heredar y usar todas las funciones y adaptado a y deportivo auto a un SUV y dos autos, autos, Autos, etc. Para que te pongas el panorama general. Es en código general. Y entonces también podrías especificar otras clases con algunos códigos individuales. Pero también este es mi caso que lo que estamos usando mucho es que nos da una API. Se llama interfaz donde podemos utilizar en clase para nuestro propio propósito y adaptado a nuestro propio propósito. Entonces, ¿cómo podríamos hacer eso en nuestro ejemplo? Aquí tenemos nuestros objetos, nuestro proyecto, y aquí estamos creando algunos archivos nuevos porque ahora queremos sumar a la persona y al cliente. Y esto podríamos hacer con nuevo archivo cliente que H y nuevo archivo cliente dot cpp. Estoy cambiando al cliente que h a la derecha. Y ahora podemos declarar aquí todas las cosas que hicimos antes. En primer lugar, estamos empezando por la clase, clase cliente punto y coma. Entonces necesitamos aquí en el Arduino como con antes. Y tenemos que incluir guardias porque te voy a mostrar más adelante. Eso es necesario. Pero, ¿cómo podemos hacerlo ahora? Heredaron para la persona de clase al cliente. Por lo tanto, una persona pública de doble punto. Ahora tenemos un error porque persona no está incluida aquí. Incluir persona dot h. Y ahora hemos heredado exitosamente a la persona a la clase de clientes. Y como se puede ver aquí, tenemos uno incluir persona que H para incluir persona dot h, El tercero. Y por eso es necesario que tengamos que incluir guardias que no fueron incluir o una y otra vez, todo el código. Entonces en esta clase de clientes, también podríamos definir sus propias cosas privadas. Por ejemplo, ID de cliente entero, entero, ventas, público, por ejemplo, ID de cliente, entero, número. Y también lo que realmente es necesario cuando heredamos algo, necesitamos usar el constructor de nuestra clase base. ¿ Y cómo podemos hacer eso? Pasamos al cliente y decimos usando persona personal de doble enlace, eso significa que heredamos y usamos el mismo constructor en nuestra clase heredada. Perfecto. Hasta ahora, tan bueno. Lo que hacemos ahora es que estamos cambiando de nuevo al cliente CPP. Incluir cliente dot h, incluir arduino dot h. Y podemos establecer su cliente blanco doble bond, doble bond, establecer idea de cliente, número entero. Y se podría decir que la identificación del cliente es número. Hasta ahora, nada, sobre todo lo que no vemos aquí, pero lo que tenemos x en nuestro cliente CBP es mayor. O lo que podemos usar es toda la función que ya teníamos aquí. Eso significa que podemos establecer la edad, podemos establecer el apellido, pero también podemos imprimir los detalles. Por lo que echamos un vistazo más de cerca al archivo principal de CPP. Bajo Julia, diría que creamos un nuevo objeto y se llama cliente porque este es nuestro nuevo robot de clase heredada y es un cliente. S declaramos aquí, nos ops. Estamos utilizando el mismo constructor. Eso significa que tenemos aquí un robot o un amigo usar una aguja y él es uno. Los cinco. Hola. Echar un vistazo más de cerca a por qué se rompe? Porque no hemos incluido ese cliente dot h. Y ahora deberíamos llegar aquí en cliente, cliente. Ahora, Ahora está compilando. Entonces hemos iniciado aquí y nuevo objeto, se llama Robert. Y heredamos también el constructor. Ahora, me gustaría escuchar a Robert imprimir detalles de persona y subirlo una vez más a nuestro ESPN. Y mientras tanto, me gustaría recalcar una vez más que no tenemos aquí declarada los detalles de la persona impresa. Esto será utilizado automáticamente desde la persona dot h porque somos heredados todas las funciones. Entonces en cuando todo salga bien, también debemos conseguirte toda la información de nuestro robot. Eso es ceremonia de inauguración hecha. Vemos a Robert apellidos casinos, edad, sexo, y altura, 195. Y nos heredamos con éxito una clase completa, adaptamos, y también usamos la función de nuestra clase base. Y por supuesto podemos utilizar aquí nuestro propio funcional aceptar ID de cliente. Por lo que podemos configurar también aquí robot set cliente la disfunción sólo está disponible en el, en la clase de clientes. Y por lo tanto podría decir, por ejemplo, 255. Y funcionará como lo hicimos antes. Entonces el concepto es que estamos usando una clase base y heredados a una nueva clase y usamos todas las funciones que es públicamente accesible a nuestra nueva clase. Esto es lo heredado y por qué lo usamos de forma regular en forma orientada a objetos. 19. Función herida sobrecargada: Y si, cuando queremos utilizar los detalles personales impresos también en nuestra clase de clientes, porque en la persona para ti, tiene total sentido que imprimimos la edad, el sexo y la altura, pero no como vista del cliente. Y por lo tanto podemos sobrecargar un óvalo ahí mismo, detalle de persona impresa en nuestra clase heredada, y esto es lo que hacemos ahora. Por lo tanto, entramos en el cliente ese borde y decimos, queremos sumar un número de ventas y deshacernos de la edad, el sexo, y el tipo. Por lo tanto, nuestra función ayudante llamaría set, resumiría ventas. Y estamos definiendo ventas enteros con una impresión subyacente y blanca. Todas las ventas. ¿ Cómo llamamos a eso imprimir toda la impresión. Disfraz persona. Se llama imprimir detalles personales. Sí, esto es lo que queremos sobrescribir ahora. Por lo que ahora está redeclarando al cliente que H, podemos saltar al cliente CPP. Lo primero será cliente doble ciego, doble ciego algunas celdas. Y tenemos ventas enteras. Y estamos viendo las ventas, esta es la variable privada, está en esas ventas. Pero no es que estamos agregando aquí un plus, por lo que se los resumirá en el CPP principal que podríamos usar aquí. Por ejemplo, Robert, algunas ventas. 1505200. Quisiera sumar aquí 150 de nuevo. Por lo que tenemos trescientos quinientos cincuenta, quinientos cincuenta en un resumen. Y esto debe imprimirse en los detalles de la persona impresa y los detalles de la persona impresa. Ya lo hemos declarado en la persona, pero queremos deshacernos de la edad, sexo, etcétera Por lo tanto, estamos definiendo aquí una vez más esta función. Así que estar sobre cargado, imprimir detalles de persona. Y salto de nuevo a persona CPP y copio todas las cosas que hicimos aquí, pegarlo en. Y me gustaría deshacerme de éste. Y estas ventas. Ventas. ¿Es esto un entero? ¿De acuerdo? Entonces, ¿qué podemos ver? ¿ Ahora? Vemos que tenemos un error en nombre y apellido, ¿cómo se llama? Se llama. No podemos acceder al nombre porque no está declarado. El x's no está prohibido. ¿ Por qué es eso? Entonces echemos un vistazo al punto del cliente h. No hemos declarado aquí por nombre o apellido porque es heredado. No estamos no nos vamos a reunir. No hay necesidad de reclarearlo. Entonces echemos un vistazo en persona dot h. Esto es privado, y como sabemos, todo privado es simplemente accesible desde persona, desde un objeto, desde la persona dot h. pero ahora estamos en un cliente. Entonces heredamos, pero no tenemos acceso. ¿ Qué podemos hacer como lo hicimos en el primer comienzo del discurso? Conocemos a tres integrantes de una clase y podríamos cambiar esto para protegerlo. ¿ Qué está protegido ahora? Protegido significa que es privado en la clase de persona, pero es público para todas las clases heredadas. Y como pueden ver, ahora no tenemos ningún error. Esto realmente una buena manera porque alguien, tal vez le gustaría guardar toda esta encapsulación de datos para su propia clase. Pero no es desarrollador para proyectos de código abierto y dice, está bien, puedes usar todas mis cosas. Pero por favor heredado y editado a su manera. Y con el estado protegido. Ahora hemos adoptado y sobrecargado la función de detalles de impresión. Una vez más, subamos todas las cosas, saltando de nuevo al CPP principal. Y ahora lo que cambió es que Eddie compró y realmente debería imprimirlo todos los detalles de la clase desde por supuesto, la persona. Deberíamos resumir aquí, las ventas e imprimir la nueva función de ventas, nueva línea. Y como se puede ver, Robert acaba con éxito Por nombre, apellido, y las ventas que aquí se resumen. Este es un concepto principal que se puede sobrecargar la función heredada. Estar al tanto de los miembros protegidos y públicos. Y también podríamos añadir aquí algunas de nuestras propias funciones, pero también podríamos sobrecargarla. Y creo que esto es realmente útil cuando se trata de desarrollo público y de código abierto. Por lo que tenemos mucho, mucho potencial donde podemos utilizarlo. Por lo que imprimir detalles de persona. 20. Recapitulación de la introducción: Si me seguiste a lo largo de todos a los pasos de estos ejercicios prácticos, puedo felicitarte porque ya has aprendido los conceptos básicos del enfoque orientado a objetos, lo que necesitamos aquí en este curso en línea para el entorno Arduino. Estos son realmente los fundamentos básicos. Quisiera hacer un breve resumen que podamos resumir todos los aprendizajes hasta el momento. En primer lugar, echamos un vistazo más de cerca a la sintaxis, cómo podríamos definir una clase, cómo podemos escribir una clase, y también ¿qué es la encapsulación de datos? Eso significa con los miembros públicos y privados, pero también fue protegerlo. Una vez. Después iniciamos un objeto. Lo hicimos en el expediente principal. Y también estamos usando constructor. Por lo que un primer parámetro de entrada podría usar y establece nuestros miembros privados en el proceso de iniciación. Entonces hablamos del getter y setter. Entonces, cómo podríamos usar función pública para acceder a miembros privados, y también cómo podríamos cambiar los datos de la vida útil del ciclo de vida durante nuestra codificación. Y después, también echamos un vistazo más de cerca a la herencia y cómo podríamos heredar clases en otras dos clases. Cómo podríamos usar la clase, la función de clase heredada. ¿ Cómo podríamos sobrecargar la función, que somos heredados concepto principal. Y después también tratamos de escuchar los diferentes tipos de encapsulación de datos, por ejemplo, con los protegidos para que tengamos x en la clase heredada, pero no en la clase base. Esto fue para encontrar lo básico. Y ahora estamos saltando justo a nuestros ejercicios. 21. Cálculo de la resistencia a la cableada y la serie: Empecemos con la parte de cableado. Tenemos del lado derecho, el ESP 32. Lo primero que hacemos es que estamos conectando el suelo a la tabla de pan. Y ahora tenemos aquí un LED. Y este LED tiene dos coleccionistas. El primero es ahí un pedido es el lado más, y también está ahí, el pasador de conexión lateral. Y luego tenemos el cartílago. Es la parte menos. Y como pueden ver, tenemos aquí y la resistencia antes de conectar los LEDs. Y esto es necesario porque hemos limitado demasiado la corriente básica para el LED. ¿ Y cómo podemos hacer eso? Hay muchos sitios web diferentes donde puedes calcularlo porque es necesario para cada color diferente que implemente. Tienes que elegir en la resistencia adecuada. Y esto se calcula con un Arduino Uno con cinco veces. Tenga en cuenta que estamos utilizando aquí en este ejemplo y usar ser 32. Y solía ser 32 tiene una tensión de salida, voltaje en el GPA o desde rotonda, 3.3 voltios. Por ello, tenemos que adaptar aquí los valores para que consigamos la resistencia adecuada en los ohmios adecuados. Entonces, por ejemplo, vayamos un poco abajo. Este es el cálculo completo. Por lo que tenemos que ver la tensión general es en nuestro caso, 3.3 voltios menos la tensión en el LED, porque queremos tener apenas una cierta cantidad de voltaje en el LED para que la corriente básica adecuada del El LED está en el LED. Y es por eso que tenemos que hacerlo aquí y cálculo. Así que vamos a saltar a la derecha en ella. Por ejemplo. Queremos calcular para el LED rojo ese resistor. Por lo tanto, estamos diciendo que la tensión principal es de 3.3 voltios menos 1.6 palabras para el LED y el resto del mismo, el voltaje 1.7 tiene que o debe caer para la resistencia. Después cuando el seguimiento de 1.7 voltios de la resistencia, el LED solo obtiene 1.6 voltios y también 0.02 amperios. Y esto es lo que necesitamos. Por lo que no estamos terminados con ahora es nuestro cálculo porque sólo tenemos aquí el voltaje que se pliega en la resistencia. Después tenemos 1.7 voltios divididos dos corriente básica o principal. Esto es 0.02 y pase. Y como resultado, estamos consiguiendo, echemos un vistazo más de cerca. 58 ohmios. Para que como se puede ver, hay un poco de diferencia. Pero en los contextos principales, sugeriría que use, por ejemplo, también la melodía de 20 ohmios. No puede dañarse o no debe dañar debido a los LED. Pero no va a brillar, o lo es, es tan brillante porque no puede obtener toda la tensión. Pero en mi caso, también utilicé, creo 220 o 110 ohmios para todos ellos. Solo para fines de entrenamiento, es más fácil de usar cuando estás en un entorno productivo. Te recomiendo que realmente calcules exactamente la resistencia exactamente ohmios porque también se trata de la durabilidad o la vida útil del LED y los componentes. Por lo que ahora estamos conociendo de la resistencia. Vamos a ver cómo podemos conectar todo juntos. En su opinión, ¿cómo verifica si es un pin de salida? Y luego conectas el pasador de salida del ESP 32 a la resistencia, la resistencia a la lista desordenada, la parte más larga. Y luego conectas la segunda parte del cátodo con las partes menos o tierra. Y eso es todo. Toma tanto o tantos LED como quieras. Tengo aquí 3691215 LEDs. Entonces es, te muestra un poco más lo que podemos hacer con el enfoque orientado a objetos. Y cuando solo tienes dos o tres LEDs, no es tanto. Está bien. Y, pero ves las principales ventajas cuando estás agregando cinco o más LEDs a tu proyecto. 22. Controla el LED con un objeto: Añadamos ahora algunas funcionalidades a nuestro programa. En primer lugar, haga clic derecho en tapas dot h y splits para escribir para que tengamos en el lado derecho el archivo de cabecera. Y estamos abriendo por el lado izquierdo para eliminar puntos CPP. Y debido a que lo son, queremos agregar la funcionalidad. En primer lugar, incluir el LED es dot h para que tengamos acceso a nuestros elementos de clase. Como siguiente punto recomendaría incluir el arduino dot h para que tengamos todos los accesos del entorno Arduino aquí. En primer lugar, me gustaría definir al constructor. El constructor es como el método principal que se invocará cuando estemos creando el objeto más adelante en el punto principal cpp. Entonces el constructor tiene aquí y parámetro de entrada y se llama pin entero. Entonces somos LEDs, LEDs como se llama el nombre de la clase. Y luego estamos llamando al constructor. Es el mismo nombre que el nombre de la clase. Entonces tenemos un parlamento de insumos. Se llama Pin, soportes rizados abiertos, cierran. Por lo que tenemos aquí nuestra funcionalidad. ¿ Qué estamos haciendo ahora con el constructor? El constructor toma el número pin, el brazo GPO. Y así guardamos el número pin en el pin variable privado, LED, pin, ahí, pin. Y luego se guarda en la clase. Y más tarde, podemos apagarlo, encenderlo. Y esto fue de diferentes tipos de objetos. Y la segunda parte, recomendaría que estemos accediendo o definiendo el PinMode con ciervo Pinellia. Y es una salida porque tenemos LEDs y queremos esta semana bonos recompensas en el GPIO. Por lo que el PinMode también podría invocarse fuera la función de configuración porque más tarde los abrí en. Aquí podemos crear un objeto, por ejemplo, tapas, una blanca, y luego los corchetes rizados, se invocará al constructor y uno blanco, el primero está en GPO 12th, en mi caso, cerrando corchetes. Y ahora hemos creado nuestro primer objeto. Se llama uno blanco de los LEDs de clase con el constructor número 12 entero. Y así tenemos aquí los sets, la variable privada pin LED, y hemos establecido el modo pin. Una vez más, por qué podemos acceder aquí, la variable privada, porque estamos tratando aquí dentro de la clase. No podemos acceder a un pin LED con este muy real, esto no es posible. Y así sucesivamente. Ahora, queremos agregar la funcionalidad. Por ejemplo, podríamos encendernos, encender y apagar los corchetes rizados. Y así podríamos decir pin digital LED alto. Y estamos consiguiendo aquí una flecha mientras es propia porque definimos aquí Y funcionamos en tapas dot CPP. Pero no es nuestro turno de la clase. Por lo tanto, necesitamos identificar están frente a la función. Es el nombre de la clase, doble ciego, doble punto. Y ahora se reconoce la confiabilidad y podemos configurar encendido encendido el LED como una función x. Lo apagaríamos. Está apagada. Derechos digitales, pin LED y bajo. Recibí un error extra. Por qué es eso así porque apaga la oreja y el parámetro de entrada. Y esto es también con fines formativos. Por qué es tan análogo de toro, análogo de pobre log of y como mencionamos antes, no mezcle blanco analógico y digital y por lo tanto, paso aquí y bool variable que podemos comprobar si análogo de su verdadero. Entonces tenemos que apagar el LED con analógico. Derecho en el pin inferior derecho LED 0. De lo contrario podríamos usar los derechos digitales. Entonces al siguiente, el siguiente error surge aquí porque AnalogWrite no está definido. ¿Por qué es eso? Entonces porque no lo he incluido, tenemos que incluir otro punto derecho h. Y ahora somos miedo y lógica simple. Con la función de apagado, pasamos aquí y verdadero o falso. Si es cierto, entonces apagamos el LED con amiloruro. Al igual que con la DigitalWrite, la AnalogWrite que estamos utilizando más adelante para desvanecerse en o cuatro. Di detectores para que podamos poner la luz en diferentes tipos de aspectos. Tan ligeramente tímido o se desvaneció y no sólo carne con la cantidad total de brillo. Esta es la razón por la que estoy aquí. Ir un pequeño desvío para mostrarte sobre cómo también podríamos pasarte algunos parámetros de entrada, etcétera Así que ahora tenemos aquí la funcionalidad dentro del constructor. Hemos activado la función y la función de apagado. Y ahora me gustaría implementarlo en nuestro proyecto principal. Entonces aquí, el blanco ya está definido. Ahora puedo ir aquí escribiendo en punto blanco. Y aquí se pueden ver todas las funciones que se definen en el archivo de encabezado. Pero solo ya has agregado alguna lógica para encenderla. Y en el bucle que estamos haciendo aquí y retrasar solo por propósito de entrenamiento durante cinco segundos. Y luego podemos decir uno blanco, apagar, corchetes en. Y aquí tenemos la sugerencia. Por favor, danos aquí en toro variable. Y puedo reconocer, ajá, ¿de qué es bool analógico? Cuando describes tu muy rico, muy bien, entonces no tienes que pensar en lo que he querido decir aquí? Análogo de es falso porque no tenemos derecho digital encendido. Y esto debería funcionar para el primer ejemplo. Por lo que entonces sugeriría que estemos haciendo click sobre el tablero de la mesa. Conecté mi tabla de pan con mi PC. Este es un viejo boceto que se está ejecutando. Entonces yo lo carne. En primer lugar, lo compruebo con el compilador. Si tengo algo mal escrito no lo es. Se ve mercancías sube todo el boceto y haciendo clic en el botón para tirar todo el asunto. Ahora se está subiendo y luego solo debería tener éxito. Tengo el programa falso. Tengo que cambiar a LEDs para la parte inglesa, una vez más, subir el proyecto correcto. Ya ves aquí puedes cambiar el directorio de proyectos. Y porque tengo abierto aquí, muchas opciones diferentes para nuestros proyectos. Conectando, una vez más, poniendo. Y ahora sólo el primer LED, el blanco debe ser cargado, debe encenderse, como se puede ver, después de cinco segundos, debe apagarse muy bien. Así que ahora tal vez dirías, vale, tiene sentido, pero son muchos más códigos para escribir de los que estoy acostumbrado. Tengo también podría definirlo aquí. Así es, pero espera. Ahora podemos seguir y decir, por ejemplo, dos LEDs más. Por ejemplo, verde uno rojo, un año los alfileres adecuados. Se podría decir verde una vuelta, una roja encendida, eso ha funcionado. Y luego también aquí después de retraso, estamos diciendo que el verde y el rojo deben apagarse. Haga clic derecho en Formato de cargas de documentos. Y entonces lo siento, LED debe encenderse y después de cinco segundos, debe apagarse. Arrancar una vez más. Y como se puede ver aquí, parece que algunos LEDs están encendidos. Consideremos tres LEDs y después de cinco segundos, que se apagan. Perfecto, nuestro boceto funciona, pero parece que están encendidos, pero esto es porque tengo algunos focos y este es el reflejo de ello. Entonces está apagada. Una vez más. Reinicie el ESPN. Como se puede ver, los tres LEDs, que estamos declarados aquí pasando y después de eso, se apaga. Esta es una manera fácil. Me gustaría visualizarte cómo la forma orientada a objetos tiene muchas ventajas porque aquí tenemos un patrón. Con este patrón, podemos abordar muchos, tantos LED como queramos. Y cuando nos gustaría cambiar algo en la parte de desconexión, solo tenemos que hacerlo aquí y todos los LED se ven afectados. En el siguiente video, nos gustaría agregar algunas funciones más para que veas que también podemos utilizar diferentes tipos de funciones para los LEDs. 23. Archivo de Header: Siento un nuevo proyecto fresco en Visual Studio Code. Y puedes seguirme junto también con el otro intermedio, solo crea un nuevo proyecto. Entonces he incluido en el archivo principal biblioteca de derechos analógicos que necesitábamos porque queremos usar un PBM GPIOS para que podamos configurar el voltaje de salida en diferentes tipos de slots para que podamos desvanecerse, por ejemplo, nuestros LEDs. Tenga en cuenta cuando estamos utilizando bibliotecas externas. También plataforma GoTo. Y haz aquí la referencia para la dependencia bibliotecaria. También cuando estás con el EDA, entonces puedes usar aquí en el lado izquierdo, el encargado de la biblioteca e incluye el análogo, ¿verdad? No estoy seguro si ya está incluido en el core desde el ASPE 30 para simplemente darle una prueba cuando estés compilando, entonces deberías conseguir éxito o un error. Entonces hay que añadir la biblioteca. Y así sucesivamente. Entonces como exponente, vamos al directorio fuente y creando dos nuevos archivos. Estamos empezando por el archivo de cabecera, y se llama punto h de LED y de la misma manera estamos agregando entonces tapas de archivo CPP dot CPP. ¿ De acuerdo? Estamos empezando por Declaration o definiendo las cosas en los LEDs en el archivo de encabezado. El header files da una buena visión general de qué variables utilizamos y qué funciones estamos implementando más adelante en los LEDs dot CPP, mis enfoques somos, estoy usando el proyecto terminado y pega todo en riquezas en el archivo de encabezado. Porque entonces los tienes buena visión general lo que estamos desarrollando ahora. Aquí es donde creo impresionante buena ventaja en, en la programación. Cuando te intercambian con algunos otros programadores, codificadores detector, elimina datos, da una buena visión general del proyecto. Entonces, antes que nada, estamos haciendo los Guardias Incluidos. Si N def LED es daño es mi enfoque se llama es el mismo que el que el archivo. Después defina las tapas al final. Y si es un pequeño recordatorio, el Include Guard nos ayuda a que el código es apenas una vez implementado desde el compilador. Entonces cuando estamos usando una gran cantidad de inclusiones de los LEDs punk star, el programa comprueba. ¿ Ya estás implementado? ¿ Cuándo no se implementa? En caso afirmativo, entonces no se implementan. Una vez más, también te recomendaría saltar al archivo principal y hacer los LEDs include dot h para que estemos preparados para las partes de programación. Cuando estamos incluyendo el archivo de encabezado, el archivo CPP también se incluirá automáticamente. Saltando de nuevo a LEDs dot h. Y ahora estamos empezando por declarar nuestra clase. Soportes rizados abiertos, corchetes rizados cerrados y un punto y coma al final. Hasta ahora, tan bueno. Entonces estamos escribiendo en privado y público. Y ahora sólo podíamos empezar con la declaración. Falta una cosa y tenemos que incluir ese arduino dot h. ¿Por qué es eso así, para que tengamos acceso a toda la otra función desde su entorno. Entonces estamos empezando por las variables privadas, así que pin LED y luego tenemos brillo. Entonces tenemos un entero Fade Monto. Y tenemos modos año y bool cruzada. Entonces he añadido aquí cinco pulmones no firmados. Y estoy seguro que ya conoces el Blink sin retrasar la funcionalidad. Y por supuesto, solo tuve que implementar una, creo que una versión anterior, pero quiero estar seguro y ahorrar. Por lo que implementé cinco de ellos porque después tenemos diferentes tipos de mecanismo de control para los primeros días y así estamos de una manera segura. ¿ De acuerdo? La parte pública, tenemos aquí mucha función que la implementaremos más adelante. Sólo lo estoy pegando en clic derecho y podemos decir Formato documento. Estamos usando una función de encendido y apagado constructor. Y la función de apagado también tiene un parlamento de entrada y análogo de piscina de porque no debemos mezclar. Esto es sólo un recordatorio. No mezcle analógico y digital, ¿verdad? Es el mismo LED que realmente no funcionará. Solo decide si lo encenderías con DigitalWrite. También gira ofrece derecho digital, y es lo mismo que analógico, ¿verdad? Por lo tanto, tenemos una función y comprobamos, ¿ estás encendido con analógico de o no? Por lo que podemos comprobar este desvanecimiento abajo con milisegundos. Tenemos una función objetivo, función f. Estamos utilizando nuestro apagado después de una función de retardo. Diremos que son los LEDs y además no nos hemos ajustado al modo pulsante para que podamos configurarlo en el bucle. Y eso es todo deja que puedas ver. Aquí. Simplemente nos da una muy buena visión general qué función la implementaremos más adelante. Hasta ahora tan bueno. Y en el siguiente video, estamos empezando por definir nuestras primeras funciones a finales, es el archivo dot cpp. 24. Toggle LED: En este video ahora queremos agregar y funcionar, que enciende o apaga nuestro LED. Y esto fue en cambio donde no sabemos, ¿está encendido o apagado? Por lo que debe ser automático, de forma automática. Identificar si está encendido o no. Entonces la función objetivo, estamos aquí en los LEDs dot CPP y escribo en blanco. Es alternar los soportes de encendido y apagado. Por lo que ahora estamos escribiendo su pin derecho digital LED n-tier por ejemplo, Hola o bajo. Pero ahora quiero tener el estatus del LED. Quiero que lo sepas. Por lo tanto, podríamos decir digital, pin ahí. Y el pin LED nos hace referencia o nos devuelve si el GPA o está encendido o no. Entonces si el LED está parpadeando y R está encendido, y estamos escribiendo pin de lectura digital LED aquí. Estamos recortando más alto. Entonces nos entrega, por ejemplo, alto o bajo. Pero ahora me gustaría tener lo contrario de ella. Por lo tanto, podría hacer un signo de exclamación. Y esto será invertir mis señales. Entonces si llego aquí de vuelta y más alto con dos signo de exclamación, será en baja. Y esto es extremadamente práctico porque ahora podemos sumar la lectura digital e invertida. Entonces si nos estamos poniendo un alto, por lo que el LED está encendido, estamos llegando aquí la parte alta V lo invertió. Entonces nos ponemos y bajamos y la derecha digital apaga el LED. Por otro lado, si es baja, las lecturas digitales nos devuelven y bajan. Lo invertimos. Y así no tenemos alto. Función muy conveniente. Y así podemos volver a saltar aquí a los LEDs, ver la parte principal. Y ahora nos estamos librando del retraso porque retrasos siempre son malos cuando estás codificando. Por ejemplo, cuando de acuerdo con transferencia MQTT al transmitir o nosotros motores paso a paso, hay una necesidad en la función de bucle. Es decir, las funciones son siempre tienen conexión. Y si estamos aquí trabajando con retrasos, la conexión ha tenido problemas para seguir adelante. Y por lo tanto, el programa no va a funcionar muy bien. O en el caso no funcionará de ninguna manera. Por lo tanto, es necesariamente deshacerse de la, de los retrasos. Y ahora estamos deseando implementar aquí Y función que encienda o apague nuestros LEDs cada dos segundos. Por lo tanto, estamos utilizando la lógica de Blink sin demora. Y estoy seguro que ya escuchaste disfunción, pero aquí lo expliqué una vez más. Por lo que estamos necesitando aquí la vida útil actual del del programa. Entonces el ciclo de vida aquí es en milisegundos. Previous Millis no está definido aquí. Entonces vamos subiendo a la parte alta y definiendo un largo sin firmar porque los millones anteriores podrían ser un número realmente grande ya que estamos hablando en milisegundos. Por lo que es recomendable usar y largo y no un entero. Entonces, ¿cómo funciona esta lógica en tan solo unos términos? Por ejemplo, tenemos aquí 1 segundo vida útil. Si el código 1 segundo Son mil, mil milisegundos con tus 1000s anteriores Millis es 01 menos 0 es 1000. Mil no es mayor que dos mil, dos mil n, por ejemplo, diez. Entonces tenemos 2010 es mayor que 2000s. Y esta lógica, esto si la condición es verdadera y se invocará el código aquí, entonces falta una cosa. Estamos devolviendo el pueblo anterior al actual Millis porque en el siguiente paso, por ejemplo, 2050 menos 2010, porque esta fue la última vez que el if condición era cierta, entonces tenemos la nueva condición no es mayor que 2000. Pero por ejemplo, si 1 segundo después, 3,050 menos 2010 no es mayor que 2000. Pero por ejemplo, en los próximos dos segundos, para miles, 50 menos 2010 es mayor que 2 mil. Es verdad. Y el Millis anterior se fijará en 44,050 y así sucesivamente. Y así tenemos una lógica fácil por cada dos segundos. Pero queremos alternar nuestros LEDs. ¿Cómo podemos hacer eso? Por ejemplo, escribir uno blanco, niño pequeño, uno rojo toggled encendido. ¿ Y qué fue? Era el rojo, verde. Se puede ver una lógica sencilla donde podemos encender y apagar aquí los LEDs. Y por supuesto en la función de alternar, no estoy comprobando si es un análogo o digital, ¿verdad? También es con fines formativos para visualizarte lo que es posible con parámetros de entrada, etcétera Pero aquí, solo tienes que alternar LEDs, cambiando el proyecto al proyecto adecuado. Entonces veamos si tenemos algo mal escrito temible o si el compilador nos da una señal verde, sí. Después sube todo el programa. Dependiendo de la leva de mesa, ¿dónde estamos? Ahí vamos. Y como se puede ver, el programa se está subiendo. Nada lo es. Ya lo hemos subido y estamos cada dos segundos, los LED se encenderán y se apagarán. Así que podrías preguntarte, Ok, cosa genial, pero también podría manejar esto con alguna función afuera de aquí. Por ejemplo, alternar blanco y luego invocarlo. Y para blanco, rojo y verde, Eso es cierto. Pero más tarde cuando estés usando diferentes tipos de Millis anteriores, por ejemplo, con diferentes vidas y ciclos de vida, entonces obtienes todo el potencial de la forma orientada a objetos. Este es solo un primer paso más fácil que se puede ver qué es posible y qué tan flexible es la forma orientada a objetos. 25. Apaga el LED después de x segundos: En este video ahora, queremos sumar las funciones turn after delay. Entonces los tres LEDs se activan aquí. Desde que hemos iniciado la USP. Así que detune, eso está bien. Y ahora queremos sumar tres LEDs más a las entidades de boceto. Tres LED deben apagarse después de un número de retardo específico y específico. Y esto es lo que queremos implementar ahora. Por lo tanto, saltamos a las élites LED dot cpp. Copio toda la función del archivo de cabecera es para que tengamos aquí son exactamente copia de declaración. Vamos a doble enlace, doble bonos, corchetes rizados abiertos y cierres. Y así tenemos aquí la función que se apaga tras retraso. Tiene dos medidores de potencia de entrada, diez milisegundos, para que podamos elegir cada entidad, cuánto tiempo se debe encender, y también si se enciende con analógico de o no. Por lo tanto, tenemos que implementar también el principio de Blink sin demora o una lógica, pero un poco diferente. Ahora, antes que nada, queremos tener el actual Millis, nada nuevo aquí. Pero si condición tenemos ahora aquí, algo cambió. Tomamos el actual Millis y el anterior Millis, voy a acortar. Está aquí definido en lo privado. Podemos usarlo también en inglés. Por ejemplo, apague. Y ahora decimos que diferente al actual Millis menos el apagado de Millis anterior es menor que los milisegundos, que pasamos al parámetro de entrada. Y también algo nuevo está aquí porque no queremos restablecer y apagar al anterior ministro. Así que como lo hicimos antes, dijimos Este desvío de millones es minutos actuales, pero no restablecemos fuera de Oriente Medio anterior. ¿ Por qué? Porque sólo queremos una vez que se ejecute esta lógica. Entonces, pero queremos lo demás parte de ella. Y en la otra parte, decimos apagar el LED con analógico de. Entonces apagar es la función que se refiere aquí en nuestra, en nuestra clase LED. Y el apagado toma un verdadero o falso y configura el pin LED, que definimos antes. Y eso es todo. Eso es todo. Lo que tenemos aquí en incluido en la lógica. Vamos al archivo principal del CPP. Y ahora me gustaría añadir aquí algunos LEDs más. Por lo tanto, I LED es azul, uno está en mi GPO, 16. Entonces tengo LED es rojo, uno está en 15. Ya tenemos eso. Quiero una amarilla esta sobre 19, y quiero tener herramienta blanca esta en GPIO 14. Entonces enciendo las luces LED para encenderlas. Azul uno encendido. Y el amarillo se enciende. Por supuesto, también podría encenderlo aquí en esta parte, esto es, depende de lo que le gustaría implementar. Y además, me gusta mantener mi código lo más general posible. Y se llama apagar después demora cuando cambiamos el nombre. Por lo que es más obvio encendido y apagado después de un retraso. Entonces también podrías agregar aquí, por ejemplo, que no necesitas encenderlo con una línea separada. Entonces también puede llamar al encendido o apagado después del retraso, por ejemplo. Pero me gustaría tenerlo más general. Así que sólo lo enciendo. Entonces esta parte es el toggle encendido y apagado, que hicimos antes. Y ahora puedo decir blanco para apagar tras retardo soporte abierto. Ahora veo dos parámetros, el entero milisegundos. Quiero apagar el primero después de dos segundos, y no es con analógico. Mira, ¿verdad? Uy. Entonces tengo el azul y he contestado uno. Se llama amarillo. El azul debe apagarse después de cuatro segundos, termina el amarillo después de diez segundos. Por lo que tenemos aquí dos o más procesos simultáneamente pasando donde FEA, el parpadeo y la alteración cada dos segundos. Y también el blanco al azul y el amarillo deben apagarse después de un tiempo específico. Veamos qué dice el compilador. Si tienes alguna zona de derrames en alguna parte, se ve bien hasta ahora. Entonces aquí tenemos el boceto parpadeante que acaba de seguir. Entonces estamos haciendo clic en subidas. Haciendo clic en el botón para que pueda ser enjuagada. Botón Nth Ahora. Déjame encarnarla ahora. Llevó a apagarse más azulado después de dos segundos. Después de cuatro segundos. Después de diez segundos. Sí. Y esto re los en el bucle, que tenemos aquí, toggle hasta infinito es bucle infinito. Entonces, una vez más, estamos reiniciando el programa. El blanco es, el Y2 es después dos segundos del azul después de cuatro segundos, y el LED será amarillo uno después de diez segundos. Y ves que el proceso paralelo con el toggle está pasando. Y creo que este es sólo un buen ejemplo de que se puede ver cómo la forma orientada a objetos te apoya cuando se trata diferentes tipos de procesos a la vez. Eso realmente al mismo tiempo. Pero se puede ver que no hay diferencia, una diferencia visual. Entonces si implementaste este tipo de lógica de una manera normal con la fábrica, entonces tenías que definir aquí tres diferentes Millis anteriores porque necesitas diferentes tipos de lógica. Parpadea sin demoras, porque aquí tenemos dos segundos, cuatro en diez segundos. Y como se puede ver, hay que escribir tres funciones con casi la misma lógica pero no con las mismas variables. Y esto no es bueno cuando reproducimos código por lo mismo. Nunca es buena idea porque ahora tengo aquí un patrón que podría cambiarlo como me gustaría. Y como se puede ver, solo con una línea, podemos activar e invocar esa función. Entonces aquí tenemos el primer ejemplo de nuestra forma orientada a objetos. 26. Fundimiento: Ahora queremos implementar y desvanecerse. Desvanecimiento. Desvanecimiento significa que encendemos el LED paso a paso en valores pequeños para que podamos apagarlo más suavemente. Y por lo tanto, voy a las tapas dot CPP y estamos implementando fade on function. Yo copié éste. Entonces o escribir en blancos lleva doble ciego, doble ciego, pegarlo. Tengo aquí la función. En esta función, estamos implementando nuestra lógica de Blink sin demora. Por lo tanto, tengo aquí el actual Millis. Y ahora estamos entrando lo mismo que hicimos en el bucle. Eso significa que tenemos su actual Millis, estamos accediendo a la anterior inmobiliaria en. Ya ves, este es un tipo diferente de variable que estamos obteniendo están pasando por encima de la función, el Medio Oriente en segundos. Eso significa que por ejemplo, cada o cada dos segundos, tres segundos en ella, se invocará esta lógica. Y en esta función, ahora, podemos configurar el milisegundo anterior encendido es el actual Millis para que estemos entrando a la condición una y otra vez. Ahora decimos si el brillo es, es 25, por lo que menos de 255, entonces podríamos incrementar su valor. Y eso podría estar haciendo, por ejemplo, primero, estamos imprimiendo el nivel de brillo. Y luego vemos otra mirada, ¿verdad? Estamos viendo el pin LED y tenemos profundidad, valor de brillo. El brillo se fija dos suero al principio, ¿verdad? Y luego aumentamos el valor del brillo por el fade Monto. Y herida fatal también está en variable privada la cual tenemos aquí. Y su indagación está fijada en cinco. Eso significa que cada fila o cada bucle. Aumentamos el brillo en cinco. Por lo que el LED debe aumentar el nivel de brillo paso a paso. Hasta ahora tan bueno. Haga clic derecho en Formato de documento. Y hemos implementado nuestros pies en función aquí. Analogwrite también podría haber afirmado, afirmar valor. Por ejemplo, el valor máximo de esto depende qué biblioteca utilice, pero también debería funcionar con dos parámetros. Entonces voy a volver al bucle principal. Y tengo que inicializarlo a más objetos. Yo diría que estamos recolectando. Déjame ver. Estoy tomando la pantalla LED dos está en el pin, verde a 25, y estamos agregando la herramienta azul. Y está en el GPIO 17. Entonces al final del bucle, estamos dejando todo como antes. Por lo que tenemos aquí nuestros tres conmutadores, hora, tres LEDs que se apagan después de los últimos segundos. Y ahora estamos viendo verde para desvanecerse, por ejemplo, a uno que está en milisegundos. Y tenemos azul para desvanecerse en 600 milisegundos. Hasta ahora, tan bueno, seguro. Veamos qué dice el compilador. Si escribimos mal algo o no. Entonces estamos encendiendo la cámara. Se ve bien. Entonces subimos el boceto y rubor es resistente para ellos. Ahora, se deben invocar todos los procesos. Sí, y como pueden ver, estas dos funciones aquí tenemos la verde y la azul. El azul aumenta 600 milisegundos, cinco pasos, el verde es un poco más rápido. V3 están cambiando y los demás ya están apagados. Entonces, una vez más, iniciaré el monitor serial porque pegamos algo en una ceremonia, llega el tiempo por aquí. Y ahora, como pueden ver, tengo dos mensajes, no estaba realmente claro. Debería haber añadido aquí también el valor PIN por ejemplo. Pero se puede ver aquí un LED está a los 80 y el otro está a 255, ya terminado de desvanecimiento. Y aquí sólo tenemos el azul. Como se puede ver, cada 600 milisegundos, se incrementa en cinco. Y lo digo una vez más. Aquí se puede ver todo el potencial de la forma orientada a objetos porque aquí tenemos el volteo. Tenemos que apagar los extremos de la función, la función de desvanecimiento. Y todo dentro de un solo programa, procesos paralelos, procesos simultáneos. Y como pueden ver, somos miedo y realmente buena visión general de lo que estamos haciendo aquí. En realidad no hay muchas coordenadas. Porque se puede ver si Aidan, qué se alimenta, podemos saltar hacia atrás y ver aquí la lógica de un fade on. Esta es una de las principales ventajas además estos procesos paralelos que podemos ver aquí, el código es muy limpio y muy claro. Y también para algunos terceros, podría ser, diría yo, trabajar en la lógica un poco más rápido porque tiene alguna buena estructura. 27. Pulsar: Ahora queremos agregar otra función paralela y se llama función pulsada. Nos gustaría encender el LED ligeramente y suavemente y luego también apagarlo suavemente. Y lo he llamado pulsante, así que lo copiamos a nuestras tapas dot cpp, blanco. Vamos a doble enlace puntos dobles. Y estamos agregando aún la función. Y ahora podríamos empezar con los códigos por sí solo. Y como lo hicimos antes, aquí usamos la lógica de Blink sin demora. la misma hora que cada vez. Nosotros decimos aquí, si actual Millis. Entonces la vida útil, el ciclo de vida de los códigos menos el medio anterior es procede. Tenemos, lo hemos definido aquí, lo diremos. Y luego decimos corchetes rizados en off. Lo primero que hacemos, estamos pasando los milis anteriores a la actual Millis para que cada círculo, se revise la condición if. Entonces el siguiente paso decimos brillo más es igual a fade Monto. Y la cantidad de fundido se establece en cinco como lo hicimos antes en el destino en el punto S y X, tenemos que sumar si brillo es igual a 0 o brillo igual a dos, 55. ¿ Por qué lo necesitamos? Necesitamos una lógica que nos añada el diseño o diseño a partir de la, desde la radio, de la cantidad de alimentación. Porque si estamos en niveles de brillo suero, la cantidad de fundido debe tener el signo más para que agreguemos cada círculo, 51015, etcétera. Si llegamos al nivel de 255, la cantidad de fundido debe cambiar el signo a menos. Entonces estamos contando atrás a 255250 iterador. Y por lo tanto, en esta sencilla lógica, podemos cambiar el signo de la misma, se desvanecen cantidad. Esta cantidad menos se desvanece. Porque si estamos disminuyendo el valor y estamos llegando a 0 menos, igual menos es más, y sube. Si hemos llegado a la cima para desvanecerse cantidad será un signo menos. Y vamos por lógica simple, pero efectiva. Y como el último, tenemos que añadir otro log ¿verdad? Pin LED. Y estamos viendo el nivel de brillo. Eso es todo lo que tenemos que hacer. Entonces saltando de nuevo a la parte principal, iniciamos escuchar algunas variables nuevas, algunos objetos nuevos. Y sugeriría agregar el tubo amarillo. Está en mi pin 21 y lee para escribir. No sé si es el pin correcto a un formulario. Y al final de nuestro boceto. Entonces todos estos tres procesos como el alternar, les gusta apagar y desvanecerse. Lo guardamos en el boceto. Y ahora decimos rojo para pulsar. Diez por ejemplo, y muy rápido. Y amarillo para decirlo. Por 50 un poco más. Solo comprueba si tenemos algunas flechas encendiendo la leva. Y como se puede ver, este es el boceto de muestra de antes. Estoy haciendo clic en Subir. Entonces estamos carnando, una vez más, usa PM. Y las subidas deberían comenzar. Arriba. Entonces intenta enfocar la cámara. Entonces ahora, como puedes ver aquí, ¿dónde está mi alimentación? W2 está pulsando muy, muy lentamente. Y aquí tenemos el amarillo también está sentado y no el azul sólo se alimenta de éste está procediendo. Y por supuesto el, el rojo es muy rápido pulsando. Entonces, para los procesos, están pasando diferentes tipos de procesos. Y como se puede ver, creo que siete u ocho LEDs tienen diferentes tipos de funcionalidad. Una vez más, estamos encendiendo y apagando esta realidad. Estos, nos hemos desvanecido y tenemos el total enter pulsando todo al mismo tiempo. Creo que esto se hace por realmente sólo unas pocas líneas de códigos. Y como se puede ver, es realmente, realmente buena visión general y tiene una buena estructura. 28. Instantiate los objetos en la matriz: Este video, me gustaría mostrarles una vez más el potencial de la forma orientada a objetos. Por lo tanto, me gustaría crear un área y luego esta área, almacenamos todos los objetos para que podamos iterarla y podamos jugar un poco alrededor. Por lo tanto, creé y const int variable porque es, tengo aquí 15 LEDs. Y cuando cambiamos después aquí algo en una tabla de pan, solo necesito aquí unos y el cambio debería tener todo adaptado. Entonces estamos creando ahora una nueva matriz. List es el nombre de la clase, este es el nombre de la matriz que llamo. Es. Todas las pistas por ejemplo. Y tenemos que decir cuán grande debe el área. Es genial, Tiene 15 ranuras. Entonces hacemos aquí algunos corchetes rizados, punto y coma. Y dentro de los corchetes rizados, podríamos decir, vamos 12. Esto es lo mismo que lo hicimos antes. Así que solo echa un vistazo. Iniciamos el objeto blanco en esta forma, decimos, vamos sólo el nombre de la clase, este es el nombre del objeto, este es el constructor. Pero también podríamos hacer algo así. Es el mismo procedimiento, es el mismo objeto. Estamos creando un objeto. Y iniciamos con tapas esto, el nombre de la clase y el constructor. Y este método vamos a utilizar aquí dentro del ojo todos los LEDs porque aquí el nombre, estamos no tienen nombre. Solo almacenamos el objeto en la matriz. Entonces veamos cómo podríamos hacer eso. Yo he preparado, ya preparado significa que estamos teniendo nuestro primer objeto, segundo objeto, tercero, etcétera Entonces en orden, como lo tengo aquí en la tabla de pan. Y así podemos después hacer algo suelto como estoy persiguiendo detector de mentiras. Puede ver aquí se almacenan 15 objetos. Y esto es lo que tenemos que hacer porque uno a la vez tenemos que iniciarlo con el número pin. Entonces eso es obligatorio. Todas todas las tapas tienen 15 objetos. Hasta el momento. No necesitamos algo en la configuración porque ya está hecho en la clase que tenemos de PinMode, es mejor. Ahora, me gustaría desvanecerme cada año. Son cada uno de los LED al mismo tiempo. Por lo tanto, he hecho Y funciona aquí. Vamos a llamarlo fade in y luego hacer su bucle for. Y esta es la sugerencia auto. Pueden decir entero. Y para leads num, eso significa 0 a menos de 15. Entonces tenemos que permitirnos, se va a iterar. Y luego podemos decir, por ejemplo, o fechas, o se llama alelos. Ahora lo llamamos todo pistas. Plomos. Después iteramos por la primera, la segunda, etcétera Entonces podemos hacer un punto. Y podemos decir fade en 150 milisegundos. Esto es lo mismo que lo hicimos antes. Por ejemplo, si tenemos aquí el amarillo a objetar, entonces también podríamos decir amarillo a punto, desvanecerse sobre 150. Y podríamos decir amarillo, un destino en bla, bla, bla. Este es el mismo procedimiento que hicimos aquí, porque todos los objetos están almacenados en nuestro, en nuestra matriz y podemos acceder a él cuando estamos iterando. Entonces aquí está el objeto y luego podemos acceder a él con la clase. Hasta ahora tan bueno. Entonces tenemos que llamar a la función en nuestro bucle. Veamos qué dice el compilador. Si todo está bien, se ve bien. Conectando la USP ciertamente para monitorear su monitor de computadora monitor, subirlo, luego cambiar la cámara, parpadearla. Ahora, cada uno de ellos era el proyecto force up J. Una vez más, subir fue la configuración para nosotros en el directorio equivocado. Así que ahora es la derecha. Deberían compilarse proyectos. Veamos. Ahí vamos. Todos ellos son, cada uno de los LED se desvanecerá ligeramente encendido, una vez más, un reiniciado. Y como se puede ver, es simultáneamente. Pero de hecho no es realmente simultáneamente. Se retrasa un poco cada LED, pero esto es lo que queremos y ahora es fácil para nosotros hacer otra función. Por ejemplo, queremos proceder, procede todo. Y luego estamos cambiando aquí, no los desvanecimientos. Se llama procede dentro de los 20. Y en el bucle, estamos llamando proceder todo sin comentar. Esto se puede ver sin comentar todas las cosas antes, porque queremos simplemente usar la función array. Presente. Una vez más, sube todo el boceto. Carnoso, usa pm. Y ahora los LEDs más antiguos deberían encenderse y apagarse sin problemas. Perfecto. Como se puede ver, tenemos Kavya y forma muy conveniente donde podemos controlar muchos, muchos de los LEDs. Por ejemplo, podemos hacer que cientos y miles de LEDs controlen solo con cuatro o cinco líneas de código. Y esto es lo que pienso lo que también estamos usando más adelante. Esto es lo que es tan poderoso porque el Sr. de manera orientada a objetos, tenemos aquí manera controlar una gran cantidad de componentes a la vez. Y esto es de una manera muy fácil. 29. Efecto de persecución de LED: Añadamos aquí una función uno más y es fácil de implementar y queremos hacer una función de perseguir LED. Eso significa que los primeros días deben continuar de izquierda a derecha. Y si llegó a la cima, entonces el LED debe apagarse de izquierda a derecha y luego comenzar todo de nuevo. Entonces, por ejemplo, lo llamamos Jason. En esta función, estamos empezando encendiendo todos los LEDs. Entonces estamos usando aquí en for-loop y estamos viendo aquí no pulsar. Estamos viendo arrancados. Y estamos usando embed la capa, pero es solo para fines de entrenamiento para que estemos viendo, vale, ahí está tu subyacente y tiene un efecto más agradable. En entonces queremos apagar todos los LEDs. Entonces en la misma función que estás usando y segundo piso, porque esto es primero iterado. Y aquí está el segundo bucle. En el segundo bucle, ya estamos tenemos esta función y se llama turno tras retardo. Necesitamos introducir parámetros. El primero es el retardo de apagado. Estamos viendo 50 milisegundos y es un análogo de No? Esa es la razón por la que decimos falsa. Por ejemplo, tenemos aquí en retraso. Y ahora podríamos decir aquí, déjame verlo. Eso es todo. Sólo compilar, eso. Se ve bien. Una cosa que me he perdido, tengo que invocar la función, por supuesto en el bucle. Persiguiendo, sube todo el asunto. Veamos cómo se ve. Por lo que normalmente debería comenzar de izquierda a derecha. Si he ingresado correctamente todos los pines, acuerdo con el pedido aquí, ¿las tablas de pan? Sí. De izquierda a derecha, continúa y si llegó a la cima, entonces saldrá sin problemas. Y como puedes ver aquí, tenemos muchas posibilidades donde podemos controlar, apagar, encender los LEDs en y de manera realmente, realmente conveniente con esta zona y la zona es la vieja o tiendas de objetos más antiguos. Así que diviértete con la codificación de forma orientada a objetos y también con matrices. 30. Cableado: Y vibrar parte para este proyecto es muy, muy simple. Tenemos nuestro ESP 32 y aquí están los sensores infrarrojos HV 210 tanto como necesites. Entonces en mi proyecto artesanal, tengo un limón de los sensores. Y en este ejercicio ejemplo aquí para este curso, tengo cinco. Y se recomienda que utilice aquí y convertidor de voltaje para que pueda enchufar sus paquetes externos, por ejemplo, 12 voltios. Y este convertidor de voltaje convierte la tensión en cinco voltios, y este cinco voltios va a la tabla de pan. Y para que puedas alimentar aquí tus sensores, el ESP. Por lo que el dual también debe conectarse entonces para ser cinco. Pero salto esta línea porque estoy alimentando con el USB porque lo estamos programando y queremos un monótono 0. Así que no te quiero en la función root. Esta es la razón por la que me salté aquí. Si pin de cinco voltios. Entonces en el lado derecho, tenemos aquí nuestro LCD y el LED deben simular el mortero. Y estamos conectando aquí con el cartílago de la élite al suelo. Después de la lista desordenada, los pasadores más grandes, vamos a la resistencia y luego al pin número 13. El patrón se conectará al suelo. Y por el otro lado, nos estamos conectando en, sin ninguna resistencia a GPR 12th porque estamos utilizando aquí la resistencia pull-up de entrada de la ESP 32. Entonces echemos un vistazo más de cerca y cómo lo implementé. Se puede ver que esta es mi configuración. Aquí. Contamos con el LED y el pulsador y los cinco sensores. Uno de ellos será la caravana. Y como se puede ver su pequeño potenciómetro, podría ocurrir que estos sensores interfieran a los demás. Entonces hay que ponerlo conectado con algunas, algunas tendencias de virus como lo tengo aquí. Y entonces debería ser funciona bien. Entonces en mi caso funciona correctamente. Lo conecté con algunos cables aquí en la tabla de pan, eso significa que el suelo y el VCC y los pines de salida están conectados si es el virus aquí. Entonces eso es todo lo que necesitamos. 31. Crea proyecto y clase: Estamos empezando con un nuevo proyecto fresco que he creado ya uno incluido aquí en esta era comenzar. Y mis textos hasta ahora, entonces me gustaría abrir la plataforma, cualquier fin aquí estamos, copiar y pegar de los proyectos anteriores uno. Entonces el dinero es dinero. Esas velocidades cargan puertos. Y estoy incluyendo, como siempre, el analógicoEscribir para que lo tengamos aquí. Guarda, ciérrala. Una vez más, dominio abierto CPP. Y ahora lo que queremos hacer es implementar una clase que identifique cuál de estos sensores se activará. Y por lo tanto, estamos empezando por crear nuestras, nuestras clases. Pero antes de eso se ve cómo implementé todas las partes virion. Por lo que solía ser 32 en la tabla de pan plus y terrenos a la tabla de pan para que cada uno de ellos tenga una fuente de alimentación. Y el pin izquierdo de cada uno de ellos están conectados a uno de los GPIO del ESP 32, y eso es todo hasta ahora, toda la lógica moderna se implementará más adelante porque ahora solo queremos enfocar on, soy la forma orientada a objetos, cómo podemos acceder aquí a los sensores infrarrojos sub. Entonces estamos empezando por crear dos nuevos archivos. Haga clic derecho en fuente, nuevo archivo. Y lo estamos llamando IR nuestro sensor o un dot h nuevo archivo o sin dot cpp M. Haga clic derecho, dividir a través de la derecha, cerrar éste. Entonces tenemos nuestro esquema de antes, y me gustaría empezar con el archivo de cabecera. En primer lugar, clase, el sensor, corchetes rizados, punto y coma, luego privado, público. Entonces necesitamos aquí un día, incluye Arduino. Y sabíamos que también necesitamos un Include Guard si el sensor N def subrayan la edad y tenemos fin de año, definimos el mismo fin. Y si es así, puede preguntarse por qué estoy escribiendo en todo esto una y otra vez. Ha sido bueno. Yo diría ejercicio también para ti que ya sabes, estos son los requisitos para clase. Y cuando lo hagas una y otra vez, entonces también podrías copiar y pegar en plantilla, por ejemplo. Pero en el primer comienzo, me gusta hacerlo esto paso a paso. Por lo que también se pueden ver referencias veladas en las que está. Entonces entonces estamos saltando al archivo CPP y estamos incluyendo aquí el sensor dot h y así como el Arduino. Después en el CPP principal, incluyen las ER y el self.age. Por lo que todas las referencias se hacen hasta el momento. Y ahora podemos seguir adelante con la definición de la clase por sí misma. Y me gustaría rellenar todo el archivo de encabezado para que usted obtenga una buena visión general de lo que estamos necesitando y lo que estamos implementando. Entonces estos son, el pin central será el tensor de status GPO que reconocemos si no se cambia. También el estado anterior, estamos necesitando datos para identificar cuál es su sensor se activa. Intelecto al punk, o podemos llamarlo puntos. Porque queríamos decir también que por ejemplo, el medio nos da cinco puntos, diez puntos, 20 puntos, un juego. Contar iteraciones, ERs, y se activan, es motor activado. Posteriormente a eso, también podemos divertirnos y lógica para iniciar y terminar el mortero. Entonces podemos implementar el constructor. Entonces estamos tomando aquí la Tierra-Sol, así que es el GPI abierto. Y también estamos diciendo que queremos tener los puntos. Por ejemplo, lo nombré un poco diferente a este punto para que tengamos aquí claro soy distinción. Entonces necesitamos aquí una más, tres funciones más. Haga clic derecho, Formato, documento, cheque, ER, gatillo. Y esto se implementará en el bucle para que sepamos cuál del censo de urgencias se desencadena. Y calibrar la risa stoke, Se llama por ejemplo, calibración. Esto es innecesario que iteramos y también nos salvaremos algunos, alguna inflamación. Esto es sólo para el propósito de depuración y luego sacó esos portón motor se baja a la marcha suave y una nueva versión de la misma. Entonces sobrescribimos esta función. Esto será ordenado. Me doy cuenta de que consigo esto. Esto es, será necesario para controlar el motor que se apaga y se encienda nuevamente. Entonces, hasta el momento, el archivo de cabecera está terminado. El archivo CPP se configura el archivo principal CPP como referencia y nombre. El siguiente video, podemos empezar con la parte lógica. 32. Aborda el sensor IR individualmente: Empecemos con el código fuente y la lógica. Entonces empezamos por definir el nombre de clase constructor sensor IR o un doble enlace, doble enlace I, el nuestro y así sucesivamente. Y tenemos números enteros GPIO pin y puntos de subrayado entero , corchetes rizados. Y dentro estamos X, dice sensor, pin es GPO o pin. Entonces decimos que los puntos está en los puntos y tenemos aquí y pinMode deudas pin sensor es una entrada porque queremos el valor ER y no hemos iniciado esos. Yo arrancaría sensor es uno. Esto es necesario en la siguiente función. Entonces esta es la primera, la primera iniciación. Estamos cambiando al archivo principal de CPP. Y ahora podríamos abordar los cinco objetos a nuestros cinco sentidos. Y cómo podríamos hacer eso, nuestro sentido o es nuestro sentido de ER o es el nombre de clase. Entonces diría que nuestro sensor uno es ER, sentido. El primero es anclar. Mi primer pin es de 14 y asigné puntos tienden a sus 2345. La segunda frase más o menos para las clases y el segundo sensor no es un pin siete. Veintisiete, veinticinco. Y tenemos el último en r0. Después les damos los puntos por 2050 centésimas. Y el último obtiene 0 puntos porque esto más tarde en nuestra caravana Watergate para identificar Deberíamos arrancar el motor o no. De acuerdo, hasta ahora, tan bueno. Ahora también podríamos implementar aquí en función, por ejemplo, puestos de control. Los puestos de control están en los puestos de control. En esta función podríamos abordar esos objetos. Por ejemplo, eres uno central. Y aquí podríamos decir check trigger, Comprobar gatillo. ¿ Es una caravana? No. ¿ Por qué implemento la caravana también en esta función? Porque me gustaría tener funciones de activación de desmarcar. Entonces, ¿cuál de mis sensores se activará en todo el proyecto? Ahora si una caravana, así digo el resto de ellos. Soy sensor de fuerza 2345. Esta es una forma realmente conveniente y no muy buena. Pero antes que nada, te mostraré cómo puedes hacer esto en el, en el pequeño desvío. Y después estamos haciendo aquí un hijo array, cambiando de nuevo a ERs. Y así porque queremos ahora implementar la función check trigger. Entonces check trigger función no es blanca. Er, no es indigno, es un sensor ERS entero o un doble enlace doble cheque ER o gatillo motorcades. Y ahora estamos implementando casi lo mismo que lo hicimos con el equilibrado el botón. Y ahora te preguntarías, ¿por qué debería hacer puede ser función de huesos para una ER, elección sensata y declaración de lectura analógica. Y por qué estoy haciendo eso es que quiero tener tu función que acaba de empezar volviendo al sensor. Entonces, antes que nada, será de la manera normal cuando me disparen. El sensor como éste, entregará disparado, disparado, disparado, disparado , disparado, disparado, no disparado. Y quiero tener tal cosa que se active en la lógica, pero ahora me devuelve los puntos. Esto es lo que me gustará tener en mi, en mi proyecto. Por lo que no pasa nada y cuando el mármol desaparece, entonces necesito resentirme sus puntos y sólo una vez y no a cinco o seis veces. Y por lo tanto, podríamos usar realmente el mismo enfoque que hacíamos antes. Por lo que estamos diciendo que el estado anterior es empezar a censurar y sensor de estado es pin sensor de lectura digital. Entonces estamos leyendo el sensor y lo estamos pasando al estado anterior. Y ahora estamos diciendo si el estado anterior es más alto y el sensor de puertas de inicio es bajo, eso significa que su objetivo entonces tenemos errores E, envía o disparó, no es cierto, es Millis porque queremos el tiempo como debouncing. Entonces más, si más si pudiéramos ver si el estado anterior es ahora bajo y el sensor de estado es, ¿qué opinas? Entonces tenemos aquí la lógica donde podemos identificar ahora cuánto tiempo han disparado los años y así. Y me gustaría decir aquí, si millones menos ER envía un sentido bastante bueno, se activan bajo diez milisegundos. No debería pasar nada si y de lo contrario. Podría decir aquí, si algo pasara. Y podría decir, si puertas de motor, este es el parámetro de entrada. Si esto se activará, entonces podría decir 0 print. conjunto. Estamos implementando esto más adelante, pero me gustaría cubrirlo aquí porque tiene un parámetro de entrada y toda su canción debería subir, activada cuando también se activa el motor. Y sin embargo, si es un motor bueno o no, me gustaría imprimir el pasador del sensor. Hasta ahora, tan bueno. Esto es lo que nuestra lógica principal narices. Entonces si se detecta sin censura, como lo estoy cubriendo aquí, entonces los Millis se pasarán a un sensor, y después se imprimirá el pin del sensor. Entonces veamos qué dice el compilador. Y estoy conectando todo el asunto. Y subido. De repente estamos encendiendo la cámara. Aquí están mis sensores y ahora estoy cubriendo el primero y ahora estoy dejando el primero y eliminando punto, me estoy volviendo el pin del sensor también en el segundo. El tercero, el cuarto necesitaba un poco bajar. Y el quinto. Y también aquí, nos da unos resultados muy, muy limpios de cada uno de los pines. Y esto es lo que quiero. Quiero un mármol que pase por los LEDs y me devuelva la sensación de dolor. O más tarde, son puntos referenciados los cuales fueron declarados aquí. Esto es lo primero que implementamos ahora tenemos un resultado claro y sencillo. 33. Objetos en el matriz: Hasta ahora probamos nuestra lógica por ahora nuestro programa principal y funciona muy bien. Pero no es muy bueno. Códigalo porque tenemos cinco líneas separadas y cada línea necesitamos identificar si nuestro sensor ER se activa, se forman. Adaptamos ahora nuestro código fuente a una forma más orientada a objetos para que podamos usar también escuchar algunas áreas. ¿Cómo podríamos hacer eso? Decimos nuestro sensor, el nombre de la clase, y luego lo llamo nuestra matriz. Aquí está el placeholder. ¿ Cuántas áreas necesitamos? Los soportes rizados se abren y cierran. ¿Antes de que hagamos eso? Poco común para ellos porque el último será mi motor conseguir este sensor que nos indica molto arranque o no. Entonces y también aquí no convencimos a la sala de revisar puntos. Entonces nuestra matriz de sensores IR debe reunirse aquí y const int por ejemplo, num, ER, envía o sensores es 44. Para sensores, lo que nos da los puntos. Uno nos identifica si arranca el motor. Así que me siento aquí, los sensores num num ER y son conveniente manera es aquí que más adelante ahora puedo cambiar los números para consecuencia 7810 y todos los bucles que no son flujo de calor. Un asimiento de para bucles que viene más adelante. Seremos adaptados automáticamente. Entonces se llama sensor de año, ese sensor encendido. Aquí, tenemos ahora otros corchetes rizados para cada objeto. 40 es el alfiler, diez está ahí. Estoy haciendo unos puntos. Entonces el segundo objeto, pin 2720 puntos, cierto objeto 2650, objeto fotográfico 25100 puntos. El portón del motor. Lo dejaremos ahí porque esta debería ser de una forma separada. Entonces revisa los puntos que necesitamos y seguimiento. Entonces para para tablet. Para que lleguemos hasta aquí la autofinalización. Estoy usando aquí un entero y dos para el conteo y estableciendo aquí los centros IRR número. Por lo que itera a través del 01234. Entonces, sí, yo diría nuestra matriz, luego identificar qué puntos objeto. Y podría decir chequear gatillo. Y es falso porque solo eres una vez los puntos y un sensor deben ser abordados manualmente. Y estas son las puertas modales porque cuanto más objetivo esté separado, el watergate es cierto. Sí. Esto es todo lo que necesitamos cambiar. Así subido una vez más, sin compilar. Eran enciende la cámara alrededor. He añadido LED extra, que también se implementa en la parte del violín, pero llegamos a él más adelante, así sucesivamente. Ceremonia Dan debe ser el mismo resultado que antes, pero con algún cambio, todo funciona bien. Por lo que adoptamos ahora todo el programa de una manera más conveniente, de una manera más directa. Entonces cuando tenemos que cambiar algo, es muy, muy simple. Y como mencioné en mi proyecto, he añadido aquí 11 sensores y pienso si hay que cambiar algo, y en realidad no soy lo suficientemente flexible. Y fue esta construcción. Podemos adaptar nuestro código de una manera más fácil. 34. Simula el motor: En este video ahora nos gustaría simular el motor. El motor está aquí, el LED, y usa el pulsador. Podemos arrancar el mortero. Y luego si el mármol sube, arriba, arriba, arriba en la parte superior de nuestra tabla de Galton, ahí está la caravana. Este es el centro. Y cuando el mármol golpee o pase por estas ERs y así sucesivamente, entonces el motor se apagará y esta funcionalidad nos gustaría implementar. Ahora, pues, tenemos que ir al CPP principal. Y aquí declaramos dos variables más. Aquí. El LED entero es un entero. El botón es, así que echemos un vistazo. Mi botón está en el pin 12 y D está en un equipo CERT. Entonces en la configuración, necesitamos anclar modos. El botón de modo Pin es un pull-up de entrada, y el LED PinMode es una salida. Cualquiera de las funciones de bucle. Queremos comprobar si se hace clic en el botón. Por lo tanto, decimos si. ¿ Y cómo podemos hacer eso con el botón de lecturas digitales? Y tiene que ser bajo porque he conectado el botón quiere al bajo, al suelo y una vez un pin al GPIO. Y por lo tanto, diría que si botón de lectura digital es más bajo de lo que debería pasar algo. Y en este caso, DigitalWrite LED de alta. Por lo que encenderemos el motor, y aquí encendemos el LED. Por lo que entonces la siguiente parte será cuando se active la caravana, nuestro sensor en el extremo, debe apagarse. Por lo tanto, lo cambiamos de nuevo al sensor ER para que tengamos acceso a nuestra variable. Tenemos que decir led entero externo. Y así decimos el programa. Por favor, mire fuera de este programa. Esta variable tiene que ser identificada en el externo es porque término x se define fuera de este fichero. Entonces la caravana está aquí. Si motocades una vez, entonces podemos decir si esto se activa DigitalWrite LED y es bajo. Vamos a revisar el compilador. Y Lester, ESPN. El campamento. ¿ Estamos encendidos? Una vez más al monitor serial ya está abierto. Sun ahora estamos conectando el rubor. Entonces veamos qué está pasando. Los puntos normales deben funcionar como antes. Y cuando estoy cambiando ahora, están subiendo, presiona el botón. Y esta es la caravana. Y la caravana se activará a un M. Aliviarlo. Sí. Agradable. Y los puntos funcionarán como antes. Entonces ahora en nuestro caso, presionamos el botón y esto es lo que tampoco hice. El primer concepto, el modelo se morirá de hambre. Modelo, modelo, modelo trae el mármol hasta la cima. Hay un sensor. El sensor se activará para que el motor salga de eso. No demasiado. Demasiadas canicas llegan a la cima a la vez. Y luego el mármol toma el camino abajo algunos de los, así que nos apagamos. Entonces desencadena uno de los sensores y esto nos da ahora el sensor más adelante, los puntos que se entregarán. 35. Evaluación de los sensores de IR: En este video ahora, me gustaría implementar, implementar el método de calibración. Porque cuando se piensa en todo el proyecto, me gustaría ver con qué frecuencia se activará cada sensor y cuáles son los puntos. Estoy volviendo. Porque como pueden ver aquí, tenemos aquí y devolvemos valor, pero no lo implementamos aquí ningún retorno , y esto tiene que ser implementado. Por lo que en primer lugar, me gustaría comprobar si hemos asignado los puntos. Se asignan puntos. Y ahora me gustaría llamar aquí en esta etapa. No obstante, si es una caravana o no, el método de calibración, el método de calibración podría ser Es un sentido amplio nuestra calibración de doble punto de enlace doble. En esta función, solo quiero volver y textos porque sólo me interesan los puntos pin. ¿ Y con qué frecuencia lo uso? Y por lo tanto, tengo y variables miembro, miembro privado llamado en duraciones. Y iteramos éste. Y ahora puedo ver seriada f. Y quiero tener tres variables. El primero podría ser sensor, y se llama pin del sensor. Entonces podría agregar un segundo valor también. Y son los puntos. También un formato entero. Y los puntos son los puntos. Y como último, también podemos sumar aquí las iteraciones, duraciones. Y también es un entero, y se llama iteraciones de conteo. Estamos recuperando cada vez y se activa el sensor. Esta línea sensor pin puntos, iteración. Se ve bien. Un poco más. Los corchetes dirían en este formato. Y al final estoy haciendo una vez salto de línea. Y eso se ve bien hasta ahora. Entonces entonces estamos eligiendo el proyecto correcto, subir todo el asunto. Y ahora deberíamos conseguir aquí algunos comentarios en nuestro monitor de suero cuando el compilador no vea ningún error. Pero creo que se ve bien hasta ahora. Entonces estamos subiendo todo el boceto. Abre la presa ceremonia. Y como antes, podríamos arrancar aquí, el motor motor, y vemos aquí el sensor motor pin 0.30 puntos, iteración uno, iteración 234, y los divergadores comenzando tenemos aquí diez puntos. Tenemos aquí segundo, 20 puntos, 50 puntos, 100 puntos. Y las diferentes iteraciones estarían iterando. Muy, muy bien. Esto es lo que quiero. Y ahora te imaginas, podrías hacer esto en un proceso automático. Ahí. Maravilloso subir, baja. Estará recogiendo los puntos y las iteraciones. Y entonces también puedes resumir aquí, distribución normal cuando todo salió bien. Pero esto no es lo que quiero en el entorno productivo. Esto es sólo para calibración. Podemos apagar esto. Y también aquí el dolor central. No quiero, quiero volver sólo los puntos lo que quiero. Y por lo tanto podríamos decir, por ejemplo, aquí, definir una nueva variable. Se llama salida entera. Y lo devolvemos al final para que podamos seguros de que hay algo. Vuelve aquí. Podríamos decir que la salida es de 0 puntos, por ejemplo. Ahora hay que imaginar cuando tienes pocas alguna otra lógica, por ejemplo, puedes agregar algunos puntos de bonificación, algunas palancas de bonificación, etcétera Siempre es buena idea poner esto en una variable externa y no pongas sólo los puntos. Entonces vamos de vuelta al CPP principal porque aquí el valor de retorno no va a ninguna parte. Por lo tanto, yo implementaría aquí también en D2L dentro de nueva variable, se llama puntos consiguidos. Y vemos aquí me da estos puntos en este mismo cuarto. Y si Galton apunta mayor a 0, porque 0 es nuestra puerta motora, entonces centímetro los puntos vía MQTT, por ejemplo, o enviarlo vía eventos secundarios del servidor. Los eventos del lado del servidor también se trataban en esta clase en línea en ejercicio de tijera de papel de roca. Por lo que también podríamos empezar allí mortero a través de sitios web en la ESP, o podemos manejar sus puntos y enviarnos de vuelta a nuestra página web. Pero aquí también podríamos, sí, consideramos una impresión solo para el propósito de la debug. Puntos D. Y estamos volviendo aquí mazo consiguió algunos puntos porque este no es buen acercamiento cuando estamos tratando aquí dentro de la principal. Y cuando volvamos de toda nuestra clase, solo los puntos y toda la lógica se implementarán en la parte principal. Por lo que una vez más, estamos subiendo nuestro archivo. Y veamos qué dice el compilador. Normalmente derramar Esa siempre es una buena señal. Entonces subiendo todo una vez más y ahora la ceremonia debe haber un poco más clara. He perdido el salto de línea. Por lo tanto 11010202050, Uno 100. Y las puertas del motor también. La caravana debe estar fuera del bucle for, y luego está dentro de bienes vendidos hasta ahora hemos implementado ahora también en los puntos y la caravana. 36. Descripción del proyecto de artesanía: Entonces veamos el proyecto terminado. En primer lugar, el elevador de mármol será alimentado por una neurona motora tan pequeña. Y el motor está unido a la parte inferior. Entonces cuando estoy presionando aquí mi botón, está conectado vía MQTT, elevador de mármol uno. Y aquí está la caravanera que disparó el motor. Por lo que una vez más, motor se encenderá y seguirá hasta que se active la caravanera. Después, el mármol bajará. Y de acuerdo con el sensor que se activará y recuperando los puntos a mi nodo rojo Birmania MQTT broker también está conectado. Ahora, más vivido, y está terminado. 37. Recapitulación de OOP: Enhorabuena al final de este capítulo de video. Y espero que te hayas divertido tanto como yo tuve para hacer que el código fuente de este objeto se orientara de manera. Así que utilicemos, aquí están unos segundos para recapitular todos los aprendizajes lo que teníamos aquí. En primer lugar, creamos tus diferentes objetos para que podamos comprobar si se activarán algunos de los sensores infrarrojos. Después creamos un área para que sea más inconveniente de manera que pudiéramos controlar el censo del año y también la forma orientada a objetos como viene aquí. Una vez nos muestra las ventajas que se crean y la función de calibración. Y esta función de calibración nos entrega el sentido de pin, el recuento de las integraciones, entrar puntos y pensar en ello. ¿ Cómo podrías desarrollar esto fácilmente con alguna función? No será tan fácil porque lo necesitas aquí. Diferentes tipos de iteraciones, variables, y cómo controlar los diferentes tipos de sensores. En cierto modo, no será tan fácil. Sería alcanzable, pero no tan conveniente como una forma orientada a objetos. Hacemos un plano para un caso. Y después cada objeto puede usar este blueprint y aquí es donde creo que es tan valioso cuando se trata de código fuente. Siempre que tengas diferentes tipos de sensores, muchos de ellos, múltiples de ellos, luego usa tu objeto, escribe tu propia clase. Será más rápido y mucho más flexible, tanto para el recapitulativo. Y ahora vamos al siguiente ejercicio y al siguiente video. 38. Cableado: Entonces virion parte de este proyecto es muy, muy simple. Por lo que tenemos aquí y USB 32. Contamos con dos LEDs, dos resistencias, y un pulsador. El pulsador se conectará a la tabla de pan desde el suelo hasta el pulsador. Y al otro lado, estamos conectando aquí, el pulsador a la GPIO2 y 13. En mi caso, también estamos conectando tierra desde la ESP, por lo que T2 a la tabla de pan. Por lo que eso tendrá el mismo potencial a los LEDs. Y como mencioné en el primer ejercicio práctico, depende del color del LED, que resistente a la unidad. Y también depende si usas un Arduino o y ESP 32. El ESP 32 apoya aquí 3.3 voltios y ahí están el enol puede entregar cinco palabras de GPIO. Y con respecto a esto, hay que calcular la resistencia. Basta con echar un vistazo más de cerca a uno de los primeros videos de la clase LED. Ahí. Lo mencioné un poco más en detalle. Aquí mi caso fue el ESP 32, solo uso y resistencia de 100 ohmios para ambos porque es sólo en propósito de entrenamiento. Entonces conecté el suelo al cátodo del LED. Este es el, el diminuto pin y luego el pin de lava que estamos conectando a su resistor. Y de la resistencia al GPIO número 25 al rojo. Uno verde, que se muestra aquí con alguna azul. Me conecté con, igual que el rojo. Entonces conectando los terrenos al cátodo, luego el pasador más largo que pasa por la resistencia y desde la resistencia a la GPIO número 12. Y eso es todo por este ejemplo, el resto será programa están codificados en el código fuente. 39. Agrega botón de clase: Empecemos con un nuevo proyecto fresco. Me siento incluido el faro y en el cpp principal, solo lo edito aquí y Sarah empieza. Eso es todo lo que hice hasta ahora. Ahora, lo que me gustaría hacer es configurar todo el constructo de clase. Por lo tanto, hacemos clic derecho en el nuevo archivo fuente. Y decimos Aquí, botón punto h, y estamos llamando nuevo archivo, botón punto CPP, botón de combate, clic derecho combatiente, ese borde se divide a la derecha. Entonces vemos que el explorador debe desaparecer. Y ahora tenemos aquí nuestro desarrollo IDE. Y me gustaría empezar por definir el botón punto h. En primer lugar, la clase, se llama botón. Los soportes rizados se abren, cierran, punto y coma. Entonces el siguiente es incluir guardias. Si N def botón edge, entonces podríamos decir definir el botón H y el mismo final con la audición. Y si incluyo a dios está terminado. Entonces, ¿cuál es la tercera, la serpiente? Es cada vez lo mismo. Deberíamos incluir el Arduino head up. Y así sucesivamente. El archivo de cabecera es, por lo que este estado terminó. Entonces saltamos al botón dot cpp, sugeriría que estamos agregando aquí. Lo primero incluye botón ese borde. Y estamos incluyendo al Arduino. Hasta ahora, tan bueno. Y lo que también necesitamos aquí estará ahí. Estoy miro punto derecho h. Así que h necesitaríamos más adelante para los LEDs para que podamos alimentarlo con PBM, su fuente, yendo a poseer el explorador haciendo clic en plataforma en Él. Tenemos que añadir aquí la biblioteca externa y mirar bien. Y también sugeriría que escuchemos agregar el puerto del monitor de mi, en mi caso, es la columna tres. Hemos establecido la velocidad a 115200 o en un marco y la plataforma expresiva y según usted utiliza PIM también configurando el puerto. Guardar cerca de la sangre de. Y tenemos aquí todo lo que necesitamos para el botón cpp. Entonces también sugeriría que saltemos al CPP principal y hagamos la referencia incluya borde DOD para que tengamos aquí todos los archivos referenciados en nuestros tres archivos. Entonces como paso siguiente, reclutas definen todo el archivo de encabezado. Eso significa que podríamos decir aquí es una deuda tecnológica traída y como un corto recordatorio y actos protegidos aquí en el botón de clase dot HHS, privado. Cuando heredemos más adelante toda la clase, entonces será como público, miembro público. Así protegido a cargo, botón, pin, enteros, fechas, y resultado entero que estamos necesitando más adelante y en el público, tenemos aquí el constructor, que nos está llevando y pin. Estamos teniendo función de inicio y tenemos botón Jack con parámetro de retorno como un entero click derecho Formato documento. Y también hemos formateado nuestro botón dot h. estoy saltando al botón CPP. Y yo estoy quiero, quiero implementarte el constructor. Por lo tanto, digo botón, eso se llama la clase luego doble punto, puntos dobles, botón en el drop-in, corchetes rizados abiertos, cerrados, y es pin de botón. Este es nuestro miembro protegido, es el pin que estamos pasando por el constructor. Entonces vamos al CPP principal. Y luego el CPP principal, o estamos haciendo aquí un objeto. Iniciamos un botón de objeto, botón editar ahí. Y en mi caso, el botón se coloca en un GPO cierto, en, en este ejemplo, solo estamos pasando el valor a nuestra clase y no estamos configurando el PinMode. Este es un tipo diferente de enfoque que me gustaría mostrarles. Por supuesto, también podrías hacer el PinMode también. Pero hasta ahora tan bueno. Lo estamos configurando todavía, nuestra clase, nuestro botón principal, CPP y el CPP principal. Ahora estamos listos para ir a cotizar el resto. 40. Botón de debounce con milis: En este video ahora, queremos que se balancee el botón y también preparar el código para que estemos en el siguiente paso podamos usar l, podamos identificar cuánto tiempo presionamos el botón. Pero antes de que pudiéramos hacer eso, tenemos que configurar aquí nuestro botón, y por tanto botón CPP M, estamos declarando otra función. Se llama blancos, botón, doble punto, doble punto, inicio. Aquí estamos configurando en los modos pin. Es el pin de botón. Y estoy usando aquí y las entradas tire hacia arriba para que tengamos buena señal. Y creo que en el entorno Arduino, también hay que introducir pull-up. Y de lo contrario se utiliza sólo el valor de la entrada. Y también estoy sentado aquí en la variable estatal en lo alto. Vamos más tarde. Por qué hacemos eso. Entonces volviendo al archivo CPP principal, en la parte de configuración, estamos viendo aquí que estamos usando el botón hacia arriba, hay botón que no hemos iniciado, pero el objeto con botón, botón LED, esto es nuestro objeto ahora que estamos iniciados. Y ahora podemos decir botón, punto LED de inicio. Y ahora tenemos listo el PinMode. Por lo que el siguiente paso será que hagamos aquí el botón check. Y una vez más, cambio esto a blanco porque después estamos usando el entero, el parámetro return, pero en el primer paso no lo necesitamos. Entonces estamos diciendo qué botón, doble enlace, doble enlace, botón Check. Y este botón Check se invocará en cada bucle. Por lo que cambiamos al CPP principal y decimos botón, LED y botón check. Por lo que sugeriría que acabamos de escribir ahora unas líneas de código. Y después subimos a la ESP y vamos, una vez más, pasamos por todo el código. En primer lugar, estamos definiendo una variable. La variable será número entero. Estado anterior es estado, y el estado es digital. Pin, botón, pin, botón, pin. Entonces, lo que estás haciendo aquí, estamos haciendo un bucle a través de esta función. Cada bucle, el último estado del botón será la seguridad y el estado anterior, y el estado real se guardará aquí en el estado. ¿ Por qué hacemos eso? El motivo es que ahora podemos identificar cuando alguien presionó el botón. Y esto es muy fácil. Podemos decir si el estado anterior es mayor, el estado es bajo porque estoy usando aquí la entrada pull-up y estoy conectado el botón al suelo. Mi estado bajo significa que cuando estoy presionando el botón, alto, ¿es cuando es, no nos estoy dando señal? Esta es la razón por la que te estoy dando diseño de estancia. Eso significa que al primer comienzo, no estamos presionando el botón y iniciamos con la señal alta. Dentro de este hongo están en esta condición si. Estamos haciendo remeshing aquí a la vez. Por lo tanto, necesito una o dos variables más. Así que estoy viendo aquí un botón largo sin signo, pulsado milisegundos y botón largo sin firmar milisegundos hacia abajo. ¿ Qué es sin firmar? Sin firmar es cuando estamos declarando variable, tenemos menos parte y luego más parte. Cada una, cada cosa es del mismo tamaño. Pero cuando estamos viendo sin firmar, solo queremos el lado más y estamos tomando todos los valores son todo el espacio de memoria y solo lo asignamos al lado positivo. Por lo que hemos duplicado el tamaño solamente y el lado positivo, esto es lo que significa con largo sin firmar. Porque somos los milisegundos. La vida útil actual no podría ser una parte menos. Esta es la razón por la que lo usamos. Entonces con este botónPulsados milisegundos, ahora podemos asignar botón. Haga clic. Millis es Millis lo que estás haciendo ahora? Cuando alguien presione el botón, los milisegundos, milisegundos actuales se asignarán aquí al botónClicked. ¿ Y por qué hacemos eso? Porque ahora podemos seguir y podemos decir else-if, si el estado anterior es y creo que sabes qué, viene, bajo, estado final es alto. Después soltamos el botón. Porque cuando estoy presionando el botón, el bucle está pasando. Por lo que estoy presionando el botón y el botón hecho clic milisegundos segundos se asignará a su vida actual lapso hacia fuera a los milisegundos. Y después, si lo estoy liberando, ahora puedo hacer algo con diferente fue el botón del editor Millis hizo clic milisegundos. Entonces, pero aquí está, aquí viene la parte lógica. Pero una cosa es que te falta una moneda porque no se discute ya lo que está desbotando un botón? El equilibrio significa que cuando estamos presionando un botón, hay algunas cosas mecánicas pasando. Esta función mecánica no es muy precisa cuando se trata de milisegundos porque el botón llamó cerrar en un milisegundos, el fuerte o el circuito actual. Y es por eso que obtuvimos señales mixtas. Entonces este proceso necesita unos segundos, unos milisegundos, y la arena puede reconocer estos milisegundos y nos da una señal de encendido, apagado, encendido, apagado. Y esto ocurrirá también en nuestro boceto. Eso significa que tenemos el espectador obtendrá algunas señales más de las que estamos acostumbrados. Haciendo su práctico escaparate línea de impresión en serie. Y estamos viendo aquí ButtonClicked milisegundos. Por lo que normalmente debemos presionar el botón, nada debe imprimir en el botón 0. Y cuando lo estoy liberando, entonces estamos consiguiendo, creo que sí más de un resultado. Y esta es la razón del rebote desde el botón. Así que subamos el boceto a nuestro ESP. Después apaga la cámara. Y puedes ver aquí los 0 monitores encendidos, solo eliminando los viejos. Y ahora tengo presionado el botón y lo suelto. Y puedes ver que llegarás aquí unas líneas de código y esto está rebotando fuera del, fuera del botón. Significa que no puede cerrarlo lo suficientemente rápido como para obtener una, una señal realmente clara. Entonces, lo que podemos hacer ahora, hemos medido cuando pulsamos el botón. Y esto podría ser útil para nosotros porque ahora podemos seguir y podemos decir, si por ejemplo, enumeramos la corriente estoy ciclo de vida menos botónPulsado milisegundos. Entonces esto es cuando nos presionan el botón bajo 50 milisegundos porque esto es lo que no somos interesantes. Aquí está el área de límites, nada que hacer solo con fines de entrenamiento. Entonces decimos, si no. Si la señal es superior a 50 milisegundos, entonces sólo deberíamos conseguir aquí una línea recta cargada una vez más. Y luego estamos discutiendo todo el código. Una vez más, se sube el código. Entonces estoy reiniciado. Haga clic en el botón y suéltelo. Por lo que el largo clic siempre, la mayor parte del tiempo funcionará. Pero si estoy haciendo click corto, corto clip, entonces también se puede ver aquí es D equilibrado porque solo consigo una línea recta de ella y esto es lo que queremos. No, no hay rebote del botón, simplemente haga clic. Y ahora tenemos señal realmente precisa y estamos obteniendo buen resultado de ella. Entonces, una vez más, ¿qué hemos hecho hasta aquí con meteorito y estados anteriores? Y luego estatal, el estado nos dará una señal desde el botón, y el estado anterior salvará el estado de antes. Entonces estamos sentados aquí con el primero si, si el estado anterior es alto y eso significa que no se empuja nada, y ahora se empuja. Por favor, guárdeme en los milisegundos en el botón variablePulsó milisegundos. Y estoy manteniendo pulsado el botón y el bucle sigue y sigue y continúa. Ahora estoy soltando el botón. Ahora en el siguiente bucle estamos aquí porque el estado anterior ahora es bajo. Y el estado es alto. Alto significa que solté el botón. la diferencia entre los Finalizala diferencia entre los Millis, el botónClicked. Si es corto o menos de 50 milisegundos, entonces no hagas nada más. Por favor, dame algo de lógica aquí en esta parte. En los siguientes videos, podemos definir aquí si es mayor que 5200. Entonces esta es la zona donde podemos definir los diferentes tipos de presiones de clics. Y así tenemos dos cosas. En una lógica, estamos profundamente rebotados el botón y también podemos identificar cuánto tiempo alguien presionó. 41. Detecta la duración de los clics: Y ahora queremos identificar dos tipos diferentes de cuánto tiempo presionamos el botón. Y esto va a ser muy, muy fácil ahora para nosotros porque ahora solo estamos agregando otro si. Y estamos viendo aquí, milli es menos botónClicked. Entonces todo es mayor de 50 y necesito un poco más de espacio. Todas las cosas aquí arriba deben ser menos de 200 milisegundos. Entonces eso significa que si es mayor que o menor que, entonces pasa algo. Entonces no tiene seguro. Haga clic entonces en toda la cosa. Recopíalo. botón Else-if mayor a 200 y menos de 900 milisegundos, por ejemplo, es un onClick. Entonces aquí está el área de desrebotes. No pasará nada. Y después de los milisegundos de 50 a 200 o clip corto debe ser identificado y después y clic largo. Entonces subiendo todo el asunto una vez más, y echemos un vistazo más de cerca. Si puedes identificar ahora los diferentes tipos de clics. Bocetos arriba. Entonces estoy haciendo click en corto, corto, corto, corto, largo, largo, largo, largo, corto. Y como se puede ver, un normal no rebotar. Todo es bonos profundos con respecto a clics claros y claros, solo una línea a un clic, y esto es lo que queremos. Agradable. Para que como se puede ver, una más simple que tenemos con una lógica y D libras. Y podríamos identificar aquí diferentes tipos de cuánto tiempo presionamos el botón. Entonces está en tu creatividad si quieres agregar más función, pero creo que dos o tres deberían ser suficientes. Porque de lo contrario será difícil identificar cuánto tiempo nuestros tres segundos es, pero depende de tu proyecto y ahora tu campo se puede sentir, siéntete libre de hacer tus propias longitudes de patente e identificar los diferentes tipos de mediciones. 42. Interfaz limpia: Este video ahora queremos mantener la clase un poco más general y chiller significa que nos estamos librando de algunas cosas específicas porque más adelante lo haremos en otro proyecto, por ejemplo, si quieren utilizar la patente CPP y botón dot h, nuestra clase, también en el proyecto. Y no hay necesidad de unas implementaciones específicas, por lo que necesitamos toda la sala. Toda la parte lógica debe estar en el CPP principal y no en el patrón CPP. Entonces te muestro lo que quiero decir. Estamos cambiando al botón Checkout y devolvemos valor a un entero. También en los botones, el BPM estamos cambiando aquí bajo valor de retorno a un entero. Y lo que hacemos ahora es que estamos definiendo aquí tres estados. Entonces, por ejemplo, el teorema de valor de retorno. No hay nada que hacer. Nada que hacer. Si estamos recibiendo uno de retorno, está en breve clic y de lo contrario es un clic largo. Por lo tanto, ya tenemos variable, que se llama resultado. Y yo sugeriría que estamos haciendo aquí resultado de 0 significa que no tenemos nada que hacer. En tanto que podría el resultado 0. Ponga, inserta lo primero porque yo tampoco es nada que hacer. Y también en el error debouncing, nada que hacer. Al final, devolvemos el resultado y el corto clic. Descomentamos la impresión serial. Simplemente decimos que el resultado es uno. Y en el else-if es resultado dos. Este es mi flex y volví a flex y tengo todos los casos aquí. No hay un resultado asignado, por lo que debe devolverse en cada bucle. Y 0 o uno o dos. Esto es lo que quiero decir fue generado en el próximo proyecto. Podrías usarlo y también puedes identificar los diferentes tipos de estados después de los resultados y hacer algo en la parte principal. Y esto es lo que hacemos ahora, cambiando a la parte principal. Y ahora esta función nos entregará y devolverá valor. Y este valor devuelto será capturado, por ejemplo, en y el caso del switch. Por lo que decimos interruptor y decimos caso uno, estuche de freno a punto de burbuja break. Entonces, estos son los principales fondos estructurales, ¿cuál es el caso? Haga clic derecho Formatear documento e inserta el caso uno, podríamos decir serie, impresión, línea, fraude click desde el CPP principal. Y en el caso dos, deberíamos tener aquí n clic largo. Entonces sube una vez más a nuestro USBE 32. Esto es lo que quiero decir con mantenerlo general porque ahora todo el patrón CPP es nos da un valor de retorno. Y sin embargo, lo que estamos haciendo ahora, estamos atrapando aquí los valores de retorno en algo y esta es una buena manera de cómo los mantenemos limpios interfaz. Después encienda la cámara y abra la hora de la ceremonia. Y ahora deberíamos ver el mismo resultado. Clip corto, clic corto, onclick, onclick, onclick probable. Mismo resultado. Interfaz más limpia. Y ahora podemos utilizar nuestra propia biblioteca en otros proyectos también. 43. Control de ledes: Ahora es el momento de que también podamos controlar nuestros LEDs con el botón. Y por lo tanto, definimos dos variables. Podemos decir que es leída LED. Tengo el GPO 25, y el LED verde está en GPO 12th. En mi caso. En la configuración, tenemos que hacer un PinMode. Pinmode LED rojo es salidas. Copiar pegar. Led green es también una salidas. Por lo que ya preparamos y ahora podemos controlar nuestros LEDs. Eso también es fácil. Se podría decir aquí, y los derechos digitales LED. Pero un clip corto, utilicé, gris es alto. Y ahora podríamos decir trabajar con banderas, por ejemplo, si está encendido, entonces lo estamos poniendo a bajo. ¿ A menudo nos ponemos en más alto? Pero estoy seguro que ya viste la clase de LED y también en ejemplo anterior y ejercicio en este curso online. Y ahí estamos toggled un LED. Entonces derechos digitales, por ejemplo, podríamos usar aquí, LET verde, y aquí en la parte alta o baja, estamos diciendo que digital lee LED verde. Y lo que estoy haciendo ahora es que me estoy poniendo aquí. Si el pin es el LED está encendido, entonces llego aquí de vuelta y alto, pero no quiero un alto porque entonces lo quiero cambiar. Y por lo tanto estoy invirtiendo la señal. Y veo cuando estoy llegando a más alto, se invierte demasiado bajo. Si el LED está apagado, me meto aquí y bajo y interrogación, signo de exclamación. Estamos fijando la baja a alta. Entonces esto es todo lo que necesitamos aquí. Con toggle el LED, el 0 print, lo guardo, guardo porque entonces puedo ver lo que nos estamos metiendo en el bucle. Y si lees, entonces, esto debería estar bien. ¿ Verdad? Proyecto. Entonces sube todo el asunto. Y ahora con algún clic corto, deberíamos ver o debemos encender. El LED verde está en clic largo, se debe encender el LED rojo. Por lo que encender el serial, monitorearlos y hacer clic en el disparo. Haciendo clic largo. Y lo que podemos hacer ahora es faltar atajos y hacer clic corto y largo. Y como se puede ver, ambos funcionarán al mismo tiempo porque sólo estamos controlando los GPIO con el botón Pin. Y esto es lo que creo que hace tan poderoso porque ahora como se puede ver, solo tenemos varias líneas de código. Toda la lógica general está en el botón. Y ahora tenemos aquí un buen ejemplo de lo que podemos hacer con un botón y varios estados. 44. ButtonHeadlamp hereda de Button: En esta etapa en un proyecto, tenemos ahora, diría que terminamos nuestra clase de patrón general. Por supuesto, se le pueden sumar algunos puntos más. Lo que usas de forma regular para que puedas usar esta clase y proyecta individualmente una y otra vez. Es por ello que hacemos este objeto de manera orientada. Pero también podría ocurrir ahora que tenemos, ahora y circunstancias y requisitos que tenemos adepto a nuestra clase, esta adopción no es útil cuando estamos implementados en la clase base general, en nuestro caso, la clase botón. Por lo tanto, estamos creando una nueva clase. Lo que vamos a hacer ahora, se llama el rifle del faro del botón. Eso significa que la base es la clase base es nuestro botón dot h. heredamos y luego podemos adaptar algunos fragmentos de código. Y esto es de manera más útil, de manera más limpia porque las partes individuales están en una clase separada. La clase base es de manera general o la mantuvimos de una manera suave. Entonces esto es lo que hacemos ahora. Estamos creando una nueva clase. Haga clic derecho en fuente, pulsamos en Nuevo Archivo y podemos decir que botón tenía un punto de lámpara CPP. Y también haga clic derecho Nuevo Archivo, botón, lámpara punto h. Y estamos comenzando con io.h estándar con el archivo de cabecera. Y ahora creo que esto no es nada nuevo para ti. Podríamos decir faro de botón de clase. Y ahora queremos derivarlo de la otra clase base. Un botón público doble ciego, corchetes rizados abiertos, cierran, punto y coma. Que esto funcione de la manera correcta. Tenemos que incluir ahora ese patrón punto h. Y como se puede ver, la tercera vez que incluimos el archivo de cabecera desde el botón. Y es por eso que necesitamos que algunos incluyan guardias también. Pero antes de que incluyan guardias vienen, estamos aquí y escribimos que H. Y ahora el botón Incluir Guardia F y sordo tenían cordero subyacente edad. Y luego tenemos fin de año si está bien. Y al final estamos viendo aquí. Y si eso se ve de una manera que yo diría, eso es bueno hasta ahora. Divide a la derecha. Cierra éste. Ahora estamos saltando al promontorio dot cpp. Por ello, tenemos que incluir la lámpara de cabeza dot h y tenemos que incluir el arduino dot h. sugeriría que también lo hagamos está aquí, para que tengamos nuestro entorno también en la clase. Y ahora podríamos definir aquí lo primero. Por ejemplo, podríamos decir en el archivo de cabecera, doble punto público, siguiente, usando un botón de doble enlace, patrón de doble enlace. Entonces, ¿qué es esto? Estamos utilizando el constructor desde el botón botón de clase base. Vamos a abrirlo una vez más. Y como se puede ver, este es nuestro constructor principal, que se nos invoca en el archivo principal aquí. Y esto se utilizará ahora en también nuestro faro de botón de clase relacionado con dev. Y estamos haciendo aquí y segunda función, se llama White check fate. Esto también podríamos crear aquí en nuestro botón, en nuestro archivo CPP. Y creo que tú también conoces este. Botón, faro, punto doble, punto doble, check fate viene de mis códigos de fantasía. Hasta ahora tan bueno. Una pequeña adaptación que tenemos que hacer en nuestro archivo principal. Porque ahora ya no queremos usar la clase de botón porque es, están relacionados en nuestro faro de botón. Por lo tanto, cambiamos aquí. Botón tenía faro. Podemos usar el nombre como el mismo. Y también podemos ver aquí el constructor, pero ¿por qué obtenemos un error? Tenemos que cambiar el archivo de cabecera. Y esto es faro. Y ahora todo debería funcionar como antes. Sólo dale un cheque. Y creo que entonces estamos bien para ir. Siguiente. Vamos a comprobar que sí, en el siguiente video. Ahora vamos a implementar la función a ellos. Compruebe fade, y también estoy quebrado un poco más con la clase. 45. Función Mantén presionado el botón: Ahora queremos agregar alguna función aquí en nuestra clase relacionada con datos. Y queremos ver si el botón está presionado más de x segundos, por ejemplo. Lo bueno es ahora que tenemos exceso de todas las cosas en nuestra clase base, como por ejemplo, las variables y también todas las cosas que se invocan en nuestro CPP principal en el bucle, estamos comprobando aquí, botón encendido, botón de verificación. Eso significa que aquí en el botón check. Estoy por aquí y un botón de verificación que chequeo año la lectura digital ya y no se guardará en el estado. Y tengo x también está en la clase relacionada con lácteos del estado. Por lo tanto, puedo comprobar aquí si el estado es bajo, eso significa que es el botón Presionado y también el botón Millis menos. Milisegundos. Mayor a 2000s. Quiero decir, dos segundos, 2 mil milisegundos. Entonces me gustaría imprimir en línea de impresión en serie presionada más de dos segundos, y me heredan. Entonces vamos a ver. Eso se ve bien hasta ahora. Y tenemos que implementar la fe de cheques también en nuestro principal CPP. CPP principal, o ya está ahí. Entonces significa botón, ese es el objeto dot jag destino. Y ahora la función será invocada en cada bucle, estamos obteniendo los estados necesarios y también el botón hace clic desde la clase base que estamos llegando aquí porque el buttonClicked milisegundos. Y también aquí, estamos viendo que aquí están asignadas las variables y las usamos en nuestra clase clasificada láctea para comprobar si el botón está presionado más de dos segundos. Por lo tanto, estamos subiendo ahora el boceto para ver si tenemos las funciones antiguas, el corto y el clic largo. Y ahora con adicional en nuestra clase específica donde programamos aquí con mucho detalle en el faro patrón. Entonces Kimara, ceremonia hecha. Y no clic corto, Launch, click. Pulsando el botón después de dos segundos. Aquí se puede ver que estoy presionado más de dos segundos, 12. Aquí vamos. Una vez más que podemos ver ese también. Y estoy de pecho bulto en segundos. Sí. Ahí vamos. Y en el siguiente video, estamos implementando el componente de desvanecimiento. 46. Agrega función de desvanecimiento: Por lo que ahora queremos implementar la lógica. Ahí es cuando estamos presionando y manteniendo pulsado el botón, se debe aumentar el LED. Y normalmente lo hacemos con un bucle for, la caída de ser incrementado y variable, y estamos pasando el nivel de incrementos a una escritura analógica por ejemplo. Y así se debe aumentar automáticamente cada bucle. Pero no es así como se supone que sea porque queremos, no de forma automática. Queremos mantener pulsada la llave. Y cuando lo liberamos, se debe detener el brillo un aumento. Y por lo tanto tenemos que hacer aquí un enfoque ligeramente diferente. Por lo que tenemos aquí también algunos requisitos y retos que debemos conquistar. Entonces a primera hora, diría analógico ¿verdad? Led verde. Y podríamos decir, por ejemplo, encenderlo. Este es un paso lo que queremos implementar. Queremos incrementarlo de 0 a 255, por ejemplo, este es el nivel máximo de brillo. El primer reto será, no estamos recibiendo el LED adecuado ni nuestra variable. Por supuesto podríamos decir sólo un valor PIN. Pero el GPO es, se podría hacer. Pero lo que me gustaría mostrarles es que también podemos acceder a sus variables fuera de este archivo, que voy de vuelta al CPP principal y puedo ver aquí nuestras, um, dos variables. ¿ Y qué pasa si, cuando los ponemos por encima de la declaración de inclusión? Porque aquí está incluirlo. El compilador va de arriba a abajo y tal vez pueda acceder a ellos. Ahí. Led verde saltando de nuevo a patrón faro solo para ver la firma escribiendo. ¿ Eso es correcto? Escrito, sí, pero puedo ver que no está definido. Entonces siguiente aproximación, podríamos copiar las declaraciones LED dentro del faro, pero luego tenemos una doble declaración. Eso tampoco es lo que queremos. Pero podríamos decir aquí, compilar externa ahora sabe, bien, en algún lugar fuera de este archivo, se debe definir el LED leído en verde LED y accedo a él. Y como se puede ver ahora, esto funcionará. siguiente paso es cómo podríamos aumentar el nivel del análogo, escribir el nivel de brillo. Y por lo tanto, me gustaría usar aquí y entero estático, se llama count por ejemplo. Y lo aumentamos en cada bucle, el valor de la variable, por lo que podemos agregar la variable conteo. Y por lo que estamos en el bucle, romper suavemente dominio. Para que puedan ver aquí estamos aquí. La función se invoca en el bucle principal. Y esto aumentará nuestro nivel en cada bucle. Pero y si cuando llegamos a doscientos cincuenta, doscientos cincuenta y cinco a 70 años, esta no es una buena manera porque entonces tenemos un desbordamiento. Por lo tanto, estamos restableciendo nuestra variable de conteo cuando alcanza mayor a 255. Y entonces podemos decir que el recuento es 0, así que estamos restableciendo todo el asunto. Y también podemos decir analógicoEscribir suero, por lo que lo apagamos. Y para una correcta visualización, estamos tomando una apuesta por el retraso de las camas. Pero entonces esto sólo para propósito de entrenamiento y también que podemos ver aquí y más. El efecto que también me gustaría implementar en breve retraso de 20 milisegundos para que no solo esté golpeando el 255, va un poco más lento hasta nuestro valor deseado. De acuerdo, hasta ahora tan bueno. ¿ Qué necesitamos más? Creo que esto es todo. Estática, ¿de acuerdo? Estática significa que se establecerá en la primera, cuando lo invoquemos, es la primera vez, se definirá aquí. Entonces tiene, ahora el valor uno al valor de un bucle Next. Esto ya no se invocará porque solo se invoca la fila predeterminada por primera vez. Ahora esta cuenta tiene el valor 1234. Esta es una forma muy conveniente de trabajar con justo dentro de este alcance desde el botón blanco, promontorio comprobar el destino. Y no tenemos que declarar de manera global el conteo int estático. Entonces vamos a ver si tenemos error de compilación y carne. Nuestro ESP. Se ve bien, pero no lo estamos enjuagando. Porque nos gustaría añadir alguna línea de impresión en serie más. Y me gustaría publicar una variable de conteo para que veamos lo que está pasando aquí. Y para el regalo de lectura, al contrario, más espacio aquí, haga clic con el botón derecho Formato documento. Hasta ahora tan bueno. Por lo que ahora saltando de nuevo al archivo principal porque tenemos que adaptar tu también algo porque Aquí estamos trabajando con derechos digitales. Pero el desvanecimiento se implementará con analógicoEscribir y mezclar, analógico y digital, ¿verdad? Nunca es una buena idea. Por lo que sugeriría también adaptamos una función para que también podamos desvanecerse, pero también haga clic en apagar y vuelva a encender el LED verde. Por ello, tenemos que implementar también en poca función con y bandera. Entonces en el archivo principal que estamos configurando aquí en el caso uno escribe LED verde es por ejemplo, Sarah. Y queremos encenderlo con 255. Y podríamos decir aquí, necesitamos N polar estático. ¿ Está encendido o está apagado? Y si uno, entonces podríamos decir, lo estamos apagando. Y decimos que está encendido. Este LED encendido cuando está encendido de regreso apagado. Así es el LED encendido es falso para el siguiente. De lo contrario. Cuando es falso, entonces lo encendemos simple como es 255. Y es verdad. Y también quiero tener esta impresión serial que se pueda ver lo que estamos haciendo aquí. Clip corto de CPP principal, haga clic con el botón derecho Formato documento. Una vez más, lo que estamos haciendo aquí, somos miedo y piscina estática. Es, el primer comienzo se definirá como falso cuando llegue el clic. Porque esta es nuestra función de botón Check la cual entrega también una. Cuando entramos aquí, uno de vuelta, El primer paso es, lo encendimos. Led es cierto. En un siguiente clic, LED. Led on es cierto. Entonces lo apagaremos y así sucesivamente y así sucesivamente. Y esta es una forma conveniente de cómo trabajamos con flex. Por lo que una vez más, lo revisamos y luego podemos subir nuestro archivo. Aquí tenemos nuestro archivo principal. Haga clic en él, está asegurado, haga clic en algún clic corto. Entonces cuando estoy también puede sostenerlo un poco y haciendo clic en más de dos segundos, aumentará el desvanecimiento. Estoy haciendo clic en el hombro, clic, haciendo clic una vez más. Y puedo ver que hay un doble mensaje porque he implementado dos veces. Esta es la razón por la que se duplica. Pero sin embargo, ahora cuando estoy empezando a desvanecerse de nuevo, debería iniciarse por 141, manteniendo presionado dos segundos. Y como se puede ver, ahora, será continuo por 141, hago clic una vez más. Está en pleno brillo. Una vez más, está apagado. Al hacer clic en menos de dos segundos. Esta está encendida. Corto, uno, corto. Entonces EN mantener los pechos para que nos ciclamos una vez habitación hasta 2552 segundos de retraso, y se ha ido, y se ha ido. Muy bien. Esto es lo que queremos hasta ahora. Eso significa que nuestra función completa se implementa encendido y apagado perfectamente. Y en el siguiente video, tengo algunas tareas adicionales para ti. 47. Clase de implementación de tareas adicionales: Ahora tengo una tarea especial para ti. Nos gustaría implementar la clase LED, que nos crean también en este curso online e implementado en este proyecto. Y sería bueno cuando nosotros, por ejemplo, en el corto clic, configuramos la función de pulso. Por lo que un solo clic está posando y otro clic pulsará apagado. Y en el largo clic, me gustaría encender el LED rojo. Y después, por ejemplo, cinco segundos, el LED debe apagarse. Este podría ser un buen caso, por ejemplo, para alguna puerta de garaje por ejemplo. Entonces cuando queremos abrirla, el letrero o el LED carnará. Entonces eso significa precaución. Ahí está la puerta se está abriendo y cuando nos vamos, hacemos clic una vez más la puerta y la luz se apagará o se apagará después de seis segundos. Por lo que esto podría hacerse con la clase LED, pero tenemos que adaptar aquí el archivo principal de CPP, esta será la tarea. Hay muchos tipos diferentes de enfoques y soluciones. En el siguiente video, podemos resumir cómo se acercó y cómo lo implementé. 48. Posible solución: Así que empecemos con la implementación o una posible solución agregando los dos LED a nuestro espacio de trabajo. Por lo que sólo arrastra y suelta los archivos de clase del LED, que fueron creados en las clases anteriores. Y uno de los primeros pasos estaban siendo incluirlo es punto h. Y luego en el siguiente paso podríamos decir implementar o iniciar el objeto. Entonces tecleemos esto en mayúsculas. Dejemos leer esto. Se puede ver que aquí hay una diferencia con 25 y tenemos LED verde con 12. Entonces también para fines de visualización, se puede ver que estamos guardando aquí las variables porque las variables se utilizarán con la función de desvanecimiento. Y esa función es demasiado corta y el clic largo, estamos usando el objeto. Por lo que podemos usar objetos y las variables o los pines GPIO ambos al mismo tiempo. Pero por supuesto en y arquitectura de bienes, solo usarías un tipo de enfoque. Pero me gustaría mostrarles que ambos son posibles. Entonces yendo un poco abajo a nuestro archivo principal, el explorador de archivos, estamos cerrando, y ahí vamos. Entonces en el archivo principal, ahora podemos escuchar adeptos, éste porque estamos abajo a querer agregar aquí esta función. Queremos implementar la mala función estatal. Y vas a hacer, y recuerda, podemos decir puntos verdes LED, cruzada. Y necesitamos y tiempo, por ejemplo, 20 milisegundos. Pero esta función debe invocarse en cada bucle. Y aquí sólo estamos comprobando si se presiona el botón, para que eso no funcione. Por ello, tenemos que trabajar con algunas banderas para que también podamos acceder a funcionar fuera de esta construcción de conmutadores. Y por lo tanto, como lo hice antes, me gustaría usar éste. Entonces como dije, el conteo de enteros estáticos es 0. ¿ Qué hago con ellos? Si el recuento módulo dos es Sarah, por ejemplo, diría que proceda en falso. Y seguir adelante no está definido todavía. Así que voy a subir un poco y decir que pulsate encendido es falso. Entonces el primer comienzo, lo puse a falso. Entonces yendo un poco oscuro. De lo contrario, por ejemplo, lo pone, es cierto. Y también podríamos decir aquí, decir verdad y LED, punto verde se apaga. Y es cierto, por supuesto cierto porque hemos usado analógico off and on para el efecto de desvanecimiento en las ganancias. Esa es la razón por la que reducir aquí se apaga cierto, pero echo de menos desgarro mezclado. Esto debería ser cierto y esto debe ser falso. ¿ Qué he implementado aquí? Esta variable se asignará en el primer bucle. Entonces modelador siempre divide, nos da el resto de la división. Por lo que dividido por dos no tiene descanso. Y esto es cierto, por lo que va a seguir. Entonces uno dividido por dos. Hay algunos registros ahora, nulo, que es la división, y por lo tanto salta a lo demás. Entonces cada vez que estoy presionando aquí, son botón. También tengo que aumentar el valor de la variable. Esta es solo una función asegurada donde podemos cambiar. Y yo diría en Fleck. Por lo que al hacer clic una vez para marcar, se volverá de verdad. Segunda vez, se volverá a falso. Y ahora fuera de la estructura del switch host, podría decir si procede, si la bandera lo pone en su verdadero, entonces me gustaría decirlo porque proceder es entonces en cada, en cada bucle a través y también se invocará esta función. Y así el LED podría encender y apagar. Esto es lo que queremos probar ahora porque hemos hecho muchos cambios. Y así podemos estar seguros de que estos cambios son. Configura correctamente, por lo tanto, apaga la cámara. Ahora veamos. Si hacemos clic una vez. Se encenderá la función pulsada porque aquí en la primera variable columna 0, esa variable como uno y el bucle, la sentencia if siempre es verdadera y la función preestablecida puede funcionar correctamente . Una vez más, hago clic en off. Entonces la variable de conteo estático se mantendrá en Uno, Uno modal o dos no es 0 y así se apaga y el depósito encendido se girará o a falso uno de nuevo. Y puedo hacer click, click, click, click, guardando los dos segundos y puedo desvanecerlo. Desvanecimiento. Y desvanecerse está pasando. Haciendo clic una vez de nuevo. Y el procedimiento, trabajamos. Pero esta no es toda la función. La segunda parte fue que queríamos implementar yum y encender y apagar automáticamente. Por lo tanto, podríamos decir LED rojo, encender. Y lo hacemos con derechos digitales. Esto está bien. Y tal vez sepan, tenemos miedo y funcionamiento en LET CPP, y se llama apagar después del retraso. Pero aquí tenemos que adaptarnos un poco porque en esta función, estoy, déjame ver dónde está. Por lo que estamos en esta función sólo funcionará una vez en su momento. Por lo tanto, tenemos que decir el medio anterior se apaga, es Millis. Entonces funcionará de una manera adecuada. Cada vez que se invocará. Vuelve a la CPP principal. Y también esta función debe ser accesible fuera de la construcción del interruptor. Y por lo tanto decimos rata LED apagada tras retraso, por ejemplo, 5 mil fuerza, o digamos 2500 y false porque estamos usando LED digital, ¿verdad? Una vez más, estamos subiendo todo el boceto. Por lo que ahora podemos ver podemos apagar el proceder. Por supuesto, también podemos encender, apagar el retraso. Una vez más, hacer un encendido y apagado. Y también el desvanecimiento debe funcionar correctamente como vimos antes. Una vez más click y será pulsante. Esto es lo que fuimos creados para cumplir con las tareas. Y ahora estamos al final de este proyecto y hemos implementado con éxito una clase. Están relacionados con clase y además implementaron otra clase para utilizarla en nuestro proyecto principal. 49. Cableado: Comencemos con la visión general del hardware y la parte del rodamiento. Como se puede ver, es muy, muy fácil. Con ESP 325 LEDs. El LED está conectado al suelo, a una tabla de pan. Y en el ánodo y el lado más, tenemos una resistencia. Y luego vamos al GPI o desde el ESP 32, en mi caso, cinco LEDs y estoy empezando a más barato o a hundirme. Son 19, me mostrarán en 1918. Después tenemos GPL 51615 en el lado superior de una para varios modelos como equipo canino y G9. Y también puedes usar solo tres de ellos. Por ejemplo, más y menos, estamos conectando a la tabla de pan. Y cada una de las celdas tiene algún pin de datos. Y estamos conectando el pin de datos a GPIO encendido por ejemplo, 14, veintisiete, veinticinco. Cuando estés en modo de desarrollo, te recomendaría saltar la parte V5 a la tabla de pan porque la USP se alimenta a través de la USP. Y no quieres tener dos tipos diferentes de opciones. Pero es importante que conectes el suelo a la tabla de pan porque los motivos, el potencial debe ser el mismo. Después cuando vayas quieres tener todo el juego al revés no están conectados a tu PC. Entonces por supuesto, necesitas conectarte para que los ESPs también alimenten. Pero estoy alimentando las paredes celulares con un USB externo después con un conector de fuente de alimentación externa. Y quiero, estoy conectado con ellos. Adaptador de corriente 12º mundo difieren aquí y regulador de voltaje, que está configurado hasta cinco voltios con este potenciómetro dentro de metro digital, puedo medir aquí a cinco mundo cuando estoy desplazando hacia abajo o arriba. Entonces estoy conectando plus, menos a la tabla de pan. Y ahora tengo cinco voltios en la tabla de pan. El servicio será suministrado. Somos una fuente de alimentación externa. Esto es todas las cosas que necesitaban. Los LEDs tienen una resistencia, como discutimos antes en la clase LED, y conectados a las partes menos de la tabla de pan. Como se puede ver, cosas muy, muy básicas. Está más en el lado del software. Y ahora podemos pasar al código fuente. 50. Creación de archivos de clase: Estamos comenzando en este proyecto creando un nuevo archivo de proyecto. Ya lo he hecho en la plataforma. Cualquier dato que estamos agregando aquí nuestras plantillas básicas, por ejemplo, los puertos de carga de velocidad del monitor, puerto de monitor. Y siempre estoy incluir la biblioteca AnalogWrite. Guarda éste. Y también en el CPP principal, inicia la reescritura del 0. Y se llama tijera de papel de roca y tal vez tener alguna cuarta variante. Me estoy tomando el pozo, y así es como llamo ahora mis clasifica. Es un acrónimo, es RPS. Nosotros, WE New File, R dot h. Así entonces también creando aquí y CPP Archivo y Nuevo Archivo, CPP que a la derecha. Y estamos empezando por el archivo de cabecera. El archivo de cabecera siempre tiene la misma estructura. Entonces se llama clase porque entonces estamos haciendo en punto y coma. La siguiente parte será incluyendo el arduino dot h. e incluyen guardias, incluyen guardias I, f y f r p w subyacente h i. entonces se llama define RP SW. Y al final estamos viendo, y si se ve bien hasta ahora, entonces estamos cambiando al archivo CPP e incluyendo aquí el borde de hoy Arduino. Y también estamos incluyendo el RPS W, H. Copio éste, cambiando dos CPP principales. Y también estoy incluyendo aquí archivo de encabezado. Por lo que ahora hemos configurado el programa básico y también hemos creado los archivos de clase. 51. Archivo de Header: Ahora queremos definir todas las cosas que entran en el archivo de cabecera. Si bien cuando no lo estamos necesitando en este momento, me gustaría darles una visión general de lo que necesitamos. Entonces, antes que nada, soy euro. Mi clase se ha ido verso la clase, clase LPS W, y privados. En la sección privada, no tenemos cadena. Se llama solución. Y tenemos aquí y matriz bidimensional. Entonces en el archivo de solución, tenemos ahora cuatro filas y estos surcos deben inicializarse con corchetes rizados. Y estamos poniendo aquí en defecto. La primera entrada es por ejemplo, tijeras, piedra, papel. Entonces tengo en cada fila, 43 entradas significa coma tras piedra. Por lo que puedo decir ahora, la primera entrada de revisará la primera entrada de cada una de las líneas si i, o será elegida por mí. Entonces eso significa que si elijo tijeras, entonces la siguiente entrada viene el papel, porque las tijeras golpean al papel. Pero nada más. Piedra y cuando estoy eligiendo piedras, piedra será tijeras, beats tijeras, papel será de piedra y estaba acelerando tijeras y este donante. Entonces, ¿qué reglas? Porque los ciudadanos del mundo no se sincronizan. El papel flotará sobre el agua. Y el papel cubrirá la piedra. Piedra aplastará tijeras. Tijeras cortarán papel. Estas son las reglas en el formato básico. Por supuesto, puedes adaptarte A muchas, muchas variaciones para el comercio electrónico, por ejemplo, con mono, etc, entonces puedes agregar más filas. Y mi lógica de juego es ahora lo que estamos implementando más adelante. Elijo el primero, por ejemplo, papel por el que iteré. Y el papel puede vencer a la piedra y peor. Y luego veo la piedra inferior o la riqueza, luego gano porque he elegido papel. Si el bot no tiene piedra y no pozos, entonces he perdido porque sólo puedo ganar con papel. Y esta es la lógica del juego hasta ahora. El primero es lo que elijo, y luego veo lo que hay en la segunda parte. Y entonces puedo decir, si tengo uno o no, entonces vamos a seguir con la struct. Struct por ejemplo, puntuaciones. Y en esta estructura, voy a poner en n partido de cadena y una partitura entera. Lo usaremos más adelante. Y también tendrá aquí en puntaje anterior. Haga clic derecho en Formato de documento. Entonces público doble punto. Aquí, estamos definiendo una enum que los estados no lo harán. ¿ Por qué hacemos eso en público? Porque queremos utilizar los estados en el CPP principal. Queremos comprobar si ahora estamos jugando Estados, si estamos esperando la entrada del usuario, por ejemplo un sitio web, o estamos al final y entonces sus resultados deben ser impresos. Entonces también estoy decir cadena de entrada elegida por ejemplo. Y estoy escribiendo en una matriz y luego tenemos tijeras, piedra, papel. Bueno, y por supuesto que también podríamos usar aquí y bajar. Pero me gustaría mantenerlo sencillo. Yo soy, soy, soy he elegido insumo. Y después podemos rellenar aquí y número aleatorio, y está hecho. Entonces soy puntajes, anote tres. Entonces lo que es puntuaciones del curso es ahora nuestra estructura e iniciamos esto. Y ahora tenemos aquí una matriz de tres puntuaciones. Estas tres puntuaciones que estamos configurando, por ejemplo. Entonces uno. Y el marcador es 0. Y entonces, vale, entonces no lo uso, su núcleo, diría partitura de juego, uno. Copiar. Entonces el segundo podemos decir perdido. Y el cirujano debe ser, por ejemplo, un apretado dibujado como le gustaba. Ojos apretados. Hasta ahora, tan bueno. Como se puede ver. El primero es la cadena, la segunda es el entero. Esta es una matriz, y al final necesitamos aquí punto y coma. Entonces lo siguiente será blanco. Todos los LEDs apagados. Blanco. Led encendido. O podríamos decir girar todos los LEDs. Aquí vemos una caja de camello, de color blanco. Consulta, jugabilidad y verifica el uso. Cuando dos parámetros de entrada, cadena usa una cadena, pero un juego de reset amplio. Esto es todo lo que necesitamos para este proyecto. Y ahora ya hemos implementado todas las cosas de cabecera que nos necesitan en la lógica de juego. 52. Primer modo de juego: En este video ahora comenzamos con definir nuestro primer algoritmo de juego. Y por lo tanto cambiamos al RP como w dot cpp, estamos declarando ancho p.sit, W doble bond, doble bond, Check, use un viento. Esta será nuestra función principal la cual nos comprobará nuestra sección de juego perdido o sorteo. Entonces es cadena de usuario. Y esta función será invocada en nuestro main.cpp, cada paso aquí, nuestra selección y la selección de bot. Entonces podemos decir si la entrada del usuario es igual al bot, entonces es lo que diseñamos. Está en estampado plateado apretado. Uno. De lo contrario. Podríamos decir. Entonces, ahora la lógica, lo que hemos definido justo antes de que llegue ahora al juego, eso significa cuatro. Decimos aquí entero igual a 0, entero menos que foro, porque nuestra área de solución tiene la forma de parámetro. Y ahora estamos viendo aquí si soluciones, esto es soluciones. Definyo esto con S porque hay soluciones plural brazo, año 0. Esto es usuario. Entonces cuando estoy eligiendo tijeras, entonces va a iterar a través y comprobará si los primeros cuatro, si el primer elemento está aquí, tijeras, cuando es, entonces continúa. Entonces decimos, si las soluciones E, pero no la primera, la segunda se compra o soluciones. Necesitamos un poco más de espacio. Uno a este punto, entonces ¿qué se hace? Tenemos uno. De lo contrario. Hemos perdido. ¿ Esto podemos imprimir? Después revisamos una vez más lo que hemos hecho aquí. Y podríamos decir que el euro perdió. Entonces, una vez más, la lógica que iteramos a través del juego a, a través de las soluciones. Aquí estamos. Entonces, por ejemplo, si estoy eligiendo papel, la primera zona, no lo haremos. El primero si no pasará porque el suero de solución, suero es tijeras, 10 es piedra a 0 es papel, luego más grande. Comprobando la siguiente solución. Si el bot tiene aquí, piedra, éste, todos los botones pozos, entonces tengo uno elseif perdido. Y ese es el algoritmo fácil para nuestra jugabilidad. Así que vamos a probarlo. Vamos a sumar nuestro archivo principal y TR, iniciamos nuestro nuevo objeto. Y el objeto es el nombre de la clase es RPS w y yo diría que el juego es RP como nosotros w, pero no con tal nombre w2. Y luego dentro de la configuración pude ver punto de juego comprobar usuario cuándo. Y diré por x primer ejemplo, papel, papel. Y el bot tendrá piedra. Entonces tengo uno porque el papel cubrirá piedra. Así que vamos a probarlo. Solo revisa aquí el compilador. Entonces, mientras tanto, conecto mi USB a la computadora, cargándolo. Entonces veremos si tenemos razón. Entonces reinicie. Y como se puede ver con uno, porque papel vamos a cubrir aquí esta cúpula. Entonces siguiente ejemplo, cuando estamos perdiendo, por ejemplo, tomamos tijeras y el bot se llevará a Welles una vez más, subir todo el asunto. Y ahora las tijeras disparan perdidas contra las soldaduras. Así que vamos a ver en segundo plano aquí menos varios motores porque al inicio están tomando la posición encendido, así que perdió su verdadero. Y el último juego, lo que nos gustaría comprobar si tenemos papel y también papel que todo el juego debe parar con impresión en serie apretado porque la entrada es la misma y duradera debe ser comprobado. Veamos si esta función va a ser correcta. Entonces hemos configurado con éxito nuestros algoritmos de juego hasta ahora. Sí. ¿ Estamos bien? Por lo que en la siguiente parte, cubriremos un poco más en detalle. El algoritmo. 53. Modo de juego en bucle: Ahora vamos a usar el objeto un poco más. Y por lo tanto queremos deshacernos de la impresión 0 aquí. Y queremos usar la puntuación de juego central del juego. Pero me gustaría usarlo con minúsculas al principio. Así marcador de juego. Y ahora queremos tener un índice. Por ejemplo, tenemos su apretado es este segundo índice 01 segundos. Y ahora con algún punto, ya es un cofre yo. Tenemos que identificar aquí marcador o partido. Y me gustaría tener que anotar. Y ahora plus es igual uno porque queremos tener una adición. Para agregar aquí para resumir la función, suma con una, misma, misma pero diferente. Tenemos aquí para indexar 0 y estamos en el último, tenemos el índice uno. Un poco más objeto orientados porque ahora anotamos, ¿estamos seguros este curso en nuestro marcador de juego? Entonces veamos, cambia al CPP principal para obtener todo el potencial aquí. Lo que tenemos. Ahora, queremos ir aquí al bucle y estamos haciendo aquí y los malos retrasados solo por propósito de entrenamiento porque después nos estamos librando de ellos. ¿ De acuerdo? Así que una vez ahora, imprime los detalles para que podamos usar una impresión serial f. Y de manera realmente conveniente cómo podríamos agregar texto y variables. Entonces, por ejemplo, podríamos decir uno, perdido y apretado. Y lo que podemos hacer ahora es que podemos montar aquí con una coma, la primera variable, la segunda, tercera muy habitación, haciendo un salto de línea para que tengamos aquí un poco más de espacio modelo Merrill. Y ahora cómo podríamos acceder ahora al marcador de juego con RPS W en potente marcador de juego. No batir. El juego es nuestro nombre del objeto, juego, juegos colon. Y luego podríamos decir, queremos tener el primer índice 1, puntaje de puntos, nombre de clase, luego nombre de miembro público, y el índice. Entonces esto es lo que estamos usando también para el último, pero fue el primer índice. Y el último es el segundo índice, pero no hay coma al final. Doble coma, también. El marcador de posición para eso será el y también el último. Se ve muy bien. Para los primeros imprimidos f, tiene que no ser impreso. Y ahora vamos a revisar si tenemos dentro de la derecha. Y se ve bien, pero queremos escuchar un poco más flexible, un poco más aleatorio. Por lo tanto, diría que hará que su entrada de usuario es que soy entradas de usuario. Queremos acceder a nuestros insumos elegidos. Por lo que estamos diciendo aquí de nuevo, puntos elegidos, entrada elegida. Y podría decir, por ejemplo, dos. Y me va a devolver, o 10, o 1012 se imprimirá hacia atrás. Quiero imprimir también esta entrada de usuario de arte de línea en, al final de la cadena aquí, también quiero agregar un salto de línea. Así slash n para salto de línea. Pero aquí, no hay ninguna función aleatoria dentro. Entonces, por lo tanto, sugeriría que estemos escribiendo al azar. Y se necesitan dos cosas para empezar, punto de partida y el último punto. Pero el último número debe ser exclusivo. Por lo que todavía tenemos 123 son lo que necesitamos. Por lo tanto, tenemos una función aleatoria que nos da, ¿deberíamos incluir también aquí la entrada del usuario? Y esta función aleatoria pone en ayuda no papel ni en la riqueza. Y al papel para el, para el bot se fijará fijo para que podamos revisarlo después. Luego conecta el USB a tu computadora. Puede escuchar mis motores paso a paso en el fondo porque ya está conectado, entonces verá si tenemos razón o no. Entonces reinicie y bueno, Scott perdió contra el papel. Entonces, ¿dónde estamos? ¿ Significa aquí? Paper stone fue una vez más, tengo que reiniciar. Piedra, piedra, piedra, gente perdió piedra, papel, perdido. Perdido. Papel. El papel es mareas. Dura piedra, piedra perdida. Tijeras, una contra bomba de tubería. Estoy perdido contra el papel porque el papel está flotando. Piedra contra paga. Fue, y como se puede ver, una vez más, estamos empezando todo de nuevo para que pueda verlo dice uno, papel, uno contra el papel. Nuestro papel debe estar cansado. Css, piedra perdió riqueza uno. Sí, entonces funciona. Se puede ver la puntuación del juego se guardará en el objeto. Y tenemos aquí una forma un poco más flexible. Y también implementamos aquí y función aleatoria para que esté un poco más picante ahí. Primero, en el primer campo. 54. Crear un sitio web: Es hora de crear el sitio web. Por lo tanto, vamos a nuestra carpeta fuente, haga clic derecho sobre ella. Nueva carpeta y estoy creando aquí y carpeta de datos, tiene que ser los datos de nombre para que posteriormente podamos subir toda la fase a nuestro sistema. Después copio y pego aquí los archivos de la plataforma. Porque estamos necesitando aquí el jQuery, por ejemplo, ingrese estilo CSS, y haga clic derecho en él nuevo archivo, y estamos creando un índice HTML. Ahora estoy copiando y pegando un poco porque son cosas más generales que hacer. Pero estamos pasando por cada línea. Lo primero que estamos siendo, estamos empezando con HTML. Entonces muchas veces teníamos un año. Aquí. Podríamos decir, por ejemplo, roca, papel, tijeras. Peor. Aquí hay algunas cosas que también podemos abrir el sitio web. Para dispositivos móviles. Hemos hecho referencia a un estilo y datos de fila de Jake que se incluyeron justo antes. Entonces estamos empezando por la parte del cuerpo, cuerpo. Y podemos cerrar el HTML. Dentro del cuerpo. Estamos pegando aquí el titular podría ser el mismo que el título. Entonces tenemos aquí y contenido de clase. Entonces lo estamos cerrando. Dentro de este contenido. Se visualizará el sitio web principal y tenemos aquí y otros diff. Por lo que necesitamos todos los divs para que todo esté alineado muy bien. Puedes seguir esto a lo largo en el style.css. Se puede ver lo que harán las cajas de clase. Entonces el siguiente, para que realmente tengamos todo alineado a. Es impresionante div. Y dentro de la caja, no hay sombra. Tengo aquí y selecciono el Seleccionar. Yo diría, hacemos a salvo todas las cosas. Entonces vamos a entrar en nuestra carpeta de proyectos. Entonces esto es todo rock paper scissor carpeta fuente de datos. Haga doble clic en el índice HTML. ¿ Y dónde está? Aquí está. Aquí está el sitio web hasta el momento. Papel de roca, tijeras, juego. Y aquí tengo mi selección. Y luego voy a tijeras, piedra, papel, riqueza. Y también el id debe nombrarse como el mismo. Tijeras, papel de piedra. Peor. Bien, refresque la página. Ahora tenemos cosas nuevas. Hasta ahora tan bueno. Lo siguiente será, por ejemplo, podríamos decir salto de línea, salto de línea. Que tenemos un poco más de espacio aquí cerca de las muertes después de las cajas. Déjame ver. Después de las casillas, rellenamos aquí un nuevo cobertizo de cuaderno y se llama, por ejemplo, enviar entrada. Y esto es necesario que tengamos aquí una función onclick. Vengo a ella más tarde , juego o juego. Entonces esto es una patente. ¿ Qué hemos hecho ahora? Hemos hecho y botones. Entonces cuando elegimos después aquí y selección, entonces podemos invocar aquí Y función, que pasamos los datos a nuestro ESP 32. Entonces eso se ve, se ve muy bien. Después de la def principal, después del contenido, agregaré en hertz y subrayaré aerosoles de subrayado. Y estoy agregando aquí un nuevo div y se llama def statistic por ejemplo. Entonces esta estadística que estamos publicando aquí, la estadística de clase de resultados tiene que ser el nombre porque está definido en el estilo CSS, por lo que puedo cambiar el nombre aquí. De lo contrario tengo que cambiarlo también los archivos CSS. Y aquí no tengo mesa. Esta mesa se llenará posteriormente con el evento del lado del servidor. La mesa ha tenido a alguien con líneas y filas. Y la idea es, por ejemplo, este curso que pudiera comprobar el cambio. Y estos no son el resultado de Duran en H3. Una vez más, refresque, y este es ahora nuestro sitio web perfectamente respondido hasta el momento, tan bueno. Al final, sugeriría que también incluyamos tu JavaScript no en un nuevo archivo. Yo diría que es bastante bueno cuando todos estamos poniendo aquí en un solo guión. Entonces decimos función, ¿cómo se llama? Se llama Enviar get. En esta función, pasaremos datos a nuestro ESP 32. Entonces, hasta ahora hemos creado un sitio web. Entonces en el siguiente paso, discutiremos cómo podemos poner una conexión WiFi y cómo podemos llegar a los datos a nuestro ESP 32. 55. Accede al sitio web a través de ESP32: Ahora es el momento de que el USB 32, lo conectemos a nuestro wireframe y que también podamos acceder al sitio web desde o hacia el GSP 32. En primer lugar, poco error en el video antes de que tengamos que sacar los datos de él en la jerarquía principal, en el área de carpeta principal que las fuentes, datos y fuente en la misma jerarquía eso es necesario para fines posteriores. Entonces en nuestra fuente, copiaré aquí mis credenciales en. me puedas seguir junto con el botón derecho del ratón nuevo archivo. Tus credenciales, por ejemplo, dentaduras Craig dot h. Y podemos decir aquí, por ejemplo, es constante vida char y ver SSID. Y podríamos decir que la contraseña es const char no 2442. Eso es todo. Eso es lo que necesitamos para identificarlo y definirlo. Elimino éste porque ya lo tengo aquí. En el cpp principal. Lo incluyo incluye dentaduras postizas dot h como la siguiente. Podríamos decir que necesitamos aquí un poco más de las bibliotecas externas. Por lo tanto, incluyo los siguientes. Puedes preguntarte, ¿dónde puedes conseguirlos? Puedes ponerlos en plataforma. No abro bibliotecas. Y no sé si lo hicimos antes, pero aquí se puede elegir, por ejemplo, el propio ESP y se llega a escuchar el nombre, por ejemplo, de Kevin Harrington. Y se inicia la instalación de ejemplo. Y podrás escuchar el nombre de la biblioteca. Puede copiarlo. Y como tengo aquí, pegarlo. Eso es todo lo que tenemos que hacer ahora. Guárdalo y cambia al CPP principal A antes o después del arduino dot h. Incluimos ahora todas las bibliotecas que necesitamos, esa es la y fit y H. ¿Por qué no hemos hecho y referencia y una sangre de alguna? Esa es la razón porque a y feed en H no es el núcleo de la ESP 30 al núcleo significa que hay referencias las bibliotecas es una bibliotecas integradas, diría yo y todas las demás. Tenemos que incluirlo de esta manera como lo hicimos antes. Por ejemplo, también el TCP que se necesitaban y el servidor web de arsénico ESP para la comunicación al servidor web. También se incluye escupir en el núcleo y escupir se deprecia. Eso significa que en los próximos lanzamientos pueden no ser soportados más. En cambio, se usa poco EFS. Por qué estoy usando spoofs, porque estoy usando aquí la versión USB 32 de espuma negra, 3.5, la versión de película de sangre, y la necesito por otras razones. Pero después, cuando se quiere cambiar dos pequeños EFS, solo hay algunos cambios menores y todo funciona de la misma manera. Te muestro después cómo puedes hacer eso. Entonces necesitamos escuchar este servo dot h. Eso son todas las bibliotecas que necesitamos hasta ahora. Entonces nuestro cofre que estamos haciendo cambios a la fuente Explorer, nuevo archivo, mi esposa, V dot h. ahora estamos conectando o decimos aquí, todas las funciones necesarias que necesitamos. Por ejemplo, se conectan a puntos de acceso que tenemos una conexión Wi-Fi. Aquí podemos decir conecta a Wi-Fi. Wi-fi entre SSID y contraseña. Y esto es de las credenciales dot h, Nuestras principales variables globales. Entonces esto es en procedimiento estándar. Sólo puede copiar y pegar con el botón derecho del ratón Formato documento. Aquí obtienes la conexión Wi-Fi. Si está en un bucle while, cada segundo se imprimirá y apuntará y es exitoso. Podemos imprimir aquí y dirección IP local. Si son más de 20 bucles, entonces se romperá del bucle while. Porque entonces a menudo es para que haya algo con el router por ejemplo. Entonces también sugeriría que incluyas aquí la función de procesador. Será necesario para la web. Entonces por ejemplo, si quisiéramos apagar y encender luces, etcétera para que cuando estamos transfiriendo y obtenemos parámetro, no lo usamos en este caso, pero debes implementarlo porque es necesario. También crea el objeto más adelante. ¿ Qué necesitamos para los eventos del lado del servidor? Y también creamos aquí el objeto servidor web era al puerto 80. Y entonces también deberíamos incluir aquí el arduino dot h. Y también se debe haber ido este error serial. Hasta ahora, tan bueno, mucha copia de pastas. Esto es algunas cosas generales. Estamos cambiando de nuevo al CPP principal a la parte de configuración. Porque ahora lo que queremos hacer es que queremos empezar Smith. También hay un procedimiento estándar. También podría copiarlo y pegarlo. Entonces invocamos nuestra función, o llamamos a nuestra función conecta al punto de acceso que ya definimos. Pero como se puede ver donde si eres un error, porque no estamos incluidos todavía incluye a mi esposa dot h. el siguiente punto tenemos que añadir aquí sumas funciones para el servidor web. Así que acabo de publicar en todas las cosas y luego lo pasamos línea por línea. Este se llama Server on. Servidor encendido, cuando estemos accediendo al sitio web, pasará desde nuestro sistema de archivos, el lado index.html desde Smith's. Siguiente uno. Tenemos aquí nuestro archivo CSS. Se proporcionará un archivo CSS desde el sitio web de Smith y también del Chaco, es texto JavaScript, y se proporcionará a través de espíritus con este nombre de archivo. Nombre de fichero. Para que como se pueda ver, inicia el índice medio. Y esto es necesario porque estamos almacenando los datos en el sistema de archivos a partir de derrames. Y así es como podemos acceder automáticamente desde el estilo de programa CSS y también el índice o mañana. Hasta ahora, tan bueno. Y lo que también necesitamos esto aquí en servidor comience. Una nota al margen, si quieres cambiar a poco f s más adelante, simplemente cambia la instrucción include S start. Y aquí estaba esto respetos cambias dos pequeños EFS y todo debería funcionar bien. Como con los espíritus. Después de que comience la plata. No estamos agregando nada hasta ahora. Y también recomendaría comentar el bucle porque queremos confiar para comprobar si tenemos conexión Wi-Fi estable y si podemos acceder a la página web, por lo tanto, estamos haciendo aquí y primero compilando, comprueba si todo está bien, y luego estamos subiendo esta captura en el primer lugar. Entonces veamos si todo se ve bien. Sí. Después subiendo el boceto, como podemos ver, se subirá el archivo. Ahora, si la subida es exitosa en, estamos cambiando al monótono sérico porque ahora deberíamos ver si el gas, si está conectando o no. Sí, y tenemos función inestable, pero no podemos acceder ahora a nuestra página web porque no la hemos subido hasta ahora. Entonces estamos cerca de 0. El maná es necesario porque de lo contrario bloqueamos el camino. Por lo que ahora tenemos un enfoque diferente. Si no eres Arduino EDM, te recomendaría al azar no a los terroristas. Buscar por ejemplo, ESP 32 sistema de archivos subir en. Porque es completamente diferente. Ha hecho unidad aquí en solicitud de terceros, la cual se le proporciona en el artículo. Pero no viene con el IDE de Arduino a punto O. Así que también, he experimentado con los viejos medios y con este específico subido funciona muy, muy bueno con el nuevo IDE Arduino. No puedo ver nada porque no lo uso. Así que solo ve paso a paso por todo este proceso, sube tus archivos de datos, y luego puedes seguirme junto con los otros pasos. Con el Código de Visual Studio. Es más conveniente. Cambiamos a la plataforma IO, vamos a nuestro kit para sordos. En primer lugar, podríamos limpiar todo, por ejemplo, o decimos Construir imagen del sistema de archivos. Una vez más, es necesario que todos los monitores de suero estén cerrados. De lo contrario lo bloquearíamos. Entonces podríamos decir Subir Sistema de Archivos. Y ahora todos los datos se subirán a través de la canción ESP 30. Aún no ha terminado. Espere hasta aquí aparecerá el mensaje acertado en el monitor serie sobre los datos de turno verificados, saliendo. Eso se ve muy bien. Ahora podemos encender el monitor serial para que esté conectando, una vez más, conectando a WiFi am escribiendo en la actriz. Una vez más. En mi caso, muchas veces tengo que denunciarlo para que se pueda establecer la conexión. Una vez más, ahora, se ha establecido con éxito. Y cuando estoy escribiendo la dirección IP en ellos, en mis webs, en mi navegador en el sitio web se debe abrir. Y eso es todo para el primer acercamiento que estoy, habremos creado con éxito y conexión Wi-Fi editar los datos específicos al USB 32, y tenemos acceso a nuestra página web en la ESP 32. Mucho, muy, muy buen acercamiento. Mucho estamos lo hemos hecho todo. Y luego el siguiente paso estamos implementando el algoritmo de juego a su página web. 56. Transfiere datos del sitio web a ESP32: Ahora queremos establecer la comunicación entre la ESPN y la página web. Entonces nuestro objetivo en este video, estaremos entonces cuando estemos eligiendo aquí algunas de nuestras opciones. Denuncia semanal de que este valor será pasado a nuestro ESP 32. En primer lugar, tenemos la apertura de nuestro índice HTML, y está en nuestra carpeta de datos. Y al final mismo, después de abrir una vez más, es el final que tenemos aquí una función vacía, submit consigue este Enviar get invoca cuando estemos haciendo click en este botón. Este botón transferirá o accederá a la función que debe entregarnos alguna de la opción elegida. Entonces este es el ID SSP Oswald. Y estamos accediendo a esta idea y debemos recuperar una de esta opción. Entonces, ¿cómo podemos hacer eso? Soy fan de jQuery porque es para mí más fácil de usar. Pero también puedes usar tu lenguaje JavaScript estándar. Por lo que diría que la entrada de usuario lejos es. Ahora estamos accediendo a la idea. Y la idea es con el hashtag, SSP sea Oswald. Se llama punto bien, para los más ricos y americanos minúsculas. En caso de que tengamos otros caracteres temibles, entonces imprimimos en la consola de bloqueo de entradas de usuario para más adelante para depurar proponer. Y ahora la tarea será que también transferimos este valor a la ESP y eso podemos hacer con ellos solicitud GET, ¿qué no es GET solicitud? Por ejemplo, mi página web. Y si tengo aquí, por ejemplo, en un sitio web llamado se llama arduino dot PHP. Y luego indicando con algún signo de interrogación, el nombre de la variable es William. Y esto no es, um, sí, y forma como podemos comunicarnos a través del USB con las variables GET. Eso significa que más adelante puedo llegar aquí este nombre de variable y recuperar los datos. Y esto es lo que estamos haciendo aquí con este enfoque. Por lo tanto, también estoy usando jQuery. Entonces estoy usando aquí, tú eres nuestra función arriba que no estaba bien. Eso no se suponía que fuera. Es debe codificar, función y datos. Ahí vamos. Y esa es la estructura de la misma. Y aquí no hay nada. Aquí no hay nada que hacer por nosotros porque sólo queremos enviar la anomalía de datos. El USB puede enviar datos vuelta a la página web y podemos hacer aquí algo. Pero estamos usando otro enfoque porque esto no es sólo en proceso de sincronía, sino que queremos un proceso asíncrono porque posteriormente en el ESPN debería hacer todo el juego y después debería enviar de vuelta los datos. Esto es solo por enviar datos en tiempo real a nuestro ESPN. Pero debe definirse la URL. Y yo diría que get variable name se llama SSP BM. Y estoy viendo igual, y estamos sentados en la variable nombre es entrada de usuario. Por lo que el parámetro GET debe verse como esto, es, por ejemplo, Stein o robado en este caso. Y acuéstese, estamos buscando este nombre de variable y recuperando las entradas del usuario. Entonces estamos guardando en los datos. Y yo recomendaría que estamos subiendo ahora solo a la página web para que podamos ver si tenemos aquí algunas flechas. Entonces vamos a sangrar desde Iowa, subir imagen de archivo. Y detente. Veo aquí me he perdido aquí. Yo por supuesto que tengo que poner aquí para conseguir así una vez más, subirlo. Abrió una ceremonia realizada. Por lo que ya estoy conectado de lo que estoy abriendo el sitio web una vez más, refrescarlo, haga clic derecho en algún lugar aquí. Después se puede ir a inspeccionar. Estamos haciendo click en cancelar. Y ahora cuando estamos eligiendo aquí algo y pinchamos en avión, estamos consiguiendo aquí el id Eso es lo que queremos. Perfecto. Entonces lo que hemos hecho hasta ahora es que estamos obteniendo haciendo clic en el botón de reproducción, este valor del ID, no el contenido, el ID. Esta idea debería ser la misma que definimos en el, oh, ¿dónde la tenemos en el archivo de cabecera? Porque entonces podemos igualarlo. Por lo que se trata de una riqueza de papel de piedra debe ser tener el mismo ID que aquí, definido. Entonces podemos seguir más adelante en check el uso de in podría poner en los valores en esta función y tener toda nuestra lógica de juego. Entonces, pero aún no hemos terminado porque tenemos que poner aquí en el CPP principal y función que también capturará el get. Y ya lo he declarado aquí. Entonces hacemos aquí una función individual y queremos llegar aquí, están respondiendo podría ser solicitud de servidor web porque esta construcción tiene todo lo que necesitamos. En primer lugar, vamos un poco hasta la parte superior de nuestro archivo y aquí estamos creando algunas variables. En primer lugar, me gustaría hacer una entrada de usuario variable global. Y estamos definiendo aquí y prototipo de función. ¿ Cuál es el prototipo de función? Porque me gustaría hacer aquí la función de patrones de cheques, pero no por encima de la configuración cuando estoy declarando sin comentar para mostrarte lo que soy lo que quiero decir con eso. Sólo cópielo. Voy al final del expediente. Me gustaría tener aquí la función porque me da una mejor visión general. Pero aquí lo puedes ver. El cheque libras podría haber estado compilando error porque necesitamos definir en el primer lugar la función para que el compilador vaya de arriba a abajo, sabe, está bien, el se definirá, no tiene lógica, va, baja, baja, y aquí llega a la lógica. Esto es lo que hace un prototipo, por lo tanto, sin comentar para que el compilador conozca la función. Y ahora vamos a la derecha al botón y ahora lo están, los detalles entran como un parlamento de entrada que estamos usando esta solicitud que estamos obteniendo del servidor web. Y ahora podríamos decir, si las peticiones, y esto es un puntero, por lo que estamos accediendo con el error. Y aquí están toda la función implementada que están ahí. Y no debería haber ninguna función con Hesse param, no sibilancias S, S PBM, o como lo llamamos? Nosotros lo llamamos. Déjame ver. Spb por ejemplo. No obstante lo que quieres llamarlo CPP principal. Quiero capturar esto. Y si hay tal parámetro, entonces digo entradas de usuario, que estamos declarados en un ámbito global general. Entonces decimos petición que tenga parámetro. Ahora conseguimos que los padres se pongan param, SSP, PM. Y estamos diciendo, bueno, eres muy bueno hasta ahora. Ahora, me gustaría imprimirlo 0, imprimir entrada del usuario, para que podamos comprobar si nuestro derecho, vamos a ver qué dice el compilador. Cerrando todo lo abierto Hola cosas. Y cuando el compilador nos da luz verde, subimos el boceto, el sitio web ya está subido. Entonces podemos ver si no hemos establecido y las ceremonias de comunicación abiertas o recargando el sitio web. Y ahora quiero tener que apedrear. Stone está aquí. Quería hacer papel. Vale, me he perdido un salto de línea. Tijeras. Tijeras otra vez fue muy buena. Y aquí tenemos un establecer con éxito la comunicación entre el sitio web y pasarnos el valor a la ESP 32. 57. Modo de juego en dos juegos: Ahora estamos llegando a la salsa secreta de nuestro juego porque queríamos cambiar el modo de juego para que podamos detectar automáticamente si estamos esperando una entrada, si estamos en sangrado o si el juego está en la enésima y jugamos a uno. Entonces eso significa que necesito dos victorias o dos derrotas que estamos terminando el juego. Y por lo tanto, nuestros estados entran aquí al juego. Y antes que nada, tenemos que pensar ¿cuál es el primer estado? El primer estado será, estamos a la espera de entradas de los usuarios después de que iniciara la USP 32. Entonces después de que estamos configurando aquí y usamos input a través del sitio web, entonces estamos cambiando a jugar el juego. Cuando estás jugando el juego, tiene que haber en segundo plano. Comprueba si estamos al final o estamos jugando de nuevo contra el bot. Porque si alguien, si tengo una o la prueba de BOD dos veces uno, entonces estamos al final. Estamos restableciendo todo en publicar los resultados a la consola, o estamos esperando la entrada. Esto es lo que estamos deseando implementar ahora. Entonces, antes que nada, vamos a la parte de configuración. Y en la configuración, tenemos que declarar aquí, queremos esperar. Por lo que la primera declaración de nuestros estados, por lo tanto, vamos al final de la configuración. Entonces estamos escribiendo en nuestro Cloud nombre de objeto de triclinio se llama juego. Punto de juego. Estado es igual a punto de juego. Espere la entrada del usuario. Aquí tenemos un error porque aquí tenemos nuestros estados, pero los estados no están inicializados. Y por supuesto, no es una forma inusual que estemos inicializando las cosas en el archivo de cabecera, pero solo quiero un objeto de los estados. No quiero tener muchos tipos diferentes de objetos, solo un estado. Y esta la razón por la que podemos iniciarlo aquí en el archivo de cabecera, y después podemos usarlo y acceder a él. Por lo que ahora podemos escuchar en el bucle, pregunte a nuestro objeto, nuestro objeto de juego, en qué estado estamos actualmente. Y luego podemos aquí, centrándonos en el borrador por ejemplo. Entonces, ¿qué podemos hacer ahora? Cambiar el estado de punto de juego. Y en el caso del switch que estamos, estoy preguntando el siguiente caso. Entonces el juego del caso, jugando doble punto, juego de caso de ruptura, esperar a que los puntos de datos de entrada del usuario. Y tenemos el juego del Reino Unido y sin ningún descanso. Y hasta ahora hemos identificado los diferentes tipos de estados dentro y ruptura. Salta aquí atrás. Tiene que haber f. superior ahora, debe ser bueno. Sí. Entonces acuéstate, estamos revisando aquí el contenido para el caso del switch, pero actualmente estamos en el estado. Es la configuración. Estamos a la espera de la entrada del usuario. Por lo que ahora alguien está entrando en el sitio web en entradas y estamos recibiendo la entrada aquí, eliminando la impresión en serie y estamos cambiando el estado a jugar. Por lo tanto, game dot States es juego jugando. Ahora que hemos cambiado el estado en el siguiente bucle aquí, la función se saltará al juego del caso jugando. Y ahora podemos pensar ¿cuál es el siguiente paso? Ahora tenemos que usar nuestra función principal. Se llama Game check, uso de cuando entradas del usuario. Esta es nuestra variable global de los params checos. Y aquí quiero tener las entradas dentro del bucle, pero fuera del switch, definiría aquí string pot. Y la olla llega hasta aquí. Juego dot entradas elegidas. Aquí, esta es nuestra RAM deseada. Tiene cuatro entradas y queremos con un número aleatorio, x está aquí, una de ellas. Y como discutimos antes, esto es algo privado. Esa es la razón por la que lo agregamos aquí. El insumo elegido como entrada pública elegida. Entonces estamos haciendo en número aleatorio, por ejemplo, aleatorio a través cuatro y S que discutimos también antes. Este primer número es incluir inclusivo y esto es exclusivo. Entonces necesitamos aquí. 0 a tres, esa es la razón por la que tenemos que entrar a ti. Y para nuestro número, número redondo también estamos identificando. Porque necesitábamos también más tarde bajo este número. Y podemos establecer aquí en el campo URL número aleatorio. De acuerdo, hasta ahora tan bueno. Ahora la entrada del usuario proviene del sitio web se comprobará aquí desde los patrones checos. Y llegamos aquí en entradas aleatorias. Hasta ahora, tan bueno. ¿ Qué necesitamos? ¿Ahora? Acabamos de revisar los estados. Veamos usuario de chequeo de juego cuando solo estamos almacenando este curso, pero no cambiamos aquí ningún estado y lo mantenemos general. Eso significa que tenemos que escucharme Puede segunda función y comprobar el juego. Gameplay. Todavía no nos hemos definido , así que por lo tanto, estamos cambiando a nuestro expediente. Presionaré W y estamos diciendo qué RPS, WOW, punto, comprueban el juego. Y aquí, bajo la culpa del juego checo, tenemos que pensar en lo que debería pasar. Entonces alguien entra a algo y tetera. Y ahora tenemos por aquí en estados donde alguien ha ganado o perdido. Y ahora debemos identificar, ¿está el juego al final o deberíamos esperar otra entrada? Porque por ejemplo, si tengo tijeras y soy la piedra, el bot ha ganado la primera vez. Ahora tenemos que esperar. Pero lo que vamos a dibujar, qué cuando solo tenemos uno-a-uno. Por ello, comprobamos ahora si nuestra columna de juegos, por lo que si el juego anota puntos, tenemos que acceder aquí para anotar el marcador del juego. Puntaje de punto de primera entrada. Eso es lo, eso es lo que queremos, es mayor que herramienta. O si el marcador de juego con el primer puntaje mayor que dos, entonces alguien ha perdido o alguien tiene uno. Porque la primera es que tengo 12 veces o el bot tiene 12 veces. Por lo que incluso hacer después de los eventos, entonces el juego está terminado. Entonces podemos decir aquí, el estado es cuando no, wow, nadie tiene uno. Entonces el estado es, esperar las entradas del usuario. Y estamos aquí dentro de la clase. Entonces esa es la razón por la que no necesitamos un nombre de objeto y podemos identificarlo con un signo igual. Hasta ahora tan bueno. Y este juego de cheques será invocado y cada bucle cuando estemos jugando. Y por ello, me gustaría añadir unas impresiones plateadas para que tengamos una salida más agradable. Resultados. Impresión en serie. Podemos decir uno. Entonces vemos perdidos. Y podríamos decir mareas. Y estamos escribiendo en el marcador del juego, no 0. Puntaje. Perdió éste. Y esquemas CO2 está atado, así que nos metemos en todo el asunto. Y como la última, línea de impresión en serie, Okey-dokey, se ve bien hasta ahora. Entonces tenemos que volver a nuestro bucle principal porque aún no hemos terminado. Porque ahora revisamos otra vez la culpa. Entonces está más húmedo esperando una entrada o es el final. Pero lo que dijo a la enésima, yendo un poco abajo, tenemos aquí una función más que tenemos que implementar. Por lo que podríamos decir juego dot reset juego. Y déjame ver un poco. Así que restablece juego, volviendo a nuestro archivo de clase, blanco RP SW, juego reciente. ¿ Y qué debería pasar aquí? Es muy fácil porque no quiero borrar el objeto en iniciado o nuevo porque tal vez harías aquí algunas rondas contando, etc. Así que solo quiero borrar o sobrescribir pegando escuela. Por lo tanto, estoy usando un bucle for. Entonces número entero cuenta hasta tres. Y Tia, digo partitura de juego. Yo, el puntaje es igual 0. Y ahora estoy sobrescribiendo este curso al final y cambiando el estado para esperar las entradas de los usuarios. Ahora creo que hemos manejado todos los estados de manera general porque él en el bucle, entonces podemos acceder a los varios modelos, por ejemplo, pero no implementando algo en la clase principal core. Y también aquí estamos esperando la entrada del usuario, nada que hacer aquí. Pero también aquí sugeriría con fines formativos y también para validación. Me gustaría imprimir aquí entonces las entradas, así que la impresión en serie. Y aquí estamos. Le estoy dando el fondo, pero me estoy cambiando aquí, no la olla al principio. Me gustaría tener aquí las entradas del usuario, porque entonces es el mismo orden como aquí, entrada del usuario. Entonces tenemos la olla como la última señal que estamos haciendo aquí, línea de impresión y punto y coma al final. No olvides el punto y coma. Vamos a ver si tenemos aquí algunas flechas. ¿ Recibimos la luz verde de nuestro compilador? Y luego estamos subiendo el boceto a su USP 32. Sí, se ve bien. Entonces subidas. Por lo que el programa está parpadeado y estamos conectados al Wi-Fi y una vez más recargar el sitio web termina. Ahora, me gustaría elegir piedra. Stone es mi entrada, papel es el bot, así que perdí. Eso es cierto. Piedra de nuevo, papel de piedra. Ok. Una vez más, me gustaría tener papel, papel contra Tijeras. Perdí de lo que era la riqueza. Otra vez hermana, gano porque se dibujan tijeras. Entonces, una vez más, Wells fue flotadores de papel y papel. Volví a perder. Nuevo juego. Empezaremos en la próxima vez. Tijeras. Las tijeras simplemente no fue mi día de suerte. Tijeras robadas. Uno, una vez más, el papel de piedra y piedra, perdí. Un juego más. Me gustaría tener miedo y tijeras de papel apretadas. Perdí propósitos como perdí. Como pueden ver, aquí, tenemos papel, papel apretado. Eso es lo que quería comprobar. Entonces la jugabilidad, diría yo, funciona muy bien. Y en el siguiente video, vamos a mostrar nuestro intento de hacer el resto de ella. 58. Cómo enviar eventos paralelos de los servidores: Ahora queremos enviar de vuelta a resultados de la ESP a la página web para que posteriormente podamos visualizar también los resultados allí. Por lo tanto, podemos utilizar aquí los eventos paralelos del servidor y los eventos paralelos del vendedor están más o menos preparados para nosotros. Sólo tenemos que copiar pegar cosas en. Y esto es desde sí expresivo. Nos dieron los fragmentos de código y puedes rellenarlo. Por lo tanto, estamos abriendo el índice HTML y fuera de la función Enviar get, estamos declarando aquí. Y si fuente de eventos de ventana, por dentro, estamos copiar y pegar la primera función, haga clic con el botón derecho Formato documento. Por lo que un EventListener, se abrirá. Y luego llegamos aquí también en mensaje cuando está desconectado y el ESP perdió conexión. También el mensaje, el primero se implementará aquí. Pero ahora eres nuestra fuente. Nuestros eventos pueden venir. Antes de hacer eso, estamos cambiando de nuevo a nuestro archivo principal de CPP. Y nosotros, veamos, vamos al estado. Y tenemos que inicializar aquí los eventos del lado del servidor. El servidor ha comenzado aquí, pero ahora maneja los eventos del servidor web. ¿ Y cómo podríamos hacer eso? También está aquí en el patrón fijo copiar y pegar aquí y también para el evento expresivo auto en conectado. Entonces tenemos aquí una idea cuando estamos reconectándonos, y este es el primer partido. El mensaje fue, que será enviado aquí dentro de Halo y servidor a los mangos. Entonces este es el guión básico, que maneja son los eventos. Pero, ¿cuál es nuestro trabajo? Nuestro trabajo es enviar los resultados a la página web. Por lo tanto, podríamos ir aquí bajo la jugabilidad, por ejemplo, y enviando resultados al sitio web. Y esto es lo que podemos hacer ahora, eventos, punk enviar eventos es nuestro objeto que aquí somos creados. Déjame ver aquí. Debería estar en un wi fi, creo que aquí. Este es este evento, fuente del evento. Y ahora en el bucle bajando, te mandamos, tenemos que enviar una cadena, por ejemplo. Y cuerda. Simplemente copie y pegue el primero. Alguna cadena porque esto es solo un entero convertido en una cadena. Y luego dos sin cobrar porque esto es lo que necesitamos. Entonces también estoy dando el segundo valor y se llama, por ejemplo uno. Y también estamos publicando aquí Millis. Entonces aquí tenemos que sumar no reducido, y se llama el juego. Y cómo grabar el marcador de juego. Puntaje de juego de puntos, 0 y puntaje de puntos. Ahora tenemos dos puntos. Siguiente línea, queremos tener los perdidos. Y el tercero será el apretado. Ok. Terminemos. En primer lugar, sube los sitios web. No, no hemos terminado en la página web. Sólo tenemos los eventos básicos, pero ahora tenemos que captar nuestros eventos. Por lo tanto, también he preparado aquí algo. Vamos a pasar por él. AddeVentListener de origen, y se llama 11. Luego dividimos aquí en el cpp principal, éste. Entonces éste se inicializará aquí a uno. Y luego estamos imprimiendo los valores en la consola solo para el primer propósito. Después copia pega dos veces porque hemos perdido y apretado. El último. Ahora, Guardar y Subir archivo para que tengamos un nuevo actualizado el sitio web. Una vez más, ¿cuál es el problema? Sí. Ahora es obras porque el monitor serial estaba abierto. Y después también sube esta captura. Usp tiene conexión. Entonces estamos haciendo refresco de Reese inspeccionar consola, mientras que el consejo un poco más grande. Aquí estamos. Y como pueden ver, llegamos aquí los mensajes. Entonces cuando estamos refrescando, usar P te está conectando también a los eventos del lado del servidor. Entonces, ¿por qué no se muestran aquí? Entonces voy a mandar tijeras. Y aquí el resultado en la entrada 0 es el mismo, pero también llegamos a escuchar la retroalimentación. Entonces uno perdió apretado. Una vez más, elegiría PayPal con 110. Entonces cortamos aquí fue que conseguí 111. Estos son los últimos 31. Muy bien. Esto es desde el inicio de sesión de consola en la página web para que podamos ver lo que entramos tijeras a 11. Una vez cuando estoy presionando la siguiente, la siguiente opción, entonces el juego volverá a empezar de nuevo. Y como se puede ver, llegamos aquí también este servidor de eventos paralelos. Perfectamente. Estamos enviando valores al encabezado y juego de ESP jugando motores Glenn y luego enviando los valores a nuestros sitios web. Y en el siguiente paso, pero podríamos hacerlo un poco más. Soy bonita este JavaScript y también con CSS. 59. Prettify events: En este estado de este proyecto, podemos conseguir con éxito eventos del lado del servidor en la página web, pero es solo en la consola. Y ahora queremos bastante arriba en todo el asunto. Por ello, estamos volviendo a nuestro principal CPP y los eventos están recortando los eventos desde el principal juego hasta el final. Y antes de reiniciar el juego, estamos enviando aquí los eventos justo una vez después del juego. Entonces estamos ahorrando aquí el CPP principal y cambiando a nuestro índice HTML, porque aquí tenemos que agregar un poco. En primer lugar, estamos mirando aquí esta estructura. Tenemos aquí una estadística. Y se llama resultados es el nombre de clase de archaea tiene que llamarlo los riñones. Y porque es un nombre de clase. Y queremos sumar aquí en algunas filas. Y una mesa es de una estructura con un rho. Rho es y t son tech. Y también tenemos algunas columnas, y las columnas se identifican con td. Quiero tener tus cuatro columnas. Una fila. La primera columna es el número redondo. Entonces cuántos, con qué frecuencia tengo uno, perdido y apretado, etcétera Por lo tanto, estamos usando jQuery. En primer lugar, me gustaría tener aquí y variable, y se llama contador TR porque quiero saber cuántas horas, cuántas filas estoy agregando. Veremos por qué estamos usando necesitándolas. En primer lugar, tenemos que declarar no sólo por las rondas, quiero tener una perdida. Este es el encabezado y también apretado. ¿ De acuerdo? Ahora podemos bajar a nuestros eventos. Y ahora tenemos que pensar. Queremos sumar aquí en el 1. En primer lugar, tenemos que crear la n partiendo de una nueva fila y luego las columnas comentan y el final, tenemos la estructura del final de la columna y la fila una vez más, primer lugar, la fila arranca, entonces tenemos cuatro columnas y luego tenemos que terminar ahí. Fila. Por lo tanto, una vez más, bajando a nuestro único evento. Entonces, en primer lugar, var row es, estamos empezando con algún evento TR, y luego viene nuestra columna. Y esto será enviado ahora vía che cromo a nuestra mesa. Y se llama a la mesa. Es una clase que estamos usando un punto, mr por ejemplo. Y estamos usando el append porque queremos agregar después cada línea después. Estamos analizando la sala de valor fila, pero no estamos terminados aquí. ¿ Cuál es nuestro TR? Me gustaría identificarme con identificación especial y la idea es la t, nuestro contador. Entonces, en primer lugar, solo unas cotizaciones normales, luego dobles cotizaciones para que pueda agregar aquí el mismo cuarto y las ideas. El T D me gustaría tener también. Además, más. ¿ De acuerdo? No estoy justo aquí porque aquí viene el número de fila plus, más contador. Entonces esto es lo mismo. El id es sólo el identificador para nosotros, para la programación. Y aquí me gustaría tener esto. Aquí se encuentra 123, etcétera Pero también agrego aquí y clase. Es números pequeños y se puede ver en este estilo CSS. Hasta ahora tan bueno. Entonces estamos sobrescribiendo nuestra variable fila y estamos enviando también esta al TR, que aquí somos creados. Por lo tanto, hashtag plus t, nuestro contador. Por lo que estamos deseando ahora acceder a la id de la nueva creada una línea punto anexar una fila. Dentro de la fila. Estamos creando una nueva columna. Y esto también es con números y insights más pequeños sin clase. Este podemos sumar aquí e datos. ¿Qué son los datos? Los datos son lo que estamos impresos en la consola, que nos pasan por la ESPN. Y eso es todo lo que necesitamos. Creo que entonces copiaría éste. El registro de consola somos anulaciones y estoy agregando aquí y var frente a la fila. Y también aquí, el último, pero no estamos terminados. Lo último porque tenemos que cerrar la línea. Cerca de la luz. Lo estamos abriendo aquí en el primer comienzo, pero queremos cerrarlo ahora. Por lo tanto, digo el ID del contador TR, que inicializamos antes. Dot append, y una etiqueta de cierre para la línea. Al final, tengo que aumentar nuestro contador para la siguiente línea. Eso debería ser todo. Creo que hasta ahora. Entonces sugeriría que estemos subiendo el sitio web y el boceto. Y veamos qué dice el compilador. Usp se ha conectado de lo que estamos reiniciando o actualizando el sitio web. Como podemos ver, nuestras cuatro filas o columnas están aquí. Ahora estoy enviando tijeras. He perdido una vez, segunda tijera, y ya he perdido el juego, como puedes ver aquí. Estoy perdido. Entonces una vez más, perdió una vez, apretado, una vez, uno. Por lo que sólo tenemos una fila porque todavía estamos en el juego. Y ahora tenemos uno. Y así tenemos aquí, luego siguiente línea. Entonces un error menor. Tenemos que inicializar nuestro contador con uno y no 0. Pero aquí, otro juego con piedra luego perdió una vez, perdido al tiempo. Siguiente fila. Perdió una la primera vez. Apretado, apretado. Segunda vez, perdí una vez que ahora cambié a papel y gané. Entonces el juego o el cuarto juego, 12 veces, perdió una vez apretado dos veces. Por lo que hemos implementado con éxito aquí los eventos del lado del servidor y también tenemos buena página de resultados donde podemos visualizar cómo son nuestros resultados. 60. Implementa clase de LED: Una de nuestras últimas tareas será ahora implementar la clase LED. Por lo tanto, entro a la carpeta principal del capítulo del curso anterior en el que el, que hemos definido los LEDs. Y ahí vamos. Lo copiamos y pegamos en nuestra carpeta fuente y la abrimos. Aquí se puede ver lo que tenemos aquí definido. Entonces sugeriría que estemos abriendo aquí el RPS, w es TPP e incluyendo aquí en los nuevos LEDs dot h. y como exponente, diría que revisamos el archivo de cabecera porque en el fichero de cabecera ya implementado en el primer inicio. Todos los LED se apagan y encienden todos los LEDs. Yo no diría terminología. Es un poco nombre falso. Debe ser LED de visualización por ejemplo. Entonces entonces aquí vamos, Ancho, todos los LEDs apagados. Y vale la pena nuestro tema de BSW y MSW punto a punto. Esta tapas. Entonces, ¿qué tiene de malo ese? Lo siento, no, está bien. Entonces ahora tenemos que pensar, cómo podríamos implementar aquí una función LED, que es, que será invocada en cada juego-play. Y por lo tanto, es relativamente fácil porque llamamos a la función después de cada jugador de cheques. Porque después de cada cheque yacía, hay que estar sin cambios en el discurso. Y luego también queremos mostrar aquí el cambio del marcador. Pantalla LED's. Y aquí hacemos una función más simple donde podemos ver si el puntaje de juego por ganar por 0 puntaje de puntos es igual a uno. Entonces primero LED en LLC si el juego anota uno. Entonces eso significa que hemos perdido. Dotcom es uno es por mi culpa. Yo soy el que porque tengo dos LEDs en ganar y perder entonces a los LEDs están en lo mismo con los débitos. Entonces si estamos perdiendo, entonces primero LED encendido y también aquí el segundo. Por lo que no hemos iniciado ningún objeto nuevo. El nombre de clase es tapas. Entonces por ejemplo, se encendió, amarillo, uno está encendido, y está en el alfiler 55. Contamos con cinco LEDs. Deja que el LED rojo lea hacer, y tenemos uno azul. Tenemos dos alfileres. Estoy teniendo el segundo amarillo unpin 18, el primero rojo el 17, el 16, el 19. Y ahora podemos encenderlo. Por lo que decimos tarde, amarillo, una vuelta en. Si tenemos el marcador de juego 12, entonces me gustaría tener aquí el amarillo para encender. Juegos atrapados. Me gustaría tener el LED rojo una vuelta en el LED 12. Si el puntaje del juego para anotar es igual a uno, entonces el grande, LED azul o enciende. Cuando estamos quiere. No otra vez por favor. Oh wow, debemos restablecer todos los LEDs a LED está apagado. Esta es una simple. Sólo estamos llamando a cada uno de los LED y apagarlos. ¿ Y cómo podríamos hacer eso con apagar? Y SEM podría recordar, tenemos aquí un análogo. Comprobamos si encendimos los LEDs, que analógicoEscribir siempre digital, qué lo encendimos con digital, ¿verdad? Esa es la razón por la que pasamos aquí y falso. Entonces después, voy a Restablecer juego y llamo a todo el LED está apagado. Eso debería ser todo lo que necesitábamos para nuestra exhibición del LED. Entonces veamos qué dice el compilador. Entonces en el ESP se parpadea, encendiendo la cámara para que podamos ver aquí todo nuestro Bahrein. Y solo los reportes de que mi router dejó que mi ESP se conecte con el equipo de esposas. Ahora estamos listos. Por lo que ahora puedo elegir aquí, por ejemplo, piedra. Y el LED rojo continúa porque he perdido. Entonces una vez más, he perdido dos veces n, se desvanecerá de inmediato. Esta es la razón por la que, porque no tenemos nivel bajo su CPP principal. Cuando estamos restableciendo aquí todo en el bucle podríamos definir aquí y corto retraso. Por ejemplo, retrasar tres segundos. Está bien esto que utilicemos aquí y retrasado porque el juego cuando está terminado no debería hacer nada. Entonces, por ejemplo, podrías actualizar aquí el boceto una vez más. Pero lo estoy guardando aquí, solo probando aquí los LEDs. Ahora tenemos apretado, por lo que el LED azul también funciona. Entonces en el segundo, he perdido una vez más. Tengo 111, perdido demasiado apretado, y estamos terminados. John, también, nuestros LEDs funcionan muy bien de una manera rápida. Implementamos aquí este tipo de clases y se podría acceder aquí diferentes tipos de funciones cuando lo desea. Y esto nos da ahora una buena visión general del potencial del objeto de manera orientada. 61. Crea y publica tu propia biblioteca: Entonces cuando hayamos creado nuestras propias clases, tal vez también quieras compartir y proporcionarte clase con otros. Esto podría hacerse con alguna Biblioteca terminada. En este video, me gustaría mostrarles cómo podríamos configurar desde una clase sobre biblioteca y cómo se podría compartir e implementar arduino, EDA. Y Stefan. Estoy aquí en mi máquina Windows. Estoy en la carpeta documentos, Arduino y bibliotecas. Esta es la carpeta estándar, y también es para el IDE Arduino a 0 y también para las versiones posteriores adecuadas. En esto en esta estructura de carpetas, estoy creando una nueva carpeta y lo estoy llamando pixel leds por ejemplo. Y en esta carpeta ahora, estoy copiando y pegando. Aquí. Déjame ver dónde estoy. Forma nuestro boceto terminado a partir de los LEDs. Déjame ver fuente de LEDs. Estoy haciendo frente aquí. Todo desafía las ideas. Esta carpeta principal y el cpp principal, lo estoy agregando, el nombre a o por ejemplo, persiguiendo los LEDs no son cpp. Estoy cambiando para ignorar porque queremos agregar la biblioteca a la EDM de Arduino. Entonces estamos creando una carpeta para los ejemplos que hay que llamar los ejemplos. Y luego arrastraremos y soltaremos este archivo dentro de esta carpeta que hicimos en subcarpeta. Debe ser del mismo nombre que el expediente. Por ejemplo. En este archivo, en esta carpeta, estoy abriendo los datos del inode y tenemos que adaptarnos, escuchar algo. En primer lugar, tenemos que añadir aquí algunos nodos para qué licencia, etcétera Para qué sirve esta biblioteca? ¿ Para qué sirve este ejemplo? Lo primero que estamos haciendo es aquí, estamos cambiando las cotizaciones a esta ciencia porque ahora no hemos terminado biblioteca en las bibliotecas hay que incluirse con esto. El mayor y menor que signo. Eso es todo lo que tenemos que hacer. Entonces arreglaremos un poco nuestro código. A lo mejor añadimos aquí algunos, algunos comentarios. Simplemente deshazte de todos estos ejemplos. Dejar perseguir. Y podríamos decir aquí, por ejemplo, los ejemplos. Guárdalo. Y eso es bueno para nosotros hasta ahora. Vamos a saltar de nuevo a la carpeta. Aquí están mis CPP y LEDs dot h. Eso es lo que quiero tener aquí. Nada más lo que quiero añadir. Pero hay que hacer una sola cosa . Y esto está bajo propiedades de puntos de biblioteca. Vamos a abrirla. Aquí. Puedes definir tu nombre, por ejemplo, o el nombre de la clase debe ser el mismo nombre que el desvío de fotones o el mantenimiento al aire libre. Unos pocos posts son cosas en qué categoría y también qué dependencias hay en tu clase. Esto te da una buena visión general. Hay muchas más cosas que hacer. Por ejemplo, palabras clave que se encontrarán con el gestor de la biblioteca, etcétera Pero me gustaría mantenerlo aquí muy sencillo para que puedas ver lo que queremos hacer aquí. El EDA exterior toma mi máquina siempre un poco de tiempo. Por lo que ahora vamos a bosquejar, incluir biblioteca, bajando a las Bibliotecas Contribuidas. Y debería haber aquí representa tapas Lady. Perfecto. Entonces digo, sí, porque ahora después de un acceso completo después de clase, vamos a mi LED es tapas. Por ejemplo, estoy usando aquí la barra cinco copia. Éste podría filtrarse es, por ejemplo, 18. Entonces estoy encendiendo mis pistas para encenderme. Y en el bucle digo mis cruzadas LED, 20. Mi LED a. Entonces, ¿hay una sugerencia completamente? Déjame ver. Si funciona también en Sí, ahí vamos. Me gustaría haber apagado después de la demora. Tenemos dos milisegundos. Me gustaría apagar el segundo LED y cinco segundos. Y está en falso porque no tenemos un análogo, ¿verdad? Muy bien. Ahora quiero subir éste. He usado tus nodos 23 y vamos a subir todo el asunto. Ahí vamos, encendiendo la cámara, reiniciamos de nuevo. Por lo que tenemos aquí el LED pulsante. Éste debería apagarse después de cinco segundos. Muy bien. Y hemos implementado con éxito nuestra propia biblioteca en el IDE de Arduino. Ahora podemos acceder a él de una manera muy conveniente y podrías compartir tu biblioteca con otros. Pero aún no hemos terminado. También tenemos aquí algún ejemplo de archivo. Entonces bajamos. Y debe haber también el ejemplo entre incluido. Ahí vamos, porque Lydia persiguiendo LEDs. Vamos a abrir esa. Aquí. Deberíamos tener el ejemplo de antes con todos nuestros expedientes y con el ejemplo, perfecto. Y este regalos también otros desarrolladores y buena vista interior, lo que pueden hacer con tu biblioteca. Entonces veamos dónde están, dónde estamos aquí bajo bibliotecas. Por lo que también podrías ir en esta carpeta santa y a sorbarla, a un archivo SIP. Y luego puedes compartirlo, por ejemplo, en GitHub está en, o puedes enviarlos a desarrollar en este desarrollador puedes ir a Sketch, Incluir Biblioteca en una biblioteca SIP, y luego todo instalará a los medios de comunicación. Esta también es una forma conveniente para que otros implementen toda su configuración, por ejemplo, para la biblioteca. Y eso es todo hasta ahora. Así es como se puede crear una, una manera sencilla su propia biblioteca y puede proporcionársela a los demás. 62. Resumen de los conocimientos: Ahora estamos al final de este curso online y me gustaría tomarme unos minutos para resumir todos los aprendizajes que nos hacen en este curso online. Entonces, antes que nada, nos discuten un poco sobre lo básico. ¿ Qué es una enum, qué se instruye? ¿ Cuáles son los diferentes tipos de IDE? Lo que tenemos el IDE Arduino, Visual Studio Code, esta plataforma ion. Cómo podemos usar el código del Arduino al código visual y visa versa. Después hicimos en breve introducción a los conceptos básicos orientados al objeto. Nos discuten cómo podemos configurar un proyecto vacío. ¿ Cuál es la clase principal? ¿ Cuál es el constructo? Qué es un constructor y la iniciación de un objeto que también podemos sobrecargar constructores, constructores las funciones principales, la primera función cuando iniciamos un objeto de proyecto. Y podemos haber proporcionado varios tipos diferentes de constructores. Entonces también discutimos sobre funciones básicas como getter y setter. Entonces con función pública, podemos acceder a miembros privados. Esa es la encapsulación de datos. Y también hablamos de herencia para que sea fácil para nosotros editar y biblioteca pública. Después comenzamos con la primera clase individual de LED. Significa que teníamos muchos LEDs y al mismo tiempo de ejecución o el mismo ciclo de vida pudimos controlar aquí en diferentes tipos de LEDs al mismo tiempo. Esto sólo es posible en la forma orientada a objetos. Si hicieras eso en una función orientada donde necesitabas muchas más barreras que esto sea posible. Estamos toggled a LEDs que hicimos y retrasamos después de ocho segundos. Nos hemos desvanecido en pulsarlo. Y también lo estamos accediendo con una matriz. Entonces eso es cuatro como sea posible para controlar y llamar a muchos, muchos LED al mismo tiempo. Uno del próximo proyecto estamos con la junta de Galton. Teníamos muchos tipos diferentes de sensores también incluidos en este proyecto. Y fue fácil para nosotros crear una matriz e iniciar, controlarla, inicializar los sensores ER. Y esto nos da también una oportunidad de trabajar rápido y flexible con diferentes tipos de entradas de sensores. Un proyecto principal fue también el faro. Debido a la reducción de nuestros controles de entradas con un solo botón. Fue el reto haber implementado tres tipos diferentes de modelos de luz. Por lo que dijimos una respiraciones cortas, implementamos encendido, solo enciéndalo y apaga. El primer LED. Cuando presionamos un botón para rotonda 1 segundo. Entonces el segundo LET pasa o se apaga. Y cuando estamos manteniendo presionado el botón para la luz en la tecnología, estamos alimentando de los primeros LET todos los modelos dulces Lite donde se puede acceder a través de un botón al mismo tiempo. Esto no es realmente práctico. Ejemplo porque a menudo solo tenemos una entrada pero necesitamos más de un mody. Y esto es lo que podría ser el ejemplo de la vida real. Último proyecto implementamos el juego de tijera de papel rock, recreado y de nuevo, Modi en la forma orientada a objetos que estamos llamando aquí y webserver hizo comunicación desde el servidor web al servidor web con el ESP. Y también se podía ver en este ejemplo lo fácil que es controlar varias celdas con una matriz. Y esto te da una vez más una oportunidad para interactuar con los componentes eléctricos de este Smith, componentes mecánicos de una manera fácil. Por lo que nos enfocamos en el lado del hardware, en el lado del software. Y espero poder mostrarles todo el potencial del objeto lo orientó.