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ó.