Transcrições
1. Introdução ao curso: Apresentações e abordagem
orientada a objetos com Arduino e ESPs. Olá e seja bem-vindo a
este curso online. Estou fora porque ele sabe que sou um desenvolvedor sênior
no ambiente de laboratório, mas também em sistemas embarcados. Neste curso on-line,
estou acompanhando uma abordagem
prática que estamos construindo juntos alguns projetos. Primeiro de tudo, passamos pela teoria
no mínimo, mas também estamos implementando
no primeiro capítulo, as primeiras classes
e imprimindo algum código no monitor serial. No próximo exemplo, estamos controlando LEDs
no tempo de execução em diferentes
tipos de estados. E essa é uma
das principais vantagens com a
abordagem orientada a objetos que podemos editar e também ajustar
aqui muitas coisas com diferentes
componentes em tempo real. O que quero dizer com
estados diferentes ao mesmo tempo. Também estamos lidando
com outros componentes, por exemplo, sensores infravermelhos. Então, quando temos dez
ou mais sensores, como podemos avaliá-los? Iniciamos isso. Você está fazendo isso com
uma matriz, por exemplo. E mostrarei como
podemos controlá-los e avaliá-los de forma
fácil e conveniente. No
ambiente Arduino quando estamos desenvolvendo em sistemas embarcados
com microcontroladores. Do que também temos que lidar
com o uso limitado em livros. E este é um dos nossos
próximos dois exemplos. Estamos criando um farol. Este farol tem apenas um empurrão. Este botão de pressão. Estamos controlando três tipos
diferentes de voz leve. O primeiro é um atalho porque o botão,
ele vai ligar. O segundo. Estamos pressionando
o botão por 1 segundo, segundo, LET continua. Se você apertar o botão e mantê-lo pressionado por
mais de dois segundos, o primeiro LED caberá
em nosso último exemplo. Fazemos o clássico
jogo rock paper tesoura com vários motores e recriamos a lógica do jogo por nós mesmos de forma orientada a
objetos. Quando você estiver interessado em trazer seu
próprio código-fonte para o próximo nível para escrever e
limpar código e também de forma
mais estruturada. Não hesite e espere
mais e receba essa classe e código comigo
da maneira orientada a objetos. Estou ansioso para
recebê-lo neste curso online.
2. Experiência prática vs. teoria: Antes de começarmos com
a parte de programação, gostaria de
me
concentrar em um tópico importante. Isso significa
experiência prática versus a teoria. Estou ciente e tenho certeza de
que muitos de vocês têm muitos anos de experiência em codificação e também no
desenvolvimento de programas. Mas aqui neste cenário, eu gostaria de ser um
pouco mais de mente aberta. Isso significa que você, é
claro, tem sua própria
abordagem para algumas coisas. E talvez você esteja se
perguntando, por que você torna isso
muito complicado? Certamente há uma outra
maneira de implementar essas partes de códigos menores, por
exemplo, isso está tudo bem. Isso está completamente bem. Você pode se adaptar a
todas as minhas versões à sua abordagem e também
implementado individualmente para você. Sempre há alguma
discussão acontecendo quando se trata de linguagens de
programação, quando se trata de implementar dados codificados de
origem. E não leve muito a sério, tenha a mente aberta e
adapte-o a você na abordagem.
3. Pré-requisitos para este curso: Pré-requisitos. O que posso supor que
você traz para este curso on-line que
coletei aqui
quatro pontos principais. Eu gostaria de estar
aqui muito transparente. O que você pode esperar que ele desfaz o curso
on-line e
o que não está coberto. O primeiro será, claro, você deve trazer algum conhecimento
básico de programação. Isso significa que você deve saber sobre os diferentes tipos
de tipos de dados. Você deve saber o que é
se está no conhecimento fundamental e
básico da programação, conhecimento fundamental e
básico da programação porque isso não é
realmente coberto aqui. Claro, expliquei o que faço em toda decodificação e
depois no código-fonte, mas não há
conhecimento mais profundo por trás disso. A segunda parte também é que estou cobrindo todos os diagramas de
fiação, etc, no ESP 32. Claro, todos esses
objetos estão endividados. código-fonte é aplicável
ao ambiente Arduino. No entanto, se você usar uma unidade
externa, normal n, nano, etc, é sempre
o mesmo conceito, o mesmo código-fonte. Mas esteja ciente que estou usando o ESP 3200 porque ele tem alguma conexão
Wi-Fi. É muito barato e você pode usá-lo para dispositivos
da Internet das Coisas. Mas também é aplicável
ao ambiente Arduino. Estou usando o Visual Studio Code com o sangue para bloqueio
masculino. E é um
pouco diferente da união original EDI, mas você pode usá-lo. Não importa porque o
código-fonte é C plus plus e funciona em quase
todas as programações, programação, qual deles usar. Mostrei também
como você pode usar meu código-fonte e implementado
no Arduino EDI. O último, eu acho que também um
dos principais pontos é que você
deve estar interessado em uma programação orientada a objetos ,
porque no
primeiro começo parece que você gosta um
pouco mais
no código-fonte,
mais linhas de código. Mas quando você
passa pelos exemplos como aqui estão os
LEDs que ele pode ver as principais vantagens quando estamos codificando com a
maneira orientada a objetos porque somos
mais flexíveis, podemos nos adaptar
certas situações e podemos fazer programas muito, muito legais
com diferentes tipos de componentes de forma
fácil e rápida. E é por isso que eu trago esse ponto, porque
no primeiro
começo, escrevemos, parece que
estamos escrevendo mais código, mas é mais prático, mais viável, mais adaptável.
4. Disposição da responsabilidade: Alguns pensamentos sobre
o aviso de isenção de responsabilidade. Tentei ser o mais cuidadoso
possível quando
se trata de cinemática. E a fonte
vai ser precisa e olhe repetidamente. Mas não estou livre
de nenhum erro. Isso significa que talvez
eu tenha cometido um erro nas partes do Bahrein e você
junte tudo. E então a USP faz, por exemplo, uma competência automática será
danificada ou pior
ainda, pode ser queimada. Porque muitas vezes, quando você está
conectando os
componentes de uma forma florestal, eles ficaram
muito, muito quentes. E também pode ser ocorrido
em sua pedra queimada. Também pode acontecer se você crescer em
um circuito aberto. Existe um perigo de vida. Ele poderia ser assegurado
de várias maneiras. Sempre esteja ativo no
pod Byron e na parte de codificação. B também muito, muito reflexivo quando
se trata de diferentes tipos
de componentes. Por exemplo, não tenho USP 32, que tem pinagens um pouco
diferentes. Talvez seu ESP tenha iniciado o E2F. Então, quando estamos conectando
o vírus juntos, verifique
sempre os GPIOs,
os dados da pena de morte. Esteja ciente do que estamos fazendo um implementado e adaptado
às suas próprias versões. Não posso garantir que
tudo o que eu
mostro funcionará em seu sistema porque há
muitos componentes
e abordagens diferentes aqui fora. Mas nos meus vídeos anteriores mostrados, é muito simples seguir ou estar ciente dos riscos e, em seguida,
temos um bom resultado.
5. ESP32 Pino: Algumas palavras para o
tópico do amendoim. Como você deve saber,
um GPO ou significa entrada e saída de uso
geral. Isso significa que podemos usar, por exemplo, aqui o GPIO
número 27 como entrada. Então, temos aqui em
sensor puro detecta movimentos. E quando o movimento é detectado, podemos enviar e sinalizar
aqui para o pino 27. Mas em outro exemplo
foi a ferramenta de estudo I-SPY. Também podemos usar o pino GPO, pino 27 como saída. Isso significa que ele
acenderá um LED, por exemplo, que o LED
será carnudo ou piscará. Portanto,
também devemos saber que há uma pinagem e GPO P nada, e isso depende de qual empresa, fabricante e você usa? Eu uso a partir da entrega AC. E, como você pode ver aqui, esta é a pinagem para ESPs
32 de uma entrega definida. E é um pouco
diferente de outros fabricantes. Por exemplo, aqui
não tenho conexão terrestre. Isso significa sempre
verificar seu p-naught. No entanto, se for
uma certidão ESP, nem sempre
são os mesmos. Verifique se o GPO fará referência
à referência de pinagem para que você possa ter certeza que este pino será
, tenho a necessidade do que você precisa. Por exemplo, aqui eu não tenho
aqui nenhum pino de aterramento ou o pino 3534 é
apenas entrada. Nsc é alguns outros 32s que também têm 3232
apenas como entrada declarada. Temos jovens usados
para flash interno, nunca recomendamos para outro
uso, os amarelos. Portanto, esteja ciente dos
diferentes tipos. Também usamos
alguns pinos de toque. Também temos alguns conversores
AD, AD e DCM para que possamos transferir
sinais desses dados. Isso também é sempre
necessário quando se trata conectar partes da TB
conscientes de diferentes GPOs, diferentes tipos de ESPs têm GPIOs e pinagens
diferentes. E então,
esperamos ter um bom esquema de fiação e também
podemos implementá-lo.
6. VS Code vs Arduino: Por que você deve alterar o Arduino EDA para
Visual Studio Code? E há uma resposta mais simples
que você não precisa. Gostaria de mostrar
aqui apenas minha opinião,
como você, qual é o fluxo de trabalho? Por quê? Acho que o Visual Studio Code é um pouco mais
conveniente quando se
trata de decodificar a rotina
diária. No lado esquerdo, eu o vi
no seu ED50, Python 2 em baixo, eu disse que são coordenadas do Visual
Studio. Você pode ver que é muito
semelhante na sobreposição visual, mas está no núcleo e
o compilador estava em
uma curva de excesso de velocidade. E quando a compilamos, há muitas diferenças. Sinto o primeiro exemplo que estamos lidando aqui
neste curso on-line, está fazendo aqui os LEDs com objetos estão datados e eu vou
mostrar 1 primeira coisa. Por exemplo, se eu clicar aqui na compilação e clicar no lado
esquerdo no compilador, posso ver que a literatura, o código precisa de 1,7 segundos.
Eu não cliquei direito. Mais uma vez, adicionando nova EDA. Demora o dobro do tempo, talvez o terceiro do tempo. E isso não é tanto necessariamente quando
realmente não implementamos bibliotecas de
terceiros, mas quando fazemos mais tarde, ela teme 678 bibliotecas externas, então você realmente reconhece
e diferença significativa nas velocidades de compilação da
rotunda 20 segundos a
mais de um minuto no RNA. E isso é realmente irritante
quando você está apenas cometendo um pequeno erro ortográfico equivocado. E também a velocidade quando
somos pegos é diferente. Por exemplo,
crio o objeto vermelho para dentro do construtor e estamos
passando o valor faria. Então estamos pulando
para a configuração apenas para mostrar a diferença. Então eu estou digitando aqui reds
dois pontos e vejo toda a função que eu implementei na classe
que estamos lidando mais tarde. Por exemplo, clico
em colchetes de carne e depois vejo que tenho
que inserir um número inteiro. mesmo exemplo aqui,
o mesmo fluxo de trabalho, mas um pouco diferente. Vermelho dois pontos. Nada acontece. Vou esperar. E espero que algo se
abra com controle e espaço. O Arduino está carregando lá. Todas as
funções necessárias. Agora eu tenho isso. Eu gostaria de definir
a carne e T
colou-me em atraso inteiro,
ok, já está selecionado para que
eu possa substituí-la por 500, por exemplo. E está feito. Não muito rápido, eu diria. Mas é claro que você pode fazer
isso em mais um exemplo. Então, quando abrimos o ano a
função de sabedoria do objeto, poderíamos apertar a tecla Control
e o esquerdo do mouse. E então ele deve pular
para a classe em si. Aqui. Tag muito fácil aqui. E aqui Ele não carregou. Não sei se sou desajeitado ou
ele ainda não carregou. Eu não percebi isso. Controle. Eu não sei. Ele deve funcionar, mas não tão rápido quanto no Visual Studio
Code. Agora, já foi feito. Como você pode ver, o
Sandberg flui um
pouco diferente
em velocidades de reserva. Também em sua
história visual, cortesã, minha opinião e
grande portador tenho que pular dobra
que aqui está meu espaço de trabalho. Sangue do indiano,
ótimo gerente de dependências. Lá você tem
que dizer, por exemplo, eu gostaria de atualizar
o AnalogWrite. Eu queria ter duas
versões 1.2 e todas acima. Quando há uma nova versão artística, chego à atualização. Imediatamente. Eu poderia definir a estrutura
na parte de upload e
também na porta do monitor. Ou seja, quando eu estiver
carregando o código, ele será aberto lojas
em um determinado monitor
na mesma plataforma de dados de porta. Qualquer um também deve detectar relatórios
automaticamente. Mas aqui eu
configurei porque muitas vezes
tenho mais de dois Arduinos
conectados ao meu PC. Então, eu gostaria de
tê-lo codificado aqui. Também porque estou usando muito espaço e pouco o
FS Management. E, portanto, também em
sua plataforma i o, podemos construir a imagem
do sistema de arquivos e também carregar arquivos
da pesquisa do fundo para
o código, para nossos ESPs. E isso é necessário
quando queremos interagir. Por exemplo, o ESP 32 pode ter metade e
um servidor web nele. Quando estamos construindo um site
, podemos colocar para calibrar algo
ou colocar alguns, alguns valores, por exemplo, como deve ser feito para nossos outros exemplos? E sem uma nova EDA, temos que instalar componentes
de terceiros. É um pouco, sim, não, não intuitivo e fácil de usar. Código Visual Studio.
Há muitas das coisas integradas. E também mais uma vez, a velocidade é
realmente outra dimensão. Apenas algumas
visualizações de insights quando você deseja alternar para o
Visual Studio Code. Há muitos
bons vídeos
do YouTube onde você pode fazer
seus primeiros exemplos. Vou descrever e mostrar como configurei os projetos
aqui neste curso. Mas não vou aprofundar toda a mecânica
do Visual Studio Code. Justin primeiro reivindica o dedicado para que
você tenha uma visão geral.
7. Código fonte do Código VS no Arduino: Neste vídeo, abordamos como
podemos transferir os códigos,
o código-fonte
do Visual Studio Code para a união Arduino EDA. Definitivamente, tenha um exemplo. Este é o exemplo
de LED do nosso primeiro salto para baixo e assumindo que
já terminamos com isso. E você quer agora
transferir esse tipo de códigos. No lado esquerdo está o
Arduino IDE versão 2. E no lado direito
depois do Visual Studio Code com o blog da plataforma. E como você pode ver,
eles são muito parecidos, mas estão
no núcleo e o compilador
um pouco diferente. E também o Visual Studio Code é muito mais rápido quando se
trata de combinar. Então aqui você pode ver
a estrutura
do projeto e você pode ver que
há mais algumas fotos, estas duas se editam, mas como as outras fotos
estão sempre no Oresteia, mesmo quando você está
criando um novo projeto. Dois são do Visual Studio Code. Então, o que é interessante para nós é a pasta fonte e temos três arquivos principais Sui são
LEDs ponto CPP e LEDs ponto H. Estas são a classe
e a classe
também é 100% compatível
com o IDE Arduino. E então você vê o CPP do ponto principal. E seu principal CPP ele
é o nosso arquivo principal, e este é o nosso arquivo interno, que você pode ver aqui. Até onde em breve introdução. E agora estamos pulando
em um explorador e pulando
direto para essa pasta. Aqui está meu projeto. Mais uma vez, os diferentes tipos de projetos, clico em LEDs, como você pode ver, a mesma
estrutura de antes. Clique na fonte. Agora eu copio os arquivos
em uma pasta. Vamos supor que seja chamado
0.1 para que
agora possamos copiá-lo, colá-lo aqui. E assim podemos ter uma subpasta. E agora renomeamos o main.cpp. Clique com o botão direito do mouse sobre ele, alterou
o nome para executar ponto. Livre-se do CPP. E sim, agora mudamos aqui. A extensão agora em
nossa cópia de mídia, o caminho. Vá até eles. Arquivo aberto. Vá para a pasta que
acabamos de criar e abrimos o arquivo
que renomeamos. Nova instância será aberta, mudando para a esquerda. E o que eu gostaria de
mostrar agora é que
é por isso que escolhi esse exemplo porque eles têm diferentes
tipos de compiladores. Vamos compilar no
Visual Studio Code. Esse código exatamente. E também aqui eu disse
que precisa ser 32. É que as bibliotecas mais antigas
são carregadas aqui. Se houver uma
biblioteca de terceiros incluída, você pode baixá-la
da biblioteca ou do gerenciador, mas neste caso
não precisamos mais. E então vamos aqui
para compilá-lo. E, como você pode ver aqui, o Visual Studio Code compila o código
com sucesso. Mas aqui o Arduino IDE é um pouco mais rigoroso
, e você pode vê-lo, a mensagem de erro é
chamada de array deve ser inicializada com o inicializador de
encaixe de chave. E isso é, eu não fiz
isso no código do Visual Studio. Portanto, só
temos que descomentar essas linhas e
temos que, é claro, lidaremos com o
conteúdo lá mais tarde, mas temos que inicializar todos
os objetos, por exemplo. Então, mais uma vez, recompile. E, como você pode ver agora, demora um pouco
mais do que o Visual Studio Code. Ele sempre também
o combinou. Agora, você pode fazer
o upload do esboço para USBE
certamente fazer, por exemplo, e você tem o mesmo código Com remodelação criada
para o tribunal, mas
adaptou-o ao Arduino EDA. Mais uma vez. Isso é um pouco, lá, algumas diferenças
na compilação,
mas, em geral, 99%
seriam implementados. Você pode implementá-lo para
o seu já em edi, que vem do
Visual Studio Codes. E mais uma vez
, tente e
use o Visual Studio Code. É muito, muito mais rápido
na compilação. E também, acho que é um
pouco mais conveniente
codificar porque há muitos recursos importantes em
vez do Visual Studio
Code, que você pode usá-lo em sua vida de programação
diária.
8. Simulador online: Quando você está, durante
seu processo de codificação, muitas vezes
é o caso de você
querer testar algumas partes lógicas, apenas algumas linhas de
código para que você não precise compilar o código
inteiro de novo e de novo. Portanto, alguns simuladores
online são realmente úteis porque então você apenas pega Dakota
colado em disputa. O que podem.com? Projetos de TI semelhantes no seu
navegador são na minha opinião, realmente não são bons
e são bons simulados. Porque aqui você tem, pode usar a certeza ESP
para clicar nele. E então você tem aqui
o simulador online. E o bom
aqui é que você
também pode adicionar alguns, alguns, alguns componentes, alguma parte
elétrica, mas também bibliotecas
externas. E também você pode colar aqui seus classificadores
para que você possa testar seu projeto inteiro
dentro do simulador. Então, primeiro exemplo,
vou criar aqui, LED, conectado a uma ordem
com, por exemplo, 25 para GPIO no
cetótico vai para o chão. Então o pino LED é 25. Este é o mesmo PINMode. Eles, PinMode. Pino led. Errado. Saída. No loop. Estamos fazendo um atraso. Não, não é a melhor maneira, mas é apenas para fins de
teste. Em seguida, clicaremos em assimilar. E o bom aqui também é quando começamos
a vê-lo começar, também
devemos ver aqui o console, a comunicação do
soro. E como você pode vê-lo,
podemos ouvi-lo perfeitamente. Teste também componentes e como podemos controlar
os componentes e também nosso código se tivermos
um código limpo ou não. Walkway.com, bom simulador
para testar seu código.
9. Enum: Nos próximos capítulos a seguir, estamos fazendo códigos
e código-fonte e
funcionários um
pouco mais complexos com o que também
queremos verificar com quais estados
estamos lidando atualmente. Por exemplo, quando
estamos desenvolvendo e jogando, então queríamos saber, estamos aguardando
a entrada do usuário, estamos terminando de jogar ou estamos jogando atualmente, estamos
calculando algo. E muitas vezes isso
será feito com flex. Por exemplo, você
pode definir ou declarar,
neste caso, alguma
variável de pool, por exemplo, estado de espera é
falsa ou salão de baile. Comece. O jogo é verdade. Em seguida, no loop, você
pode verificá-lo com um IF. E em relação aos estados, você poderia calcular algo,
oh, aguarde, pelos dados de entrada do usuário. Na minha opinião, há uma
outra maneira mais conveniente quando se trata de verificar
estados em C plus plus. E, portanto,
estou usando muitas vezes enum. Enum é, de algumas maneiras. Acho que a melhor
maneira de escolher. Não. Isso reflete porque
com as enums, você tem uma variável. Nesse caso, um status. Cerca de três estados são combinados. Então, ele lhe dá uma boa visão geral quantos
estados você definiu em seu programa você
poderia abordar que era state é um modelo, por exemplo. E você também pode
imprimi-lo, imprimir o estado da linha. Mas agora você não chega aqui e uma string porque este
é apenas o nome da variável, isso significa que estamos chegando
aqui 0 porque é índice
0 quando estamos
configurando para pausar, então estamos recebendo e um, isso significa que o compilador escolhe o tipo de dados correto no enum, porque você também pode declarar
aqui algumas outras coisas. Mas eu não lhes dou valor, apenas definindo o estado. E isso é o que eu
acho que torna realmente conveniente
na programação. Vamos dar um exemplo um pouco mais para ver o que quero dizer aqui. Primeiro de tudo, eu disse
o estado normal e estamos imprimindo
o estado. Então, na primeira parada, eu gostaria de definir o protótipo da
função porque ele é realmente encontrado mais tarde no botão de verificação de função
E. Então, estamos simulando
algo como nosso programa espera por um clique Padrão e, em seguida, estamos
mudando os estados. Milhões mais livres porque
eu gostaria de
mudar depois de dois segundos para
ficar lá automaticamente. E, portanto, implementei a lógica Blink sem demora. Tenho certeza que todos
já lidaram com isso. E se não for assim por diante apenas o Google
Blink sem atrasar. Portanto, estamos sentados
aqui nos anos do meio. E depois de dois segundos, gostaria de mudar o
estado em fadiga de status, por
exemplo, acabamos de
terminar o botão de verificação. O final. Por exemplo, eu faço
o estado normal. Então, vamos ver. Estamos iniciando o programa Debra Thompson para
configurar a configuração Cs. Estamos mudando o estado
para começar normalmente. Eu diria que o cônjuge para a cônjuge estamos
imprimindo o primeiro estado, então estamos
pulando para o botão Check. O estado será alterado
para começar normalmente. Após dois segundos para o estado
será alterado para malhas de status. Então, temos aqui três estados
diferentes. E agora queremos também visualizá-lo em
impressos nos diferentes estados. Portanto, eu recomendaria
cidades e troca de caso. Caixa de troca. Queremos verificar o estado. Não estamos lidando
aqui com uma string. Então, portanto, poderíamos usar aqui, o caso começa normalmente. Estamos apenas escrevendo
aqui o nome da variável
e, em seguida, estamos escrevendo aqui. Vamos, por exemplo. Em seguida, o segundo caso começou
como passar ou quebrar. Pulsando para dentro. Agora é hora de pausa. O último está terminado. Meu caso, é a faculdade começa a estática e então
podemos fazer doping. Estamos acabados.
Um pouco mais de revisão. E então poderíamos apenas verificar. Se você tiver o direito ou não. O que faz o problema? Muitas vezes, atrasamos aqui. Excluir é bom. Estamos em T de 500 e
este é demais. Mais uma vez. Então, o que
temos aqui? Eu clico em pausá-lo
no primeiro começo, ele será impresso um porque o estado não é pausa. Índice Sera. Em seguida,
pulamos para o botão Check, verificamos as alterações do botão para
iniciar esse normal, normal. E depois, sim,
terminamos com a configuração. E então, no loop, esse não é o fato de
que estamos pulando, em qual caso, e agora
ele será impresso. Vamos porque eles
pensaram que isso não é uma milha. Após dois segundos,
o status
será alterado porque aqui em
um piscar de olhos sem demora, a
lógica entra e
definimos o estado
para fadiga do status. E então o status, oh, terminamos
onde o imprimimos. Este é apenas um pequeno caso, um caso rápido que
você pode ver como
podemos mudar o estado, ou também podemos verificar
o estado em um projeto. E como você pode ver, ele
lhe dá uma boa visão geral. Quais
estados diferentes temos e também como poderíamos mudá-lo?
10. Estrutura: Eu também usei
regularmente estruturas. Estruturas são realmente
uma maneira
conveniente resumir diferentes tipos de variáveis que diferentes
tipos de tipos de dados. Também eu chamaria isso e classe leve
menor. Então, como é, como podemos usar uma estratégia C plus plus
no ambiente Arduino? Por exemplo, podemos
digitar uma estrutura, depois damos a eles o nome
da estrutura, por exemplo, pessoa para baixo e
podemos definir algumas variáveis. Eu não tenho string,
nomeie uma idade inteira. Booleano é a cota
pessoal ou não. E apenas por exemplo, se razões de
saldo longo da conta em centavos de dólar. E é sempre uma boa
prática quando você está lidando com
saldos de conta, dinheiro, etc. Não calcule com carros alegóricos
porque é sempre o olho. Pode ser complicado quando
estamos calculando com carros alegóricos em relação à
casa decimal ou não é fácil. E, portanto, eu também
recomendaria que estejamos
calculando com, por exemplo, um sentido e depois visualizamos em dólares
normais. Mas aqui estamos lidando
com dólar, com estruturas. Por exemplo. Agora podíamos
vê-lo pessoa, pesada, mas esses colchetes
ponto-e-vírgula o nome dele. Por exemplo, y vírgula, o comando age 25, é codificado por vírgula. E então podemos sentar no saldo da conta
deles,
por exemplo, propósito. Depois, também podemos alterar seus diferentes
tipos de variáveis. Portanto, eu digito um ponto de pássaro
pesado, e agora eu poderia abordar a variável dentro,
por exemplo, um nome. Meu novo nome. Também sobre o ponto,
trimestre é falso. Estou imprimindo aqui. Qualquer um pelo nome e se
eu não estiver escrito mal, algo deve imprimir meu novo nome porque o
substituímos dos barcos Harry. E como você pode vê-lo, agora discutimos como
poderíamos definir um struct, como poderíamos inicializá-lo, e também como poderíamos mudar em
greves repentinas algumas coisas.
11. Configuração básica de um projeto vazio: Neste vídeo,
gostaria de mostrar
minhas configurações básicas e como
podemos criar um novo projeto em branco
no Visual Studio Code. Primeiro de tudo, se o espaço de trabalho e eu
clicarmos na plataforma, eu possuo menu, clico em abrir
e, em seguida, ele me mostrará qual é minha plataforma principal
ou et cetera. O que eu gostaria de
focar com você é que entrei em plataformas. E aqui a parcela, você vê minha
versão expressiva é 3.5. E, claro, quando você
mostrar, assista a este vídeo, talvez em um ou dois anos depois, é
claro, será
outra versão. E isso também pode acontecer
que alguns dos meus trechos de código não funcionem imediatamente
porque você fez algumas alterações. Portanto, é necessário
que você sempre
tenha em mente que precisa
adaptar certos tipos de códigos quando se trata
de atualizações da plataforma. Só que você sabe,
quando você os obteve erro de
compilação para ver
onde isso poderia acontecer. Além disso, discutimos em um vídeo
anterior, quadros estaduais, estou usando o
quadro de entrega da AEC, crianças surdas C4. E aqui você também pode
navegar pelos seus quadros. E quando você tem ESP 32 normal
, acho que você também pode pegar este ou você pode
procurar um ESP 32. Você encontra um tipo diferente de estruturas e
também fabricante. Agora vamos para os projetos
e eu deixaria sair em Casa, clicar em Novo projeto. E, por exemplo, eu
digito, OOP. Em Toronto. Estou selecionando as placas. Entrega ac. Estou usando o ID ou
a estrutura interna, e estou escolhendo
aqui minha localização. E isso é tudo o que
precisamos para fazê-los, clico em Concluir e meu
projeto será criado. E eu deixei aqui
no espaço de trabalho. Você pode ver aqui agora
meu 51, meu projeto. E a primeira coisa que estamos fazendo está aqui na plataforma. Abrimos aqui as
configurações gerais do projeto. E eu recomendo que você
faça as seguintes alterações. Estávamos adicionando velocidade oculta do
monitor, por exemplo, a 1152
soros, sera framework e a porta de
upload e monitor. A porta do monitor
ou a porta do seu dispositivo que você pode obter
da plataforma, você está conectando seu dispositivo
e clique aqui nos dispositivos. Então, conectando-se, clique em atualizar. E como você pode ver aqui, esta é a minha porta três é a razão pela qual eu sou editado
aqui e a plataforma. Também adiciono aqui e biblioteca
de terceiros. Chama-se AnalogWrite. No entanto, se o usarmos, mas aqui, essa é
uma das minhas coisas básicas. Eu sempre implemento. O gerente da biblioteca do sangue do IO é muito, muito bom. Assim, você pode clicar em suas
bibliotecas e, por exemplo, Adafruit, Neil pixel, apenas
para fins de treinamento. Você pode clicar nele. E aqui você pode
ver os exemplos, como você pode resolvê-lo
no código-fonte e
também na instalação. Por exemplo,
se você sempre tiver a versão atualizada
em uma versão específica, basta copiar
aqui esta linha, passar pelas tendências do laboratório
Deborah
e, em seguida, você pode incluí-la
em seu programa como normal. E esses bens para ir, para começar com isso. Seguro. No lado esquerdo,
temos aqui agora nosso menu que vamos
explorar,
e isso é tudo projeto
e, em seguida, uma fonte. Temos um arquivo com certeza. E também vou
trabalhar da Índia para colocar na frente de tudo
em primeiro lugar. Cabeçalho Justin de
suas credenciais, talvez sua
licença, etc. Introdução repetida em
uma data real. E então você está pronto para ir. Também é muito útil
quando você está digitando aqui as versões da sua plataforma. Então, também pessoas
de fora? Não. Quais foram suas configurações básicas e como você desenvolveu
com quais circunstâncias? Essas são apenas algumas
configurações que eu
faço quando estou iniciando
um novo projeto.
12. Estrutura de curso e encapsulamento de dados: Vamos começar com o básico
da estrutura da classe e também com o encapsulamento de dados
e o cara prático motor. Então eu gostaria de começar aqui
abrindo o CPP principal. E o que eu sugiro fazer é aqui escrevermos tudo em um arquivo apenas para fins de
treinamento. E a primeira coisa quando estamos declarando aulas é
que estamos digitando em aula. Em seguida, o nome da classe, colchetes
encaracolados abertos, suporte
encaracolado fechado. E no final, tem
que ser um ponto e vírgula. E essa é a estrutura básica
da classe que limita. Um elemento de classe também é
que estamos definindo aqui se sua função ou a variável é visível
para fora ou não. E isso poderia, isso é, hum, podemos fazer com o identificador público
e também com privado? Então, tudo o que vem
depois do privado é apenas, por exemplo, aqui temos
uma string chamada nome, e esses elementos
só são visíveis e acessíveis
dentro da classe. Neste próximo exemplo, podemos ter seu sobrenome. E, claro,
dentro da classe e dentro de todas as funções que
estamos definindo mais tarde, temos excesso
desses nomes de variáveis
e também o conteúdo da variável quando estamos usando aqui
algumas coisas públicas. E, claro, eu também poderia
digitar um nome de arquivo de string. Em seguida, temos x's nessas variáveis também
fora dessa classe, e fora dessa classe significa fora dessa estrutura. Quando instanciamos
o objeto mais
tarde, não é possível
acessar suas coisas
que estão em particular. Só temos
acesso a coisas que estamos definindo
na área pública. Isso é que estamos sempre cientes desse
tipo de mecanismo. E como isso é encapsulamento de
dados, isso significa que estamos
mostrando apenas dados no público, o que é acessível
de fora da classe. E isso também nos dá um recurso de
segurança porque podemos adicionar aqui algumas coisas muito
confidenciais, mas também é que você
não está inconscientemente
mudando aqui alguns dados. Portanto, não se trata
apenas de segurança de dados, mas também está em questão de segurança quando estamos usando aqui
privado e público. E o público, por exemplo, poderíamos usar sua string getName e podemos ver aqui
retornar um nome. E, como você pode ver, a função em si é pública de fora. E essa função pode
nos devolver aqui algumas variáveis
privadas. Isso é o que
aprenderemos mais tarde, getters e setters
para que possamos usar suas funções públicas para
obter elementos privados. Há também outra identificação que eu
gostaria de discutir com você e é
chamada de protegida. Protegido não é a maneira que
estamos usando mais tarde quando somos
herdadas algumas classes. Então isso significa que
na área protegida, podemos as variáveis aqui,
por exemplo, string, meu segundo nome
só é visível na classe
do aluno como
privado, lida como privada. Mas mais tarde, quando você dá a
alguém a biblioteca e
a biblioteca é herdada, os protegidos
atuam como um público. Isso significa que sua
classe principal será
tratada como privada, tudo o que
não está protegido. Mas mais tarde, é quando
alguém herdou, é usado como público. E isso é uma coisa boa
quando você está se desenvolvendo. E biblioteca, que mais tarde
será distribuída para outros desenvolvedores para que eles
possam fazer suas próprias
coisas com isso. Mas você gostaria de ter
protegido sua própria classe. Isso é o que
significa protegido e pode ser
muito, muito útil. Então conversamos um pouco sobre os diferentes tipos
de privado e público e protegido nos
identificamos, mas depois
veremos um pouco mais na
prática quando iniciarmos os objetos e também programar mais funcional para caber apenas em breve introdução, é
assim que configuramos uma
classe com o nome da classe, colchetes de
coluna e o
ponto e vírgula no final. E com o privado e o público, essa é a
maneira mais usual de programá-lo. Estamos definindo nossas
funções e variáveis.
13. Instância e construtor: Vamos agora nos concentrar no que é uma instância e o que
não é construtor. Então, antes de tudo, a borda do Arduino, estamos
colocando na frente de tudo. E também no tempo de configuração, eu recomendaria digitar
0 start porque depois talvez
não pensemos nisso. Então, estamos prontos para ir. Então, terminamos agora o
primeiro passo da nossa aula. Então, este é o nosso
projeto até agora. E agora queremos configurar no mundo real
da codificação nossa classe. Portanto,
iniciamos um objeto. E isso poderia ser feito
com o nome da classe,
depois o nome da variável do
objeto no meu caso, idioma,
depois alunos,
colchetes, depois alunos,
colchetes, colchetes abertos
fechados e ponto-e-vírgula. E lá vamos nós. Iniciamos nosso primeiro
objeto com o nome Eddie. Então eu estou pulando aqui
dentro da configuração. E ao digitar 80, tenho acesso a todos os membros
públicos da minha classe. E como você pode ver, não
consigo acessar o nome ou o sobrenome
porque isso está em particular. Então eu posso usar esta, a função que
defini aqui, e f x está sobre a função
para meus membros privados. Esta é uma maneira inconveniente, como podemos programar e como
podemos acessar aqui todos os elementos. Então, como segundo exemplo, podemos iniciar aqui
e o segundo objeto, e é chamado Julia. E como você pode ver também aqui, Julia dots recebe o nome. Podemos acessar aqui também a
mesma coisa da Trulia, mas não temos nenhum armazenamento de
dados até agora. Então, seria o próximo
passo para preencher aqui algumas, algumas cordas para que
você conheça também ouvir os nomes de nossos objetos. E é claro que poderíamos dizer que
ele definiria todos os meus dados. E eu poderia dizer
string, nomear um, último para string, e
assim por diante e assim por diante. E eu poderia invocar essa
função depois, mas essa não é a
maneira que eu quero fazê-lo. Porque para a primeira configuração, há uma construção como
se chama construtor. Este construtor nos leva nossas primeiras entradas quando iniciamos
o objeto. Como podemos definir
um construtor simplesmente adicionando o nome
da classe ao público. Portanto, não há valor de retorno. Nesse caso, é chamado de
aluno e inserção. Poderíamos dizer string,
FirstName, por exemplo. E então, como fizemos aqui, podemos dizer que os
nomes são privados. O membro será um,
recebe o primeiroNome. Então, este agora é nosso construtor. O construtor será invocado quando iniciarmos o objeto. E o objeto é iniciado aqui e, como você pode ver
agora, temos um erro porque este
agora precisa de um parâmetro de entrada. Portanto, eu poderia
dizer moradores e Julia. Então, só para ver, esse é um tipo diferente de fazer
é apenas a declaração
do nome e este é
o parâmetro de entrada. Agora, queremos obter o nome. Isto é, isso é um
retorno, um valor. Então, temos que cobri-lo aqui em impressão
serial, linha de impressão. E também podemos entrar na linha de impressão serial
frontal. Minha primeira aula. Em seguida, conecte-se aqui. Use pm, então T2 em
seu projeto. Para ver aqui no objeto certo é que o projeto certo
está aqui selecionado. Clicamos em verificar e
construímos o projeto
e, em seguida,
vamos carregá-lo. Assim, e também o monitor de soro
começaria imediatamente. E devemos obter agora
três linhas de saída e nosso monitor serial de primeira classe do que o nome Marco's
deve ser exibido. E também aqui, a Trulia
deve ser exibida. Parece tão bom. Até agora, tão bom. Sim, meus
marcadores de primeira classe e Trulia. Então, agora discutimos
o que é uma instância muitas vezes da classe e também
o que não é construtor.
14. Como Overloading o construtor: Também é frequentemente o
caso de não haver um requisito de que não precisemos
apenas de um construtor, seria realmente útil quando
tivermos um segundo ou terceiro, o que nos dá mais
oportunidade de ter mais
valores de entrada, por exemplo. Isso também é o que
podemos implementar para que possamos sobrecarregar o construtor
também são funções neste
é chamado de polimorfismo. E como poderíamos fazer isso? Nós apenas digitamos o
nome do construtor e definimos aqui. E segundo, ele tem
o mesmo nome, mas outros valores de entrada. Por exemplo, cata-vento
sua corda. Nome próprio. Por exemplo, podemos dizer aqui, o
nome é FirstName. E aqui também poderíamos fazer algo com o cata-vento você. Mas isso é apenas para fins
de treinamento. Rolando um pouco para baixo
e gostaria de mostrar, agora
posso inserir um número inteiro. E como você pode
ver, ambos os objetos, ambos os construtores funcionarão
porque este
invocará o primeiro é o
compilador também verifica,
ok, há apenas uma pirâmide, uma pirâmide corda
escura
que eu vai levar este. E o segundo tem
dois parlamento de entrada de que o
nosso primeiro é um número inteiro. O compilador
tomará o segundo. Isso não é uma maneira conveniente. Como poderia a profundidade do nosso programa? Porque muitas vezes é
o caso de precisarmos mais valores de entrada ao
mesmo tempo. Mas eu gostaria de fazer
aqui outro exemplo. Por exemplo, poderíamos
pegar sua string FirstName, string, LastName, sobrenome. E isso se chama muito. Esse sobrenome é o último. Então, descendo, agora, é
claro que recebo um erro
porque só
construímos com dois parâmetros
de entrada. E agora, como você pode ver, temos aqui um
objeto iniciado com um construtor, e este é o construtor
sobrecarregado. String, LastName,
retorno, sobrenome. Portanto, este é nosso
membro privado e podemos acessar o membro privado com nossa função pública,
obter o sobrenome. E estamos mudando aqui
getName para obter o LastName. E estamos compilando e
enviando para o nosso USBE 32. E quando tudo funciona bem, temos três linhas
em nossa cerimônia feitas. Minha primeira classe, o primeiroNome de Eddie insere apenas o
sobrenome de Julia. Então, vamos ver o que nosso
programa imprimirá. Concluído, faça o upload. Então
vamos abrir a cerimônia feita. Minha primeira classe, e é chamado de
marcadores como temos aqui. E estamos apenas
imprimindo o do último nome de
Julie e Julia. Como você pode ver, é isso que o construtor de
sobrecarga ou canal de
função permanece, e também como podemos usá-lo de maneira orientada a objetos.
15. Exercer a interação do cabeçalho e arquivos CPP: Neste vídeo, vamos
explorar a maneira
orientada a objetos um pouco mais e cobrindo todos os
aspectos do ambiente Arduino do, da maneira orientada a objetos. E, portanto,
sugiro que excluíssemos a classe e todos os objetos que foram definidos
no CPP principal. Porque queremos agora definir
seus cabeçalhos e arquivos CPP. E essa é a maneira padrão de
programar e codificar de forma orientada a
objetos. Mas antes de tudo, livre-se de todas as
coisas que
somos definidas e declaradas
aqui no arquivo principal do CPP. No entanto, se você
estiver em ED ou
no Visual Studio Code
agora na pasta principal, no meu caso, é
a pasta de origem. Criamos dois novos arquivos, e é chamado pessoa ponto
h para o arquivo de cabeçalho. E também novo arquivo
com pessoa dot cpp. Se você não estiver apenas
no canto superior direito, onde você pode criar um novo arquivo
no explorador de arquivos. E você também pode editar
aqui a extensão. E um dos primeiros passos que
sugiro clicar com o botão direito do mouse
na pessoa ponto h, dividir à direita até que
tenhamos os dois incêndios. No ambiente ou em um ambiente
C Plus Plus, é muito comum
não termos um arquivo
no arquivo de cabeçalho. Há minha definição de classe e os membros privados e públicos
e os protótipos de função. Um protótipo de função é
apenas
a declaração do parâmetro return e o nome da função.
Apenas uma visão geral. Ativado no arquivo CPP. Existe toda a lógica dentro de todas as partes de
execução. No CPP principal, estamos definindo o objeto e trabalhamos
quem é o objeto. Mas primeiro passo, gostaria de começar
com o arquivo de cabeçalho. No arquivo de cabeçalho, agora
poderíamos definir nossa classe como fizemos antes
no arquivo CPP principal. Portanto, estamos
fazendo aqui em classe,
pessoa, colchetes encaracolados, ponto e vírgula
aberto. E como fizemos antes, pude ver a
idade inteira privada em Detroit por nome. Eles eram do público, um construtor vazio,
por exemplo. E então temos função, é chamada de imprimir tudo. E como você pode ver, sem colchetes encaracolados,
apenas um ponto e vírgula. E este é o protótipo da
função. Desde o compilador
haverá na função print all in mas com o nome imprimir tudo
e nenhum parlamento de retorno. E a função em si
será declarada um
pouco mais tarde. Mas ainda não terminamos. Porque precisamos aqui também incluir arduino dot h para
que tenhamos excesso de todos. Existem os parâmetros
do ambiente, você sabe,. Vou mostrar um
pequeno porque se eu estiver tomando uma string
como um fonema, receberei um erro porque o C Plus Plus não conhece apenas caracteres
não poupadores. Portanto, incluímos aqui
ponto h e o erro desapareceu. Uma coisa que
também precisamos saber é seus dados incluem guardas,
nome Include Guard é, poderíamos dizer se n
definir e algum nome, eu sugeriria que
você chamá-lo da mesma forma que o arquivo apenas a idade da
pessoa definida subjacente. E se sim, o que foi? O que o
Guarda Include não está fazendo? Eles incluem guardas
mostra o compilador. Há algum arquivo
chamado pessoa ponto h. E se aqui estiver algum código já incluído,
não o inclua. E se devemos incluí-lo, não
há nenhuma pessoa ponto
h definido, então inclua-o. Então, precisamos incluir
a pessoa ponto h. É
claro que no domínio dot cpp
arquivo incluem ponto pessoal h. Então esta é a primeira vez que estou incluindo o ano todo o tribunal. Mas eu também incluí
no CPP ou no
CPP de uma pessoa inclui a pessoa ponto
h. E, como você pode ver, eu incluí duas vezes. E isso também, o compilador o
usará e dirá duas vezes, mas ainda incluímos guardas. Ele, só será usado uma
vez na primeira vez. Talvez aqui ele seja incluído. E então, neste momento, o compilador talvez veja um difícil, há uma definição de pessoa, idade já existente
e ele iria ignorá-la. E isso será um código
mais rápido e
também em curso mais limpo. Portanto, isso inclui guardas e ureia da definição de
classe. E este é até agora nosso arquivo de cabeçalho
finalizado. Agitamos parâmetros de função e sua declaração
das variáveis. Mas qual era essa a lógica. Então, na pessoa dot cpp, podemos definir sua
impressão em branco, ou por exemplo, linha de impressão
Sarah H. E podemos ver que temos aqui um erro
porque h não está definido. Por que é assim que isso
é apenas uma função. Não há referência de
que queremos
agir com a classe
da pessoa. Portanto, temos que
aderir ao nome da classe. Chama-se
Pontos duplos Pessoa, ponto duplo. E agora temos excesso de todos
os membros da classe. E, como você pode ver,
o erro desapareceu. E agora também estamos
agindo dentro da classe. Esta é a
razão pela qual também temos aqui o acesso
aos membros privados. E é isso. Até agora, implementamos
nossa primeira classe
no ambiente Arduino de uma
forma com o cabeçalho e o arquivo cpp.
16. Getter: Neste vídeo agora, queremos
discutir os getters e setters e o que podemos fazer agora toda vez que queremos
acessar membros privados, usar uma função pública funcional
que tenha acesso ao nosso, nosso membros públicos ou privados. Por exemplo, quando gostaríamos de
mudar , queimamos o ciclo de vida, algumas variáveis ou
também quando
queremos obter alguns dos membros
privados. Mas antes de
começarmos, queremos adicionar
mais algumas variáveis privadas que
possamos
usá-las em nossos exemplos. Por exemplo, uma
altura inteira apenas para virar String
LastName de
Barber, sexo de cordas. E também endereço String
para fins posteriores. String SIP country, código e um país de string. Até agora tão bom. E, como função mais tarde
, queremos usar a pessoa de
impressão, imprima os detalhes da
pessoa. E, claro, não
devemos imprimir algo diretamente
da classe. Devemos passar por
um valor de retorno. E depois,
no programa principal, devemos
imprimir algo para fins de depuração. Mas aqui é apenas
um propósito de treinamento. E eu diria que
isso seria bom. Agora não temos objeto. Queremos atribuir alguns
objetos via construtor. Portanto, estamos
adicionando aqui alguns sublinhados de
string de entradas para
que eu não misture os membros privados normais
e os mentores de empréstimos de entrada, eu diria para nome, string de
vírgula,
lastName subjacente, string . Agora, o que mais precisamos? Sim, altura, eu
diria que altura inteira. Isso parece bom. Copio todo o
construtor. Certo? Todo o construtor muda para o CPP da pessoa, cole-o. Depois,
excluo os
colchetes de ponto-e-vírgula abertos e fechados. E agora, como você pode ver, temos um erro porque queremos,
queremos, ou devemos ter que
identificar aqui o nome da classe
duplo-cego, ponto duplo. E agora temos acesso
a todos os nossos membros. Assine o nome. Esta é minha variável privada, serão passadas nossas entradas. Mas para a pontuação, para nome, depois sobrenome, sobrenome, basta usar o auto complete, sexo e sexo uma extremidade onde
a altura é altura. Então, vamos ver quaisquer erros. Sim, algo
escrito errado, por exemplo, o que é o que você
não gosta aqui? Aha, aha, aha, sem sublinhado. Então, o que estamos fazendo aqui, passamos os parâmetros de entrada
para nossas variáveis privadas. E isso será invocado
quando iniciarmos um objeto. Então, mudando para o nosso CPP principal, agora queremos adicionar
alguns novos objetos. Portanto, estamos
escrevendo pessoa, esse é o nome da classe
e o nome da variável para o objeto é chamado de pessoa AT. E dentro do
construtor Person , temos que
preencher nome, sobrenome, sexo e altura. Então Eddie, LastName,
telefone e moléculas. Eddie, por exemplo. Masculino, 180 centímetros. Claro, também podemos mudar o nome da altura
em centímetros. Seria um pouco
mais claro e limpo acordo com a segunda pessoa. É a pessoa do maconha. É chamado, mas sem gênero. E é apenas 25
centímetros mais alto. Pessoa não servida. Temos Julia Julia, mulher. E temos que esconder 175 mulheres dela e dizer,
certo, sim, feminino. Então, agora iniciamos
três objetos. E agora você pode ver também as principais vantagens
da maneira orientada a objetos, porque se você fizer
isso de uma maneira normal, você declarou
aqui 1234 variáveis. Claro que
também temos aqui
desviado, declarado aqui para vírus, mas para a segunda pessoa. Necessário também para variáveis oito em
resumo, então também aqui, agora temos 12 tipos diferentes de variáveis quando você deseja lidar com o código com
esse tipo de informação. A principal vantagem nas formas
orientadas a objetos que
temos aqui, nosso projeto. E atribuímos essas
informações ao nosso projeto. E, em segundo plano,
eles lidarão com gerenciamento de memória do
titular e
tudo com a declaração. É nisso,
acabamos eles blueprint
e o usamos repetidas
vezes quantas vezes tivermos uso de
memória e CPU,
para usarmos. Então agora acabamos de inicializá-lo. Mas também tínhamos alguns detalhes da pessoa
impressa. Esta função eu gostaria de
invocar null, portanto, pontos
Abby, e como você pode ver, eu tenho duas opções
porque só
temos aqui duas funções públicas. O construtor só
será invocado automaticamente quando
estivermos criando o objeto. Portanto, estou usando
os detalhes da pessoa, sem parâmetros de entrada. E estamos prontos para ir. Mas a mesma coisa
traz detalhes. E assim como Julia
quer imprimir aqui alguns dados. Uma coisa que eu senti falta de
voltar para pessoa, porque não
declaramos nenhuma dessas
funções até agora. Portanto, qual
pessoa, ponto duplo, títulos
duplos, detalhes da
pessoa impressa. Agora queremos usar esta função de impressão
serial f. função Print F é
muito conveniente. Podemos usar aqui e string. E depois que a vírgula chegar a
nomes de variáveis, por exemplo, gostaria de usar aqui o nome completo e
posso misturar seus textos. Por exemplo, nome. E este é um espaço reservado. Estava respondendo a esse espaço reservado. O nome muito capaz de
ser colocado automaticamente aqui. O espaço reservado. Agora também pode adicionar aqui
dentro da string. E segunda variável,
por exemplo, LastName, como também na string. E aqui, a segunda
variável será usada aqui para o
segundo espaço reservado. E como você pode ver, eu só, também posso usar
sua variável incerta. Não é realmente ciência de foguetes. Mas o que fazemos
agora quando estamos misturando suas cordas
e números inteiros? Além disso, isso não é problema para nós. Podemos usar aqui e d para
inteiro, adicionar algum espaço reservado. Uma pequena informação para você. Meu compilador e o código do
Visual Studio converterão automaticamente
a string em um char. E como sabemos no Arduino, há algo que eu posso encadear, mas em um C mais, além disso, não
há string,
há apenas caracteres. E, portanto, alguns
compiladores também precisam aqui em Come conversa
convertida em um char. Eu não preciso disso, mas se você
estiver em 3D, por exemplo, lhe der aqui o erro de compilação apenas adiciona às strings aqui,
veja a cadeia de
sublinhado subjacente STR. E então tudo
deve estar bem. Então, agora também
implementamos um excelente
suporte de impressão e detalhes. Vamos ver se estamos certos. Vou escrever um
projeto como você pode ver aqui.
Aqui está o aviso. Você deve alterar
sua string I-System, mas ela não está carregada, esperada. Mas é uma conversa implícita. É no meu caso,
tudo aluguel. Bem. Então, sucesso. Mostre-me o monitor serial. Reinicie. Temos tudo em uma linha
e podemos mudar isso. Bem, como estamos apenas no final
do texto
e da quebra de linha, para que tenhamos aqui
um pouco mais sobre melhor resultado do que nos conectar. Fique atento. Estamos perto do resultado. Agora tenho que imprimir
o botão de inicialização. É um comportamento estranho. Às vezes eu tenho que
liberá-lo através do
botão de inicialização, às vezes não. Mais uma vez, nova linha foi reiniciada. Aqui temos moléculas, LastName 86 m, altura
100, oitenta. E, como você pode ver, essas são as informações do
nosso construtor. E também aqui, e também aqui. Parabéns, você
implementou aqui construtor e também implementou ainda e função
getter.
17. Setter: Mas e se quisermos mudar a vida útil
atual do ciclo de vida do nosso programa,
algumas informações. E ainda não temos acesso
aos nossos membros aqui
porque, como você pode ver, não
consigo acessar aqui
, por exemplo, para nome é novo nome. Quando tentei compilar isso, receberei um erro
porque este é um membro privado é privado. Então, o que posso fazer agora? Posso usar aqui também algumas funções
públicas para acessá-lo. Então deixe-me ver o que
podemos fazer agora. Por exemplo, estamos
definindo aqui e sobrenome do conjunto
branco. E somos um
sublinhado de string LastName. E também conjunto branco H, inteiro h. Parece bom até agora. Então estamos
voltando para a nossa pessoa dot h nada pessoa
que H plus é CPP. E agora estamos
definindo aqui branco, vazio, definido, idade, idade inteira. E podemos ver que a vantagem
é sublinhado H. Poderíamos fazer isso também com o quê? Definir sobrenome
tomará um parlamento de entrada
a string LastName. E nós definimos no LastName
é sublinhado LastName. Qual é o problema? Mais uma vez, temos que atribuir a pessoa
solta, duplo-cego, pontos
duplos. E agora temos a referência
certa. Vamos voltar ao CPP principal. E agora eu poderia dizer,
por exemplo, 80. Eu diria o que definiu
h um até 55 anos. E poderíamos dizer que Julia definiu o
LastName, talvez ela se casasse. E então vemos aqui. Então deixe-me ver o que está aqui. Cordas certa idade. Qual é o problema aqui? Dentro desses contextos? Vamos experimentá-lo. Se houver algum erro. Não, parece bom para mim. Então nós o enviamos mais uma vez. E deixe-me ver se temos aqui alguma mudança reiniciada a
partir de quebra de linha clara. O que eu mudei até agora
é que Julia tem um novo, hum, último nome, mas
nós não atribuímos aqui o H. Então CPP da pessoa. Eu gostaria de
imprimir você também é o h. Então vamos aqui, H neste ponto, por exemplo, é um inteiro 123 h. E o que eu
gostaria de enfatizar aqui um pouco mais
por que fazemos isso com o setter e getter é que não só para buscar os dados
de nossos membros privados, também tem e uma boa maneira que podemos ouvir em alguma
lógica antes de inseri-lo. Por exemplo, poderíamos dizer que
se a idade for maior que 100, dissemos que o h
é 299, por exemplo, relação à
limitação do banco de dados ou qualquer outra coisa. Atribuímos a variável
aos nossos membros privados. Mais uma vez, fizemos o upload. E, como você pode ver, essa também é uma boa maneira de ver o QRA e também manter o nível de maior qualidade para toda a
nossa programação e gerenciamento de
dados flush para usar o PM. Agora, mais uma vez, nós mudamos aqui no plano de vida
atual, 155, definimos a idade, enquanto meu bot, e na configuração
adicionamos alguma lógica e tem aqui o 99 Julia
LastName MANOVA. Estamos designados para o seu
horror em primeiro lugar. E, em seguida,
nos segundos na configuração, adicionamos o
sobrenome ao malware. Este é o princípio de setters e getters na programação orientada a
objetos.
18. Herança: Também um dos principais
conceitos é que podemos herdar classe de
outra classe. Isso significa que temos blueprint,
alguns registros gerais. E então podemos usar
toda essa função, todas essas variáveis
em nossa classe. Então, quando você pesquisar um pouco
sobre a maneira orientada a objetos, um dos principais
exemplos é sempre em geral e geralmente aquecedor. E este veículo é de uma classe. E então você pode herdar e usar todas as funções e
adaptado a um carro esportivo para um SUV e dois
carros, carros, carros, etc que você tenha uma visão geral. É um código geral. E então você também pode especificar outras classes com
alguns códigos individuais. Mas também esse é o meu
caso que o que estamos usando muito é que nos
dá uma API. É chamada de interface
onde podemos usar em sala de aula para nosso próprio propósito e
adaptado ao nosso próprio propósito. Então, como poderíamos fazer
isso em nosso exemplo? Aqui temos nossos
objetos, nosso projeto, e estamos criando
aqui alguns novos arquivos porque agora queremos adicionar
à pessoa e ao cliente. E isso poderia fazer com o
novo cliente de arquivo que H e novo arquivo cliente ponto cpp. Estou trocando o cliente
que h para a direita. E agora podemos declarar
aqui todas as coisas
que fizemos antes. Primeiro, estamos começando
com o vírgula do cliente da
classe. Então precisamos aqui no
Arduino como antes. E precisamos incluir guardas porque mostrarei mais tarde. Isso é necessário. Mas como podemos fazer agora? Eles herdaram para a
pessoa da classe para o cliente. Portanto, uma pessoa pública de
ponto duplo. Agora temos um erro porque pessoa não está incluída aqui. Inclua pessoa ponto
h. E agora herdamos a
pessoa
com sucesso para a classe do cliente. E como você pode ver aqui, temos uma
pessoa que inclui H para incluir a
pessoa ponto h, A terceira. E é por isso que é necessário que tenhamos que incluir
guardas que
não foram incluídos o
repetidamente, todo o código. Então, nesta classe de clientes, também
poderíamos definir
suas próprias coisas privadas. Por exemplo,
ID do cliente inteiro, número inteiro, vendas, público, por exemplo,
ID do cliente, número inteiro. E também o que é realmente necessário quando
herdamos algo, precisamos usar o construtor
da nossa classe base. E como podemos fazer isso? Passamos ao cliente e dizemos que usar pessoa pessoal de
dupla ligação, isso significa que herdamos e usamos o mesmo construtor
em nossa classe herdada. Perfeito. Até agora, tão bom. O que fazemos agora é que estamos
voltando para o CPP do cliente. Inclua ponto h do cliente, inclua arduino dot h. E
podemos definir o seu
cliente branco duplo vínculo, dupla ligação, definir a
ideia do cliente, número inteiro. E você poderia dizer que o ID
do cliente é o número. Até agora, nada, especialmente
o que não vemos aqui, mas o que temos x's em
nosso cliente CBP é mais antigo. Ou o que podemos usar é toda a função que
já tínhamos aqui. Isso significa que podemos definir a idade, podemos definir o sobrenome, mas também podemos
imprimir os detalhes. Então, examinamos mais de
perto o arquivo CPP principal. Sob Julia, eu diria que
criamos um novo objeto
e é chamado cliente porque este é nosso novo
robô de classe herdada e é um cliente. S nós declaramos aqui, nós operamos. Estamos usando o
mesmo construtor. Isso significa que temos aqui
um robô ou um amigo usando uma agulha e ele é um. Os cinco. Olá. Dê uma
olhada mais de perto por que ele está quebrado? Porque não
incluímos esse cliente ponto h. E agora devemos chegar aqui
no cliente, cliente. Agora, agora está compilando. Então, iniciamos aqui e novo objeto,
chama-se Robert. E nós herdamos também
o construtor. Agora, eu gostaria de ouvir Robert imprimir detalhes da pessoa e enviá-los
novamente para nossa ESPN. E enquanto isso,
gostaria salientar mais uma vez que não declaramos aqui detalhes
da pessoa impressa. Isso será usado
automaticamente
a partir da pessoa dot h porque somos herdadas
todas as funções. Então, quando tudo
der certo, também
devemos obter todas as informações
do nosso robô. É a cerimônia de abertura feita. Vemos Robert sobrenome cassinos, idade, sexo e altura, 195. E somos
herdados com sucesso uma classe completa, adaptamos e também usamos a função
de nossa classe base. E, claro,
podemos usar aqui nosso próprio ID de cliente funcional
aceita. Assim, podemos definir também aqui robô set cliente
a disfunção só
está disponível no, na classe do cliente. E, portanto, eu poderia
dizer, por exemplo, 255. E funcionará
como fizemos antes. Portanto, o conceito é que estamos usando uma classe base
e herdamos para uma nova classe e usamos todas
as funções que são publicamente acessíveis
à nossa nova classe. Isso é o que é
herdado e por que o
usamos regularmente
de forma orientada a objetos.
19. Função herdada: E se, quando quisermos
usar os detalhes
pessoais impressos também
em nossa classe de clientes, porque na pessoa para você, faz todo o sentido que
imprima a idade, o sexo e a altura, mas
não como uma visão do cliente. E, portanto, podemos sobrecarregar
um oval ali mesmo, imprimir detalhes da pessoa em
nossa classe herdada, e isso é o que fazemos agora. Portanto,
entramos no cliente
essa vantagem e dizemos queremos adicionar
um número de vendas e nos livrar
da idade, sexo e tipo. Portanto, nossa
função auxiliar
chamaria set, resumiria as vendas. E estamos definindo vendas inteiras com uma impressão em branco
e subjacente. Todas as vendas. Como chamamos isso de
impressão de todas as impressões. Pessoa fantasia. É chamado de detalhes
pessoais impressos. Sim, isso é o que
queremos sobrescrever agora. Então agora está redeclarando
o cliente que H, podemos pular para o CPP do cliente. A primeira coisa será o cliente duplo-cego,
duplo-cego algumas células. E temos vendas inteiras. E estamos vendo as vendas, essa é a variável privada, está nessas vendas. Mas não estamos
adicionando aqui uma vantagem, então ele será resumido no CPP principal
que poderíamos usar aqui. Por exemplo, Robert, algumas vendas. 1505200. Gostaria de adicionar
aqui 150 novamente. Então temos
trezentos e cinco cinquenta, quinhentos e
cinquenta em um resumo. E isso deve ser impresso nos detalhes da pessoa de impressão
e nos detalhes da pessoa de impressão. Já
declaramos na pessoa, mas queremos nos livrar
da idade, sexo, etc. Portanto, estamos definindo
aqui mais uma vez essa função. Portanto, seja sobrecarregado,
imprima os detalhes da pessoa. E eu pulo de volta para o CPP
pessoal e copio todas as coisas que
fizemos aqui, cole-o. E eu gostaria de me
livrar desse. E essas vendas. Vendas. Isso é um número inteiro? Certo? Então, o que podemos ver? Agora? Vemos que
temos um erro em nome e sobrenome,
o que é chamado? É chamado. Não podemos acessar o nome
porque ele não foi declarado. Os x's não são proibidos. Por que isso? Então, vamos dar uma olhada no ponto do cliente h. Nós não declaramos aqui para nome ou sobrenome
porque ele é herdado. Não estamos nos reunindo. Não há necessidade de redeclará-lo. Então vamos dar uma
olhada pessoalmente ponto h. Isso é privado, e como sabemos, todo privado é
acessível apenas de pessoa, de um objeto,
da pessoa ponto h. Mas agora estamos em um cliente. Então,
herdamos, mas não temos acesso. O que podemos fazer como fizemos no primeiro começo do discurso? Conhecemos três membros de uma classe e poderíamos
mudar isso para protegê-la. O que está protegido agora? Protegido significa que ele é
privado na classe pessoal, mas é público para todas as classes
herdadas. E como você pode ver,
agora não temos nenhum erro. Isso realmente é uma boa
maneira porque alguém, talvez queira salvar todo
esse encapsulamento de dados
para sua própria classe. Mas não é desenvolvedor para projetos de
código aberto e diz, ok, você pode usar todas as minhas coisas. Mas, por favor, herdou
e editado do seu caminho. E com o estado protegido. Agora adotamos e sobrecarregamos a função de
detalhes de impressão. Mais uma vez, vamos
fazer o upload de todas as coisas, saltando de volta para o CPP principal. E agora o que mudou foi
que Eddie comprou e
realmente deve
imprimi-lo todos os detalhes da classe,
é claro, a pessoa. Devemos resumir aqui, as vendas e
imprimir a nova
função de vendas, nova linha. E como você pode ver, Robert tem sucesso apenas para nome, sobrenome e as vendas
que estão resumidas aqui. Este é um conceito principal que você pode sobrecarregar a função herdada. Esteja ciente dos membros protegidos
e públicos. E também poderíamos adicionar aqui
algumas das nossas próprias funções, mas também poderíamos sobrecarregá-la. E acho que isso é realmente
útil quando se trata desenvolvimento público e de
código aberto. Portanto, temos muito, muito potencial
onde podemos usá-lo. Então imprima detalhes da pessoa.
20. Introdução ao REAP OOP: Se você me seguiu ao longo de todas as etapas desses exercícios
práticos, posso parabenizá-lo
porque você aprendeu agora os conceitos básicos da abordagem orientada a
objetos, o que precisamos aqui em este curso online para
o ambiente Arduino. Esses são realmente
o básico básico. Gostaria de
fazer uma breve recapitulação para que possamos resumir
todos os aprendizados até agora. Primeiro de tudo, examinamos
mais de perto a sintaxe, como poderíamos definir uma classe, como podemos escrever uma classe e também o que é encapsulamento de
dados? Isso significa que com os membros públicos
e privados, mas também foi para protegê-lo. Uma vez. Depois,
iniciamos um objeto. Nós fizemos no arquivo principal. E também estamos
usando o construtor. Portanto, um primeiro parâmetro
de entrada poderia usar e definir nossos membros privados
no processo de iniciação. Então falamos sobre
o getter e setter. Então, como poderíamos usar a função
pública para
acessar membros privados e também como podemos alterar os dados da vida
útil do ciclo de vida durante nossa codificação. E depois, também
analisamos mais de perto a herança e como poderíamos herdar
classes em duas outras classes. Como poderíamos usar a classe, a função de classe herdada. Como poderíamos sobrecarregar a função, que somos herdados conceito
principal. E depois também tentamos
ouvir os diferentes tipos de encapsulamento de dados,
por exemplo, com
os protegidos para que tenhamos x's na classe herdada, mas não na classe base. Isso era para encontrar o básico. E agora estamos pulando
direto para nossos exercícios.
21. Cálculo da resistência da série: Vamos começar com
a parte de fiação. Temos do
lado direito, o ESP 32. A primeira coisa que
fazemos é
conectando o chão
à tábua de pão. E agora temos aqui um LED. E este LED tem dois coletores. O primeiro está lá, uma
ordem é o lado positivo, e também está lá, o pino de conexão lateral. E então temos a cartilagem. É a parte menos. E como você pode ver,
temos aqui e o resistor antes de
conectarmos os LEDs. E isso é necessário
porque limitamos demais a corrente básica para o LED. E como podemos fazer isso? Existem muitos sites
diferentes onde você pode
calculá-lo porque é necessário para cada cor diferente
que você implementa. Você tem que escolher
o resistor adequado. E isso é calculado com
um Arduino Uno com cinco vezes. Esteja ciente de que estamos usando aqui
neste exemplo e use ser 32. E costumava ser 32
tem uma tensão de saída, tensão no GPA ou de
rotunda, 3,3 volts. Portanto, temos que
adaptar aqui os valores que obtenhamos o
resistor adequado nos ohms adequados. Então, por exemplo,
vamos descer um pouco. Este é o cálculo completo. Então, temos que ver a
tensão geral é no nosso caso, 3,3 volts menos a
tensão no LED, porque queremos ter apenas uma certa quantidade de
tensão no LED para
que a corrente básica adequada
do O LED está no LED. E é por isso que temos que
fazer isso aqui e calcular. Então, vamos pular direto para ele. Por exemplo. Queremos calcular para
o LED vermelho esse resistor. Portanto, estamos dizendo que
a tensão principal é de 3,3 volts menos 1,6 palavras para
o LED e o resto,
a tensão de 1,7
deve ou deve cair para o resistor. Então, quando o
acompanhamento de 1,7 volts do resistor, o LED só obtém 1,6 volts
e também 0,02 amperes. E é disso que precisamos. Então, não terminamos agora é nosso cálculo porque
só temos aqui a tensão que
se dobra no resistor. Então temos 1,7 volts divididos
duas correntes básicas ou principais. Isso é 0,02 e passe. E, como resultado, estamos recebendo, vamos
dar uma olhada mais de perto. 58 ohms. Então, como você pode ver, há uma pequena diferença. Mas nos contextos principais, eu sugeriria que você use, por
exemplo, também
a melodia de 20 ohms. Não pode ser danificado ou não deve
danificar devido a LEDs. Mas não brilha, ou é,
é tão brilhante porque não
consegue obter a voltagem total. Mas no meu caso, também
usei, acho que 220 ou 110
ohms para todos eles. Apenas para fins de treinamento, é mais fácil de usar quando você está em um ambiente
produtivo. Eu recomendo que você realmente calcule
exatamente o resistor exatamente ohms porque também refere à durabilidade ou vida útil do LED
e dos componentes. Então agora estamos sabendo
sobre o resistor. Vamos verificar como podemos
conectar tudo juntos. Na sua opinião, como você
verifica se é um pino de saída? E então você
conecta o pino de saída do ESP 32 ao resistor, o resistor à
lista não ordenada, a parte mais longa. E então você conecta a
segunda parte do cátodo às
partes menos ou terra. E é isso. Pegue o máximo ou
quantos LEDs quiser. Eu tenho aqui 3691215 LEDs. Então, ele mostra
um pouco mais o que podemos fazer com a abordagem orientada a
objetos. E quando você só tem
dois ou três LEDs, não
é tanto. Está tudo bem. E, mas você vê as principais vantagens quando você está adicionando cinco ou mais
LEDs ao seu projeto.
22. Controle o LED com um objeto: Vamos agora adicionar algumas
funcionalidades ao nosso programa. Primeiro de tudo, clique com o
botão direito do mouse nas tampas ponto h e divide para escrever para
que tenhamos no lado direito
o arquivo de cabeçalho. E estamos abrindo no lado
esquerdo para excluir o ponto CPP. E como eles são, queremos adicionar a
funcionalidade. Primeiro de tudo, inclua o LED é ponto h para que tenhamos acesso
aos nossos elementos de classe. Como próximo ponto,
eu recomendaria incluir o arduino
dot h
para que tenhamos todos os acessos ao
ambiente Arduino aqui. Primeiro de tudo, gostaria de
definir o construtor. O construtor é
o método principal que será
invocado quando estivermos criando o objeto mais tarde
no ponto principal cpp. Portanto, o construtor tem aqui e parâmetro de entrada e
é chamado de pino inteiro. Então, somos LEDs, LEDs como o
nome da classe é chamado. E então estamos chamando
o construtor. É o mesmo nome do nome
da classe. Então temos um parlamento
de entrada. Chama-se Pin,
colchetes encaracolados abertos, fechados. Então, temos aqui
nossa funcionalidade. O que estamos fazendo agora
com o construtor? O construtor pega o número do
pino, o braço do GPO. E então salvamos o número do pino no pino variável particular, LED, pino, ele lá, pino. E então ele é salvo
na classe. E mais tarde, podemos
desligá-lo, ligá-lo. E isso era diferentes
tipos de objetos. E na segunda parte, eu recomendaria
que estejamos acessando ou definindo o PinMode
com o veado Pinellia. E é uma saída porque
temos LEDs e
queremos recompensas de títulos desta semana no GPIO. Portanto, o PinMode
também pode ser chamado fora da função de configuração porque
depois eu os abri. Podemos aqui criar um objeto, por
exemplo, tampas, branco e, em seguida,
os colchetes encaracolados, o construtor será
invocado e branco, o primeiro está no GPO 12º, no meu caso, fechando colchetes. E agora criamos
nosso primeiro objeto. É chamado
de branco dos LEDs de classe com o construtor
12º inteiro. E então temos aqui os conjuntos, o LED de pino variável privado, e definimos o modo pin. Mais uma vez, por que
podemos acessar aqui, a variável privada, porque estamos lidando
aqui dentro da classe. Não podemos acessar um
LED de pinos com isso muito real, isso não é possível. Então por diante. Agora, queremos adicionar
a funcionalidade. Por exemplo, poderíamos continuar,
ativar e desativar os
suportes encaracolados. E assim poderíamos dizer LED de pino
digital alto. E estamos recebendo aqui uma flecha enquanto
ela é própria porque
definimos aqui E
função em tampas ponto CPP. Mas não é nossa vez
da classe. Portanto, precisamos identificar que estão na frente da função. É o nome da classe,
duplo-cego, ponto duplo. E agora a confiabilidade é
reconhecida e podemos
ativar o LED
como uma função x. Nós o desligaríamos. Está desligado. Direitos digitais, LED de pinos e baixo. Recebi um erro extra. Por que isso é assim porque
desligue a orelha e o parâmetro de entrada. E isso também é para fins
de treinamento. Por que é tão analógico de touro, analógico de pobre log de e
como mencionamos antes, não misture
branco analógico e digital e, portanto, passo aqui e
bool variável que podemos verificar se
analógico de seu verdadeiro. Então temos que desligar
o LED com analógico. Direita no pino inferior
direito LED 0. Caso contrário, poderíamos usar direitos
digitais. Então, no próximo, o próximo erro surge aqui porque o AnalogWrite
não está definido. Por que isso? Então, como eu não o
incluí, temos que incluir
outro ponto certo h. E agora somos medo
e lógica simples. Com a função de desativação, passamos aqui
e verdadeiro ou falso. Se for verdade, desligamos o
LED com amilorida. Tal como acontece com o DigitalWrite, o AnalogWrite que
estamos usando mais tarde para desaparecer ou quatro. Diga os detectores para que possamos definir a luz em diferentes
tipos de aspectos. Tão um pouco tímido ou
desbotado e não apenas carne com a
quantidade total de brilho. Esta é a razão pela qual estou aqui. Indo um pequeno desvio para
mostrar como podemos também passar alguns parâmetros de
entrada, etc. Então agora temos aqui a
funcionalidade dentro do construtor. Ativamos a função
e a função de desligamento. E agora eu gostaria de
implementá-lo em nosso projeto principal. Então aqui, o branco já
está definido. Agora posso ir aqui
digitando ponto branco. E aqui você pode ver
todas
as funções definidas
no arquivo de cabeçalho. Mas você só já
adicionou alguma lógica para ativar. E no loop estamos fazendo
aqui e atrasamos apenas para
fins de treinamento por cinco segundos. E então podemos dizer um branco, desligar, colchetes ligados. E aqui temos
a sugestão. Por favor, nos dê aqui
na variável bull. E eu posso reconhecer, aha, do que é análogo bool? Quando você descreve
seu muito rico, muito bem, então você
não precisa pensar sobre o que eu quis dizer aqui? Analógico de é falso porque não
temos o digital certo. E isso deve funcionar
para o primeiro exemplo. Então eu sugeriria que
estamos clicando na mesa. Conectei minha
tábua de pão com meu PC. Este é um esboço antigo
que está sendo executado. Então eu a carne. Primeiro de tudo,
verifico com o compilador. Se eu tiver algo
escrito incorretamente não é. Parece que as mercadorias
carregam todo o esboço e clicando no botão para
liberar a coisa toda. Agora ele está fazendo upload e, em seguida,
só deve ser bem-sucedido. Eu tenho o programa falso. Tenho que mudar para LEDs
para a parte inglesa, mais
uma vez, fazer
o upload do projeto certo. Você vê aqui que você pode alterar
o diretório do projeto. E porque eu abri aqui, muitas
opções diferentes para nossos projetos. Conectando, mais uma vez, colocando. E agora apenas o primeiro LED, o branco deve ser carnudo, deve ser
ligado, como você pode ver, após cinco segundos, ele
deve desligar muito bem. Então agora você talvez diria:
Ok, faz sentido, mas é muito mais códigos
para escrever do que estou acostumado. Eu também poderia
defini-lo aqui. Isso mesmo, mas espere. Agora podemos continuar e dizer, por exemplo, mais dois LEDs. Por exemplo, verde um vermelho, um ano os pinos adequados. Você poderia dizer verde um ligar, vermelho ligado,
que funcionou. E também aqui após o atraso, estamos dizendo que o verde e o vermelho
devem desligar. Clique com o botão direito do mouse em
Formatar E então sinto muito, LED deve ligar e
depois de cinco segundos, ele deve desligar. Inicializando mais uma vez. E como você pode ver aqui, parece que
alguns LEDs estão acesos. Vamos considerar três
LEDs e depois cinco segundos, que se apagam. Perfeito, nosso esboço funciona, mas parece
que eles estão ligados, mas isso é porque eu tenho alguns holofotes e
isso é o reflexo disso. Então, está desligado. Mais uma vez. Reinicie o ESPN. Como você pode ver, os três LEDs, que somos declarados aqui acontecendo e depois
disso, estão desligados. Essa é uma maneira fácil. Gostaria de
visualizar como a maneira orientada a objetos tem muitas vantagens porque
aqui temos um padrão. Com esse padrão,
podemos abordar muitos, quantos LEDs quisermos. E quando
gostaríamos de mudar algo
na parte de desligamento, só
temos que fazê-lo aqui e todos os
LEDs são afetados. No próximo vídeo, gostaríamos de adicionar mais
algumas funções para que
você possa ver que também
podemos usar diferentes tipos de
funções para os LEDs.
23. Arquivo de cabeçalho: Sinto um novo projeto
no Visual Studio Code. E você pode me seguir junto com o
outro intermediário, basta criar um novo projeto. Então eu incluí
na biblioteca de
direitos analógicos de arquivos principal precisávamos porque queremos usar um PBM GPIOs para que possamos definir a tensão de saída em diferentes tipos de slots
para que possamos desaparecer, por exemplo, nossos LEDs. Esteja ciente quando estamos
usando bibliotecas externas. Também plataforma GoTo. E faça a referência para
a dependência da biblioteca aqui. Além disso, quando você está com o EDA, então você pode usar aqui
no lado esquerdo, o gerenciador de biblioteca e
inclui o analógico, certo? Não tenho certeza se ele
já está incluído no núcleo
do ASPE 30 para apenas fazer um
teste quando você está compilando, então você deve obter
sucesso ou um erro. Então você precisa adicionar
a biblioteca. Então por diante. Então, como expoente, vamos para o diretório
fonte e criando dois novos arquivos. Estamos começando com
o arquivo de cabeçalho, e é chamado de ponto
h do LED e da mesma
forma que estamos
adicionando tampas de arquivo CPP ponto CPP. Certo? Estamos começando com
Declaração ou definindo as coisas nos
LEDs no arquivo de cabeçalho. Os arquivos de cabeçalho
dão uma boa visão geral de quais variáveis usamos e quais funções
estamos implementando mais tarde nos LEDs ponto CPP, minhas abordagens somos, estou usando o projeto finalizado e cole tudo em
riquezas no arquivo de cabeçalho. Porque então você
tem uma boa visão geral do que estamos desenvolvendo agora. É aqui que eu acho uma boa vantagem
incrível na programação. Quando você é trocado com
alguns outros programadores, detector de
codificadores, exclui dados, fornece uma boa visão geral
do projeto. Então, antes de tudo, estamos fazendo os Guardas Incluídos. Se N def LED for prejudicial é minha abordagem, ela é chamada é
a mesma que o arquivo. Em seguida, defina as tampas no final. E se for um pequeno lembrete, o Include Guard
nos ajuda que o código é implementado
apenas uma vez a
partir do compilador. Então, quando estamos usando
muitas inclusões
dos LEDs punk star,
o programa verifica. Você já está implementado? Quando não implementado? Se sim, eles não serão implementados. Mais uma vez,
eu também recomendo que você pule
para o arquivo principal e faça os LEDs de inclusão ponto h para
que estejamos preparados para
as partes de programação. Quando estamos incluindo
o arquivo de cabeçalho, o arquivo CPP também será incluído
automaticamente. Saltando de volta para LEDs ponto h. E agora estamos
começando por declarar nossa classe. Suportes encaracolados abertos, colchetes
encaracolados fechados e um
ponto e vírgula no final. Até agora, tão bom. Em seguida, estamos digitando em
privado e público. E agora poderíamos começar
com a declaração. Uma coisa está faltando
e temos que
incluir esse arduino
ponto h. Por que isso é
assim, para que tenhamos acesso a todas as outras funções a
partir de seu ambiente. Então, estamos começando com
as variáveis privadas, então fixe o LED e, em seguida,
temos brilho. Então temos um
número inteiro de desvanecimento. E temos modos de cruzada de ano e
bool. Então eu adicionei aqui
cinco pulmões não assinados. E tenho certeza que você já conhece o Blink sem
atrasar a funcionalidade. E, claro, eu só
tive que implementar uma, acho que uma versão anterior, mas eu quero ter certeza e salvar. Então eu implementei cinco deles porque mais tarde
temos um tipo diferente de mecanismo de controle para os primeiros dias e, portanto,
estamos de forma segura. Certo? A parte pública, temos aqui muita função que
vamos implementá-la mais tarde. Estou apenas colando com
o botão direito do mouse e podemos dizer Formatar documento. Estamos usando um construtor
ligar e desligar a função. E a
função de desligar também tem um parlamento de entrada e análogo de
pool porque não
devemos misturar. Isso é apenas um lembrete. Não misture analógico
e digital, certo? É o mesmo LED que realmente
não funciona. Apenas decida se você o
ativaria com o DigitalWrite. Também gire ele oferece
digital direito, e é o mesmo
que analógico, certo? Portanto, temos uma
função e verificamos, você
está ligado com
analógico de ou não? Assim, podemos verificar esse
desvanecimento com milissegundos. Temos uma
função alvo, função f. Estamos usando nosso desligamento
após uma função de atraso. Vamos dizer que são os LEDs
e também não definimos para o modo
pulsar para que
possamos configurá-lo no loop. E isso é tudo que permite que você possa ver. Aqui. Ele apenas nos dá
uma visão geral muito boa qual função
implementaremos mais tarde. Até agora tão bom. E no próximo vídeo,
estamos começando
definindo nossas primeiras
funções no final,
é o arquivo dot cpp.
24. LED Toggle: Neste vídeo agora queremos
adicionar e funcionar, o que liga ou desliga nosso LED. E isso foi, em vez disso,
onde não sabemos, está ligado ou desligado? Portanto, deve ser
automático, automaticamente. Identifique se está ligado ou não. Então, a função de destino, estamos aqui nos LEDs ponto
CPP e eu digito em branco. É ligar e desligar
os suportes. Então, agora estamos escrevendo
seu pino direito digital LED n-tier, por
exemplo, Olá ou baixo. Mas agora eu quero ter
o status do LED. Eu quero que você saiba disso.
Portanto, poderíamos dizer digital, fixá-lo lá. E o LED de pino
nos faz referência ou nos devolve se o
GPA ou está ligado ou não. Então, se o LED estiver
piscando e R estiver ligado, e estamos escrevendo LED de pino de
leitura digital aqui. Estamos cortando mais alto. Então, ele nos entrega, por exemplo, alto ou baixo. Mas eu gostaria agora de
ter o oposto disso. Portanto, eu poderia fazer
um ponto de exclamação. E isso vai
inverter meus sinais. Então, se eu chegar aqui de volta e mais alto com dois
pontos de exclamação, ele estará em baixo. E isso é extremamente
útil porque agora podemos adicionar a
leitura digital e invertida. Então, se estamos ficando altos, então o LED está aceso, estamos chegando aqui a parte
alta V o inverteu. Então, estamos ficando baixos e a direita digital
desliga o LED. Por outro lado, se for baixo, as leituras digitais nos
devolvem e diminuem. Nós o invertemos. E então não estamos chapados. Função muito conveniente. E para que possamos saltar de
volta aqui para os LEDs, ver a parte principal. E agora estamos nos
livrando do atraso porque atrasos são sempre ruins
quando você está codificando. Por exemplo, quando
estamos de acordo com transferência
MQTT na transmissão
ou nós motores de passo, há uma necessidade
na função de loop. Ou seja, as funções
sempre têm conexão. E se estamos aqui
trabalhando com atrasos, a conexão tem
problemas para continuar. E, portanto, o programa
não funcionará muito bem. Ou, no caso,
não funcionará de qualquer forma. Portanto, é
necessariamente se livrar
do , dos atrasos. E agora estamos querendo
implementar aqui E função que liga ou desliga nossos LEDs a cada dois segundos. Portanto, estamos usando a lógica
Blink sem demora. E tenho certeza que você já
ouviu disfunção, mas expliquei
aqui mais uma vez. Então, estamos precisando aqui da vida útil atual
do programa. Então, o ciclo de vida aqui
é em milissegundos. O Millis anterior
não está definido aqui. Então, vamos até a parte
superior e definindo um longo
não assinado porque os milhões
anteriores podem ser um número muito grande, pois estamos
falando em milissegundos. Por isso, é recomendável que você use
e seja longo e não um inteiro. Então, como essa lógica funciona
em apenas alguns termos. Por exemplo, temos
aqui 1 segundo de vida útil. Se o código 1 segundo
for mil, mil milissegundos com seus 1000s Millis anteriores é 01 menos 0 é 1000. Mil não é
maior que dois mil, dois mil n,
por exemplo, dez. Então temos 2010 é
maior que 2000. E essa lógica,
se a condição for verdadeira e o código aqui
for invocado, então uma coisa está faltando. Estamos retornando a aldeia
anterior para os Millis atuais porque
na próxima etapa, por exemplo, 2050 menos 2010, porque esta foi a última vez que
a condição if era verdadeira, então temos a nova condição
não é superior a 2000. Mas, por exemplo,
se 1 segundo depois, 3.050 menos 2010 não for
maior que 2000. Mas, por exemplo,
nos próximos dois segundos, para milhares, 50 menos 2010
é maior que 2 mil. É verdade. E o Millis anterior
será definido como 44.050 e assim por diante. E, portanto, temos uma lógica fácil
para cada dois segundos. Mas queremos alternar nossos
LEDs. Como podemos fazer isso? Por exemplo, escrever um branco, criança pequena, vermelho, alternado. E o que foi isso?
Era o vermelho, o verde. Você pode ver uma
lógica simples onde
podemos ligar e
desligar aqui os LEDs. E, claro, na função de
alternância, não
estou verificando se é
analógico ou digital, certo? Também é para
fins de treinamento
visualizar o que é possível com parâmetros de
entrada, etc Mas aqui, basta alternar os LEDs, mudar o projeto
para o projeto certo. Então vamos ver se
temos algo mal escrito
ou se o compilador nos
dá um sinal verde, sim. Em seguida, carregue todo o programa. Dependendo da
câmera de mesa, onde estamos? Lá vamos nós. E, como você pode ver, o programa está fazendo upload. Nada é. Já o enviamos
e, a cada dois segundos, os LEDs acenderão e
desligarão. Então você pode se perguntar, ok, coisa
legal, mas eu também poderia gerenciar isso com alguma
função aqui fora. Por exemplo, alternar branco
e, em seguida, invocá-lo. E para branco, vermelho e
verde, isso é verdade. Mas mais tarde, quando você estiver usando diferentes tipos de
Millis anteriores, por exemplo, com diferentes vida útil
e ciclos de vida, você obtém todo o potencial da maneira orientada a objetos. Este é apenas um primeiro
passo mais fácil que você pode ver o que é possível e quão flexível é a maneira orientada a
objetos.
25. Gire o LED depois de x segundos: Neste vídeo agora,
queremos adicionar as funções turn after delay. Então os três LEDs alternam aqui. Desde que começamos a USP. Então detune, tudo bem. E agora queremos adicionar mais
três LEDs às entidades
de esboço. Três LED devem desligar após um número de atraso
específico específico. E é isso que
queremos implementar agora. Portanto, saltamos para
as elites LED dot cpp. Copio toda a função
do arquivo de cabeçalho é para que tenhamos aqui eles estão exatamente copiando a
declaração. Vamos dupla ligação, ligações duplas, suportes
encaracolados abertos e fechados. E então temos aqui a função que
desliga após o atraso. Tem dois
medidores de potência de entrada, dez milissegundos, para que possamos
escolher cada entidade, quanto tempo ela deve ser ligada e também se estiver
ligada com analógico de ou não. Portanto,
temos que implementar também o princípio Blink sem
demora ou uma lógica, mas um pouco diferente. Agora, antes de tudo, queremos ter os
Millis atuais, nada de novo aqui. Mas se a condição que temos agora
aqui, algo mudou. Tomamos os
Millis atuais e os Millis
anteriores,
vou encurtar. Está aqui definido
no privado. Podemos usá-lo você
também em inglês. Por exemplo, desligue. E agora dizemos que
diferente
do Millis atual menos
o
desligamento anterior do Millis é menor que
os milissegundos, que passamos para
o parâmetro de entrada. E também algo novo está
aqui porque não queremos redefinir o
ministro anterior e desligar. Então, como fizemos antes, dissemos que esse
desvio de milhões é minutos atuais, mas não redefinimos o
Oriente Médio anterior. Por quê? Porque só queremos uma vez que essa lógica seja executada. Então, mas queremos a
outra parte disso. E na
parte mais, dizemos
desligar o LED com analógico de. Então, desligar é a função que é
referida aqui
em nossa classe LED. E o desligamento leva um verdadeiro ou falso e configura o LED do pino, que definimos antes. E é isso. É isso. O que temos aqui
incluído na lógica. Vamos para o arquivo CPP principal. E agora eu gostaria de
adicionar aqui mais LEDs. Portanto, eu LED é azul, um está no meu GPO, 16. Então eu tenho LED vermelho, um está no 15. Já tenho isso. Eu quero um amarelo no 19, e eu quero que a
ferramenta branca esteja no GPIO 14. Então eu ligo as
luzes LED para ligar. Azul ligado. E o amarelo liga. Claro, eu também poderia
ativá-lo aqui nesta parte, isto é, depende do que
você gostaria de implementar. E também, gosto de manter meu
código o mais geral possível. E é chamado de desligar após atraso quando mudamos o nome. Então, é mais obviamente
ligado e desligado após um atraso. Então você também pode
adicionar aqui, por exemplo, que você não precisa
ativá-lo com uma linha separada. Então você também pode ligar ou desligar após o
atraso, por exemplo. Mas eu gostaria de
ter isso mais geral. Então eu só ligo. Então esta parte é a alternância ligada e desligada,
o que fizemos antes. E agora posso dizer branco para desligar após
atrasar o suporte aberto. Agora vejo dois parâmetros,
o número inteiro milissegundos. Quero desligar o
primeiro depois de dois segundos, e não é com analógico. Olhe certo? Opa. Então eu tenho o azul
e respondi um. Chama-se amarelo. O azul deve
desligar após quatro segundos, termina o amarelo
após dez segundos. Então, temos aqui dois ou mais processos
simultaneamente
acontecendo onde a FEA, a piscar e a
alternância a cada dois segundos. E também o branco
para o azul e o amarelo devem
desligar após um tempo específico. Vamos ver o que o
compilador diz. Se você tem alguma área de
derramamento em algum lugar, parece bom até agora. Então aqui temos o
esboço piscando acontecendo. Em seguida, estamos clicando em envios. Clicar no botão para
que ele possa ser lavado. Botão Nth Now. Deixe-me encarná-lo agora. Levou a desligar mais azul
após dois segundos. Depois de quatro segundos. Depois de dez segundos. Sim. E estes são aqueles no
loop, que temos aqui, alternam até que o infinito
seja loop infinito. Então, mais uma vez, estamos
reiniciando o programa. O branco é, o Y2 é após dois segundos do azul
após quatro segundos, e o LED ficará amarelo
um após dez segundos. E você vê que o processo paralelo com a alternância está acontecendo. E eu acho que este é apenas um bom exemplo de que
você pode ver como a maneira
orientada a objetos o suporta
quando se trata diferentes tipos de
processos ao mesmo tempo. Isso realmente ao mesmo tempo. Mas você pode ver que
não há diferença, uma diferença
visual. Então, se você implementou esse tipo de lógica de maneira
normal com a fábrica, então você tinha que definir aqui três
Millis anteriores diferentes porque você precisa de diferentes tipos de lógica. Pisque sem atrasos,
porque aqui
temos dois segundos,
quatro em dez segundos. E como você pode ver, você tem que
escrever três funções com quase a mesma lógica
, mas não as mesmas variáveis. E isso não é bom quando reproduzimos código para
a mesma coisa. Nunca é uma boa ideia
porque agora tenho um padrão aqui que eu poderia mudá-lo como
eu gostaria. E como você pode ver,
apenas com uma linha, podemos ativar e
invocar essa função. Então aqui temos o primeiro exemplo de nossa maneira orientada a
objetos.
26. Fading: Agora queremos
implementar e desvanecer. Desvanecendo. Fading significa
que ligamos o LED passo a passo em valores pequenos para que possamos
desligá-lo mais suavemente. E, portanto,
vou para as tampas ponto CPP e estamos implementando
fade on function. Copiei este.
Então o digitar em brancos leva duplo-cego,
duplo-cego, cole-o. Tenho aqui a função. Nesta função,
estamos implementando nossa lógica Blink sem demora. Portanto, tenho aqui
os atuais Millis. E agora estamos entrando da
mesma forma que fizemos no loop. Isso significa que temos
seus Millis atuais, estamos acessando os imóveis
anteriores. Veja, este é um tipo
diferente de variável que estamos recebendo estão
passando por cima da função, o Oriente Médio em segundos. Isso significa que, por exemplo, cada dois segundos, três segundos, essa
lógica será invocada. E nesta função, agora, podemos configurar o
milissegundo anterior é
o Millis atual
para que estejamos inserindo a condição
repetidas vezes. Agora dizemos que se o brilho for, é 25, então menos de 255, então poderíamos
aumentar o valor deles. E isso poderia estar fazendo,
por exemplo, primeiro, estamos imprimindo o
nível de brilho. E então vemos
outro olhar, certo? Estamos vendo o LED do pino e temos profundidade, valor de
brilho. O brilho é definido para dois soro no
início, certo? E depois
aumentamos o valor
do brilho pela quantidade
de desvanecimento. E a ferida fatal também está em variável
privada
que temos aqui. E o inquérito está definido como cinco. Isso significa que cada
linha ou cada loop. Aumentamos o
brilho em cinco. Portanto, o LED deve aumentar o
nível de brilho passo a passo. Até agora tão bom. Clique com o botão direito do mouse E implementamos
nossa função pés na função aqui. Analogwrite também pode
ter valor declarado, afirmar. Por exemplo, o
valor máximo disso depende de qual biblioteca você usar, mas também deve funcionar
com dois parâmetros. Então vou voltar
para o loop principal. E eu tenho que
inicializá-lo para mais objetos. Eu diria que estamos
coletando. Deixe-me ver. Estou pegando a tela LED
dois no pino, verde para 25, e estamos
adicionando a ferramenta azul. E está no GPIO 17. Então, no final do loop, estamos deixando
tudo como antes. Então temos aqui nossas
três alternâncias, hora, três LEDs que desligam
após os últimos segundos. E agora estamos vendo
verde desaparecer, por
exemplo, para um
que está em milissegundos. E temos azul para desaparecer
em 600 milissegundos. Até agora, tão bom, seguro. Vamos ver o que o
compilador diz. Se escrevermos
algo errado ou não. Então estamos ligando
a câmera. Parece bom. Então, enviamos o esboço e rubor é resistente para eles. Agora, todos os processos
devem ser invocados. Sim, e como você pode ver, essas duas funções aqui temos a verde
e a azul. O azul aumenta
600 milissegundos, cinco passos, o verde
é um pouco mais rápido. V3 estão alternando e os outros já
estão desligados. Então, mais uma vez, vou iniciar o monitor serial porque colamos algo
em uma cerimônia, o tempo chega por aqui. E agora, como você pode ver, eu tenho duas mensagens, não
estava muito claro. Eu deveria ter adicionado aqui também
o valor do PIN, por exemplo. Mas você pode ver aqui um
LED está em 80 e o outro está em 255, já
terminou de desvanecer. E aqui temos
apenas o azul. Como você pode ver, a cada
600 milissegundos, aumenta em cinco. E eu digo isso mais uma vez. Aqui você pode ver
todo o potencial
da maneira orientada a objetos porque aqui
temos a queda. Temos que desligar as extremidades
da função, a função de
desvanecimento. E tudo dentro de um programa, processos
paralelos, processos
simultâneos. E como você pode ver, estamos com medo e
muito boa visão geral do que estamos fazendo aqui. Não há realmente
muitas coordenadas. Porque você pode ver se
Aidan, o que é alimentado, podemos saltar para trás e ver
aqui a lógica de um desvanecimento. Esta é uma das principais
vantagens além desses processos paralelos
que podemos ver aqui, o código é muito
limpo e muito claro. E também para alguns terceiros, poderia ser, eu diria, trabalhar na lógica um pouco mais rápido porque ela tem
alguma boa estrutura.
27. Pulsate: Agora queremos adicionar uma outra função paralela e ela é chamada de função
pulsada. Gostaríamos de ligar o LED ligeiramente e suavemente e
, em seguida, também desligar suavemente. E eu chamei de pulsado, então copiamos para nossas
tampas ponto cpp, branco. Vamos dupla ligação de pontos duplos. E
ainda estamos adicionando a função. E agora poderíamos começar
com os códigos sozinhos. E como fizemos antes, usamos aqui a lógica Blink
sem demora. Na mesma hora que todas as vezes. Dizemos aqui, se o atual Millis. Então, a vida útil,
o ciclo de vida
dos códigos menos o
meio anterior é prossegue. Já, nós
definimos aqui, vamos dizer. E então dizemos
colchetes encaracolados ligados. A primeira coisa que fazemos, estamos passando os millis
anteriores para os Millis atuais para
que cada círculo, a condição if
seja verificada. Então, no próximo passo, dizemos que o brilho
mais é igual a quantidade de desvanecimento. E a quantidade de desvanecimento é definida como
cinco, como fizemos antes
no destino no ponto S e X, temos que adicionar se o
brilho for igual a 0 ou o
brilho for igual a dois, 55. Por que precisamos disso? Precisamos de uma lógica que nos adicione o design ou o design do, do rádio,
da quantidade de alimentação. Porque se estivermos em níveis de
brilho
soro, a quantidade de desvanecimento deve ter
o sinal mais para que adicionemos cada círculo, 51015, etc. Se atingirmos o nível de 255, o valor de desvanecimento deve
mudar o sinal para menos. Então, estamos contando
até 255250 iterador. E, portanto,
nesta lógica simples, podemos mudar o sinal
dela, desaparecer. Essa quantidade de desvanecimento menos. Porque se estivermos diminuindo o valor e
estamos chegando a 0 menos, igual a menos é mais, e ele sobe. Se chegarmos ao topo para desaparecer o
valor será um sinal de menos. E estamos descendo
lógica simples, mas eficaz. E como o último, temos que adicionar
outro log certo? LED de pino. E estamos vendo o nível de
brilho. Isso é tudo o que precisamos fazer. Então, pulando de volta
para a parte principal, iniciamos ouvir algumas novas
variáveis, alguns novos objetos. E eu sugeriria
adicionar o tubo amarelo. Está no meu pino 21
e lê para escrever. Não sei se é o pino
certo para um formulário. E no
final do nosso esboço. Então, todos esses três processos,
como a alternância, gostam de desligar e desaparecer. Nós o mantemos no esboço. E agora dizemos vermelho para pulsar. Dez por exemplo, e muito rápido. E amarelo para dizer isso. Por 50 um pouco mais. Basta verificar se temos algumas
setas ligando a câmera. E como você pode ver, este é o
esboço de amostra de antes. Estou clicando em Upload. Então estamos carnudos, mais
uma vez, usar o PM. E os envios devem começar. Para cima. Em seguida, tente focar a câmera. Então agora, como você pode ver
aqui, onde está minha alimentação? W2 está pulsando
muito, muito lentamente. E aqui temos o
amarelo também está sentado e nem o
azul só se alimenta deste
está prosseguindo. E, claro,
o vermelho é pulsante muito
rápido. Então, para processos, diferentes tipos de
processos estão acontecendo. E como você pode ver, acho que sete ou oito LEDs têm diferentes tipos
de funcionalidade. Mais uma vez, estamos
ligando e desligando essa realidade. Estes, temos
desaparecendo e temos o total entrar pulsando
tudo ao mesmo tempo. Acho que isso é feito por
apenas algumas linhas de códigos. E, como você pode ver, é muito, muito boa visão geral e
tem uma boa estrutura.
28. Instanciar objetos no arranjo: Neste vídeo,
gostaria de mostrar mais uma vez o potencial da maneira orientada a
objetos. Portanto, eu gostaria criar uma área
e, em seguida, esta área, armazenamos todos os
objetos para que possamos iterá-la e brincar
um pouco ao redor. Portanto, criei e const
int variável porque é, tenho aqui 15 LEDs. E quando mudamos depois aqui algo
em uma tábua de pão, eu só preciso aqui e a mudança deve ter tudo adaptado. Então, estamos criando
agora uma nova matriz. Lista é o nome da classe, este é o nome da matriz que eu chamo. É. Todos os leads, por exemplo. E precisamos dizer o
tamanho da área. É legal, tem 15 slots. Então fazemos aqui alguns colchetes
encaracolados, ponto e vírgula. E dentro dos suportes encaracolados, poderíamos dizer, vamos 12º. Isso é o mesmo
que fizemos antes. Então, dê uma olhada. Iniciamos o objeto
branco nesta forma,
dizemos, vamos apenas
o nome da classe, este é o nome do objeto,
este é o construtor. Mas também poderíamos fazer
algo assim. É o mesmo procedimento, é o mesmo objeto. Estamos criando um objeto. E iniciamos com tampas isso, o nome da classe e
o construtor. E esse método
usaremos aqui dentro do olho todos os LEDs porque aqui o nome, não
temos um nome. Só armazenamos o
objeto na matriz. Então, vamos ver como
poderíamos fazer isso. Eu preparei,
já preparei isso significa que estamos tendo
nosso primeiro objeto, segundo objeto, terceiro, etc. Então, em ordem, como eu
o tenho aqui na tábua de pão. E assim podemos depois fazer algo solto como
eu estou perseguindo detector de mentiras. Pode ver 15 objetos armazenados
aqui. E isso é o que temos que
fazer porque, um ao mesmo tempo, temos que
iniciá-lo com o número do pino. Então isso é obrigatório. Todas as tampas têm 15
objetos. Até agora. Não precisamos de algo
na configuração
porque já foi feito na classe que temos
do PINMode, é melhor. Agora, eu gostaria de
desaparecer todos os anos. Cada um dos LEDs é ao
mesmo tempo. Portanto, eu fiz
AND função aqui. Vamos chamá-lo de fade in e
, em seguida, fazer seu loop for. E esta é a sugestão automática. Eles podem dizer inteiro. E para leads num, isso significa 0 a menos de 15. Então, temos que pagar, ele será iterado. E então podemos
dizer, por exemplo, datas, ou é
chamado de alelos. Agora chamamos de todos os leads. Leads. Em seguida, iteramos o
primeiro, o segundo, etc. Então podemos fazer um ponto. E podemos dizer desaparecer
em 150 milissegundos. Isso é o mesmo
que fizemos antes. Por exemplo, se tivermos
aqui o amarelo para objeto, então também poderíamos dizer amarelo
a ponto, desaparecer em 150. E poderíamos dizer amarelo, um destino em blá, blá, blá. Este é o mesmo
procedimento que fizemos aqui, porque todos os objetos
são armazenados
em nosso, em nosso array e podemos
acessá-lo quando estamos iterando. Então aqui está o objeto
e, em seguida, podemos
acessá-lo com a classe. Até agora tão bom. Então temos que chamar a
função em nosso loop. Vamos ver o que o
compilador diz. Se tudo estiver
certo, parece bom. Conectando o USP
certamente para
monitorar o monitor do monitor do computador, carregá-lo, depois trocar
a câmera, piscar. Agora, cada um deles era
o projeto force up J. Mais uma vez, faça o upload foi a configuração para nós
no diretório errado. Então, agora é o certo. Os projetos devem ser compilados. Vamos ver. Lá vamos nós. Todos eles são, cada um dos LEDs desaparecerá
um pouco, mais
uma vez, um reiniciado. E como você pode ver,
é simultaneamente. Mas, na verdade, não é
realmente simultaneamente. Está um pouco
atrasado cada LED, mas é isso que
queremos e agora é fácil para nós fazer outra função. Por exemplo, queremos
prosseguir, ele prossegue tudo. E então estamos mudando
aqui, não os desvanecimentos. É chamado de lucros dentro de 20. E no loop, estamos chamando
prosseguir tudo não comentado. Isso você pode ver
todas as coisas sem comentários antes, porque queremos apenas
usar a função array. Presente. Mais uma vez,
carrega todo o esboço. Fleshed, use pm. E agora os LEDs mais antigos devem
acender e desligar sem problemas. Perfeito. Como você pode ver, temos Kavya
e uma maneira muito conveniente onde podemos controlar muitos, muitos dos LEDs. Por exemplo, podemos fazer
centenas e milhares de LEDs controlarem apenas com quatro
ou cinco linhas de código. E isso é o que eu acho que também
estamos usando mais tarde. Isso é o que é tão poderoso porque o Sr. de maneira orientada a objetos, temos aqui uma maneira de
controlar muitos componentes ao
mesmo tempo. E isso é de uma maneira muito fácil.
29. Efeito de perseguição LED: Vamos adicionar aqui
mais uma função e é fácil de implementar e
queremos fazer uma função de
perseguição de LED. Isso significa que os primeiros dias devem continuar da
esquerda para a direita. E se chegar ao topo, o LED deve
desligar da esquerda para a direita e
começar tudo de novo. Por exemplo,
chamamos de Jason. Nesta função,
estamos começando
ativando todos os LEDs. Então, estamos usando aqui em for-loop e estamos
vendo aqui não pulsar. Estamos vendo rasgados. E estamos usando
incorporar a camada, mas é apenas para
fins de treinamento para que estejamos vendo, ok, Há seu underlay
e tem um efeito mais agradável. Em seguida, queremos
desligar todos os LEDs. Então, na mesma função que você está
usando e no segundo andar, porque isso é iterado pela primeira vez. E aqui está o segundo loop. No segundo loop,
já temos essa função e é
chamada turn after delay. Precisamos inserir parâmetros. O primeiro é o atraso de desativação. Estamos vendo 50 milissegundos
e é um análogo do Não? Essa é a
razão pela qual dizemos falso. Por exemplo,
temos aqui em atraso. E agora poderíamos dizer aqui, deixe-me vê-lo. É isso. Apenas compile, ele. Parece bom. Uma coisa que eu perdi,
tenho que invocar a função, é
claro no loop. Perseguindo,
carrega a coisa toda. Vamos ver o que parece. Então, normalmente, ele deve
começar da esquerda para a direita. Se eu inseri todos
os pinos corretamente, acordo com a ordem
aqui, as placas de pão? Sim. Da esquerda para a direita, ele continua e,
se chegar ao topo, ele sairá sem problemas. E como você pode ver aqui, temos muitas possibilidades onde
podemos controlar, desligar, ligar os LEDs e
realmente, muito conveniente
com esta área e a área é antiga ou
lojas de objetos mais antigos. Então divirta-se com a codificação de forma orientada a objetos
e também com matrizes.
30. Fiação: E a parte vibratória para este
projeto é muito, muito simples. Temos nosso ESP 32 e aqui estão
os sensores infravermelhos HV 210 tanto
quanto você precisa. Então, no meu projeto de artesanato, tenho um limão dos sensores. E neste exemplo de exercício aqui para este
curso, eu tenho cinco. E é recomendável
que você use aqui e conversor de voltagem que você possa conectar
suas encomendas externas, por exemplo, 12 volts. E este
conversor de tensão converte
a tensão em cinco volts, e esses cinco volts
vão para a tábua de pão. E assim você pode ligar
aqui seus sensores, o ESP. Portanto, o dual também deve ser
conectado, então, para ser cinco. Mas eu pulo essa linha
porque estou ligando com o USB porque estamos programando e
queremos um 0 monótono. Então eu não quero você
na função root. Esta é a
razão pela qual eu pulei aqui. Se pino de cinco volts. Então, no lado direito, temos aqui nosso LCD e LED
devem simular a argamassa. E estamos nos conectando aqui
à cartilagem
da elite ao solo. Então, da
lista não ordenada, os pinos maiores, vamos para o resistor e
depois para o pino número 13. O padrão será
conectado ao solo. E, por outro lado,
estamos nos conectando, sem qualquer resistor
no GPR 12th porque estamos usando aqui o
resistor pull-up de entrada do ESP 32. Então, vamos dar uma olhada mais de perto
e como eu o implementei. Você pode ver que esta
é minha configuração. Aqui. Temos o LED e o
botão de pressão e os cinco sensores. Um deles
será a comitiva. E como você pode ver seu
pequeno potenciômetro, pode ocorrer que esses sensores
interfiram os outros. Então você tem que colocá-lo
conectado com algumas, algumas tendências de vírus
como eu tenho aqui. E então
deve funcionar bem. Então, no meu caso, funciona corretamente. Eu o conectei com alguns
fios aqui na tábua de pão, que significa que o solo e o VCC e os pinos de saída estão conectados se
for o vírus aqui. Então é tudo o que precisamos.
31. Crie projeto e curso: Estamos começando com
um novo projeto que
criei já um
incluído aqui nesta era começa. E meus textos até agora, então eu gostaria de
abrir a plataforma, qualquer fim aqui estamos, copiar e colar dos projetos
anteriores um. Então, o dinheiro é dinheiro. Essas velocidades carregam portas. E eu estou incluindo, como sempre, o AnalogWrite para
que o tenhamos aqui. Salve, feche-o. Mais uma vez, abra o CPP de domínio. E agora o que queremos fazer é implementar uma classe que identifique quais
desses sensores serão acionados. E, portanto, estamos começando com a criação de
nossas, nossas aulas. Mas antes disso você vê como eu implementei
todas as partes do virião. Então eu costumava ter 32
na tábua de pão mais e motivos para a tábua de pão para
que cada um deles
tenha uma fonte de alimentação. E o pino esquerdo de cada um deles está conectado a um dos
GPIOs do ESP 32, e é isso até agora, toda
a lógica moderna será implementada
mais tarde porque agora só queremos nos concentrar em, sou a maneira orientada a objetos, como podemos acessar aqui
os sensores infravermelhos sub. Em seguida, estamos começando
criando dois novos arquivos. Clique com o botão direito em fonte, novo arquivo. E estamos
chamando de IR de nosso sensor ou um novo arquivo ponto h
ou sin dot cpp M. Clique com o botão direito, divida pela
direita, feche este. Então, temos nosso
esquema de antes, e eu gostaria de começar
com o arquivo de cabeçalho. Primeiro de tudo, classe, sensor, suportes
encaracolados, ponto e vírgula,
depois privado, público. Então precisamos aqui de um
dia, inclui Arduino. E sabíamos que também precisamos de
um Include Guard se o sensor N def sublinhar a idade
e tivermos no final do ano, definir o final. E se assim for, você pode se perguntar por que estou digitando essa
coisa toda de novo e de novo. Tem sido bom. Eu diria exercício também
para você que você sabe, esses são os
requisitos para a aula. E quando você faz isso de
novo e de novo
, você também pode copiar e colar no modelo, por exemplo. Mas no primeiro começo, gosto de fazer
isso passo a passo. Então você também pode ver
referências veladas em que está. Então, estamos pulando para o arquivo CPP e
estamos incluindo aqui o sensor ponto h e
assim como o Arduino. Em seguida, no CPP principal, inclua ERs e self.age. Então, todas as referências
são feitas até agora. E agora podemos continuar com a definição
da classe por si só. E eu gostaria de preencher todo o
arquivo de cabeçalho para que você tenha uma boa visão geral do que estamos precisando e o que
estamos implementando. Portanto, esses são, o pino
central será o tensor de status do GPO que reconhecemos se não
houver alteração. Além disso, no estado anterior, estamos precisando de dados para identificar qual
sensor é acionado. Intelectar o punk, ou
podemos chamá-lo de pontos. Porque queríamos também
dizer que, por exemplo, o meio
nos dá cinco pontos, dez pontos, 20 pontos, um jogo. As iterações de contagem, ERs e são acionadas, são acionadas por
motor. Mais tarde,
também podemos nos divertir e lógica para iniciar e
terminar a argamassa. Então podemos implementar
o construtor. Então, estamos tomando
aqui o Terra-Sol, então é o GPI aberto. E também estamos dizendo que
queremos ter os pontos. Por exemplo, eu nomeei isso
um pouco
diferente desse ponto para que tenhamos aqui pouco claro que sou distinção. Então precisamos aqui de mais uma, mais
três funções. Clique com o botão direito, Formatar,
documento, verificação, ER, gatilho. E isso será implementado
no loop para que saibamos qual do
censo de ER é acionado. E calibrando o riso stoke, é chamado, por
exemplo, calibração. Isso é desnecessário
que nós iteramos e também nos salvamos alguma,
alguma inflamação. Isso é apenas para fins de depuração e, em seguida,
arrancado o portão
do motor desce para a marcha suave
e uma nova versão dele. Então, substituímos essa função. Isso será arrumado. Eu
percebo que entendo isso. Isto é, será necessário para controlar o motor desligando e
ligando novamente. Então, até agora, o
arquivo de cabeçalho está concluído. O arquivo CPP é configurado o arquivo CPP principal como
referência e nome. No próximo vídeo, podemos começar
com a parte lógica.
32. Abordar o sensor de IR individualmente: Vamos começar com o
código-fonte e a lógica. Então, começamos por definir o nome da classe do construtor sensor
IR ou uma ligação dupla, dupla ligação I, nossa e assim por diante. E temos pinos
GPIO inteiros e pontos
sublinhados inteiros , colchetes
encaracolados. E dentro estamos X, diz sensor, pino é GPO ou pino. Então dizemos que os pontos estão nos
pontos e temos aqui e pino do sensor de dívidas
PinMode é uma entrada porque queremos o valor ER e não os
iniciamos. Eu iniciaria o sensor é um. Isso é necessário
na próxima função. Então esta é a primeira,
a primeira iniciação. Estamos mudando para
o arquivo CPP principal. E agora poderíamos abordar os cinco objetos aos
nossos cinco sentidos. E como poderíamos fazer isso, nosso sentido ou é nosso
senso de emergência ou é o nome da classe. Então eu diria que nosso
sensor um é ER, sentido. O primeiro é fixar. Meu primeiro pino é
14 e atribui pontos tendem a 2345. A segunda frase mais ou menos para os tipos e o segundo
sensor não é um pino sete. Vinte e sete, vinte e
seis, vinte e cinco. E temos o último em r0. Então, damos a eles os
pontos para 2050 centésimos. E o último ganha 0 pontos
porque isso vai mais tarde em nossa comitiva Watergate para identificar Se ligarmos o
motor ou não. Certo, até agora, tão bom. Agora também poderíamos implementar aqui na função, por
exemplo, pontos de verificação. Os pontos de verificação estão
nos pontos de verificação. Nesta função, poderíamos
abordar esses objetos. Por exemplo,
você é central um. E aqui podemos dizer check
trigger, Check trigger. É uma comitiva? Não. Por que eu implemento a comitiva
também nesta função? Porque eu gostaria de
desmarcar funções de gatilho. Então, quais dos meus sensores serão acionados em todo
o projeto? Agora, se uma comitiva, então eu digo o resto deles. Sou sensor de força 2345. Esta é uma
maneira muito conveniente e não muito boa. Mas antes de tudo, vou te
mostrar como você
pode fazer isso no, no pequeno desvio. E depois estamos
fazendo aqui um filho de matriz, voltando para ERs. E então, porque queremos agora
implementar a função de
gatilho de verificação. Portanto, verifique a
função de gatilho não é branca. Er, não é indigno, é um sensor ERS inteiro ou uma dupla ligação dupla verificação
ER ou gatilho motorcades. E agora estamos implementando quase o mesmo que fizemos
com o botão equilibrado. E agora você se perguntaria, por que eu deveria fazer pode ser função de
ossos para um PS, escolha
sensata e declaração de leitura
analógica. E por que estou fazendo isso
é que eu quero ter sua função que começa
voltando para o sensor. Então, antes de tudo,
será da maneira normal
quando eu for acionado. O sensor como este, ele entregará
acionado, acionado, acionado, acionado, acionado,
acionado, não acionado. E eu quero ter tal coisa que seja acionada
na lógica, mas agora ela
me devolve os pontos. Isto é o que eu gostaria de
ter no meu, no meu projeto. Então, nada acontece e
quando o mármore desaparece, então precisa se ressentir de
mim seus pontos e apenas uma vez e
não cinco ou seis vezes. E, portanto, poderíamos usar realmente a
mesma abordagem que fizemos antes. Então, estamos dizendo que o
estado anterior é começar a censurar e sensor de
status é o pino do sensor de
leitura digital. Então, estamos lendo o sensor e estamos passando
para o estado anterior. E agora estamos dizendo que se o estado
anterior é maior e o sensor de portas de partida é baixo, isso significa que seu alvo ,
então temos erros E, enviamos ou acionados, não
é verdade, é Millis porque
queremos meça o tempo como debouncing. Então, caso contrário,
se pudéssemos ver se o estado anterior
agora está baixo e o sensor de status
é, o que você acha? Então temos aqui a
lógica em que podemos identificar agora quanto tempo os
anos e assim dispararam. E eu gostaria de dizer aqui, se milhões menos ER enviarem
um bom senso, são acionados sob
dez milissegundos. Nada deve
acontecer se e então. Eu poderia dizer aqui, se
algo acontecesse. E eu poderia dizer, se os portões do motor, este é o parâmetro de entrada. Se isso for acionado, então eu poderia dizer 0 print. Ao todo. Estamos implementando
isso mais tarde, mas eu gostaria de
cobri-lo aqui porque ele tem um parâmetro de entrada e sua
música deve aumentar, acionada quando o motor também
é acionado. E, no entanto, se for
um motor bom ou não, gostaria de
imprimir o pino do sensor. Até agora, tão bom. É isso que nossa
principal lógica para o nariz. Então, se não censurado for detectado, como se eu estivesse cobrindo aqui, então o Millis
será passado para um sensor
e, depois, ele será
impresso no pino do sensor. Então, vamos ver o que
o compilador diz. E estou conectando
a coisa toda. E carregado. De repente estamos
ligando a câmera. Aqui estão meus sensores
e agora estou cobrindo o primeiro e
agora estou deixando o primeiro e
excluo o ponto, estou recebendo devolvido
o pino do sensor também no segundo. O terceiro, o quarto precisava de um pouco
descer. E o quinto. E também aqui, nos
dá resultados muito, muito limpos
de cada um dos pinos. E isso é o que eu quero. Quero um mármore que passe pelos LEDs e
me devolva a sensação de dor. Ou mais tarde, são pontos
referenciados que foram declarados aqui. Esta é a primeira coisa que
implementamos agora tem um resultado claro e simples.
33. Objetos na matriz: Até agora, testamos nossa lógica por enquanto nosso programa principal
e ele funciona muito bem. Mas não é muito bom. Codifique porque temos
cinco linhas separadas e cada linha precisamos
identificar se nosso sensor ER é
acionado, elas são formadas. Adaptamos agora nosso código-fonte a uma
maneira mais orientada a objetos para que
possamos usar também ouvir algumas
áreas. Como poderíamos fazer isso? Dizemos nosso sensor, o nome da classe, e então
eu o chamo de nossa matriz. Aqui está o espaço reservado. De quantas áreas precisamos? Os suportes encaracolados abrem e
fecham. Antes de fazermos isso? Incomum para eles, porque o
último será meu motor obter este sensor, o que
nos indica começar ou não. Então e também aqui não convencemos
o salão a verificar pontos. Portanto, nossa matriz de sensores IR deve se encontrar aqui e
const int, por exemplo ,
num, ER, envios ou sensores é 44. Para sensores, o que nos
dá os pontos. Um nos identifica se
o motor é iniciado. Então eu sento aqui, os sensores num num ER e eles são
uma maneira conveniente é aqui que mais tarde
agora posso mudar os números para 7810 e todos
os loops que não
são fluxo de calor. Um porão de loops for
que vem mais tarde. Seremos adaptados automaticamente. Então, chama-se
sensor de ano, esse sensor ligado. Aqui, agora
temos outros colchetes encaracolados
para cada objeto. 40 é o pino, dez está lá. Estou fazendo pontos. Em seguida, o segundo objeto,
pino 2720 pontos, determinado objeto 2650,
objeto fotográfico 25100 pontos.
O portão do motor. Vamos deixá-lo
lá porque essa deve ser uma maneira separada. Em seguida, verifique os pontos
que precisamos e acompanhamos. Então, para tablet. Para que cheguemos aqui
o preenchimento automático. Estou usando aqui um
número inteiro e dois para a contagem e configuração
aqui o número IRR centra. Então, ele itera até 01234. Então, sim, eu
diria nossa matriz, então identifique quais pontos de
objeto. E eu poderia dizer o gatilho de verificação. E é falso porque
você está apenas uma vez que os pontos e um sensor
deve ser endereçado manualmente. E estes são os portões
modais porque quanto mais alvo for separado,
o
watergate é verdadeiro. Sim. Isso é tudo o que
precisamos mudar. Então carregado
mais uma vez, sem compilação. Eran liga a câmera. Eu adicionei LED extra, que também é implementado
na parte do violino, mas chegamos a ele
mais tarde, assim por diante. Cerimônia Dan deve ser o
mesmo resultado de antes, mas com alguma mudança,
tudo funciona bem. Então, adotamos agora todo
o programa de uma maneira
mais conveniente, uma maneira mais direta. Então, quando temos que
mudar alguma coisa, é muito, muito simples. E, como mencionei
no meu projeto, adicionei aqui 11 sensores e penso se você
tem que mudar alguma coisa, e eu não sou
flexível o suficiente. E foi essa construção. Podemos adaptar nosso código
de uma maneira mais fácil.
34. Simule o motor ligado: Neste vídeo agora
gostaríamos de simular o motor. O motor está aqui, o LED, e use
o botão de pressão. Podemos começar a argamassa. E então se o mármore
subir, subir,
subir, subir no topo da nossa
prancha Galton, há a comitiva. Este é o centro. E quando o mármore atinge ou passa
por esses ERs e assim por diante, o motor será
desligado e essa funcionalidade
gostaríamos de implementar. Agora, portanto, temos que
ir ao CPP principal. E declaramos aqui mais
duas variáveis. Aqui. O LED inteiro é um número inteiro. Botão é, então vamos dar uma olhada. Meu botão está no pino 12º
e D está em uma equipe do CERT. Então, na configuração, precisamos fixar os modos. O botão do modo Pin é
um pull-up de entrada e o LED PinMode é uma saída. Qualquer uma das funções de loop. Queremos verificar se
o botão é clicado. Portanto, dizemos se. E como podemos fazer isso
com o botão de leitura digital? E tem que ser baixo porque eu conectei o
botão quer ao baixo, ao chão e uma vez
um pino no GPIO. E, portanto, eu diria que se o botão de leitura
digital for botão de leitura
digital for menor do que algo
deveria acontecer. E neste caso,
DigitalWrite LED alto. Então, vamos ligar o motor e aqui ligamos o LED. Então a próxima parte será quando a
comitiva for acionada, nosso sensor na extremidade, ele deve desligar. Portanto, mudamos de
volta para o sensor ER para que tenhamos acesso à nossa variável. Temos que dizer LED inteiro
externo. E então dizemos o programa. Por favor, olhe fora
deste programa. Essa variável precisa ser identificada no
externo porque termo
x é definido
fora desse arquivo. Então a comitiva está aqui. Se motorcades uma vez,
podemos dizer se isso é acionado DigitalWrite
LED e está baixo. Vamos verificar o compilador. E Lester, ESPN. O acampamento. Estamos ligados? Mais uma vez, o
monitor serial já está aberto. Sun agora estamos
conectando o rubor. Então, vamos ver o que está acontecendo. Os pontos normais
devem funcionar como antes. E quando estou mudando agora, aparecendo, aperte o botão. E esta é a comitiva. E a comitiva será
acionada para um M. Aliviá-lo. Sim. Bom. E os pontos
funcionarão como antes. Então agora, no nosso caso, apertamos o botão e
isso é o que eu também não fiz. O primeiro conceito, o
modelo ficará faminto. Modelo, modelo, modelo traz o mármore até o
topo. Há um sensor. O sensor será acionado
para que o motor saia disso. Não muito. Muitas mármores chegam
ao topo de uma só vez. E então o mármore
toma o caminho para baixo alguns dos,
então desligamos. Em seguida, ele aciona um
dos sensores e isso nos dá agora
o sensor mais tarde, os pontos que
serão entregues.
35. Avaliação dos sensores de IR: Neste vídeo agora,
gostaria de implementar,
implementar o método de
calibração. Porque quando você pensa
em todo o projeto, eu gostaria de ver com que frequência cada sensor será acionado
e quais pontos são. Estou voltando. Porque, como você pode ver aqui, temos aqui e retornamos valor, mas não o
implementamos aqui nenhum retorno, e isso tem que ser implementado. Então, antes de tudo, gostaria de
verificar se
atribuímos os pontos. Pontos são atribuídos. E agora eu gostaria de
chamar aqui nesta fase. No entanto, se for
uma comitiva ou não, o método de calibração,
o método de calibração
pode ser. É um sentido amplo nossa calibração de ponto
duplo de ligação dupla. Nesta função, eu só
quero voltar e enviar mensagens porque só estou
interessado em pontos pin. E com que frequência eu uso isso? E, portanto, tenho
e variáveis de membro, membro
privado
chamado em durações. E nós iteramos este. E agora posso ver impressão
serial f. E quero ter
três variáveis. O primeiro pode ser sensor, e é chamado de pino do sensor. Então eu poderia adicionar um
segundo valor também. E são os pontos. Também um formato inteiro. E os pontos são os pontos. E como último, também
podemos adicionar aqui as
iterações, durações. E também é um número inteiro, e é chamado de iterações de
contagem. Estamos voltando cada vez
e o sensor é acionado. Este pino do sensor de linha
aponta, iteração. Parece bom. Um pouco mais. Os suportes diriam
neste formato. E o final eu estou
fazendo uma vez quebra de linha. E isso parece bom até agora. Então, estamos escolhendo o projeto certo,
faça o upload da coisa toda. E agora devemos obter
aqui alguns comentários em nosso monitor de soro quando o
compilador não vê nenhum erro. Mas acho que
parece bom até agora. Então estamos carregando todo
o esboço. Abra a barragem da cerimônia. E como antes, poderíamos começar
aqui, o motor do motor, e vemos aqui o pino do
sensor do motor 0,30 pontos, iteração um, iteração 234, e os desviadores começando
temos aqui dez pontos. Temos aqui em segundo lugar, 20 pontos, 50 pontos, 100 pontos. E as diferentes
iterações
seriam iterando. Muito, muito bom. Isso é o que eu quero. E agora você pode imaginar, você poderia fazer isso em
um processo automático. Lá. Maravilhoso sobe, vai para baixo. Ele estará coletando os
pontos e as iterações. E então você
também pode resumir aqui, distribuição
normal quando
tudo correu bem. Mas isso não é o que eu quero no ambiente
produtivo. Isso é apenas para calibração. Podemos desligar isso. E também aqui a dor central. Eu não quero, quero recuperar apenas os
pontos que eu quero. E, portanto, poderíamos
dizer, por exemplo, aqui, definir uma nova variável. É chamado de saída inteira. E nós o devolvemos no
final para que
possamos ter certeza de que
há algo. Volte aqui. Poderíamos dizer que a saída é
0 pontos, por exemplo. Agora você tem que imaginar quando você tem algumas outras lógicas, por exemplo, você pode
adicionar alguns pontos de bônus, algumas alavancas de bônus, etc. É sempre uma boa
ideia colocar isso em uma variável externa e
não coloque apenas os pontos. Então vamos voltar
para o CPP principal porque aqui o
valor de retorno não vai a lugar nenhum. Portanto, eu
implementaria aqui também no D2L dentro de uma nova variável, é chamado de pontos obtidos. E vemos aqui me dá esses
pontos nesta mesma sala. E se Galton apontar
maior que 0, porque 0 é o nosso portão do motor, então centímetro os
pontos via MQTT, por
exemplo, ou envie por
meio de eventos do lado do servidor. Eventos do lado do servidor também estavam
lidando nesta aula online em exercícios de tesoura de papel de rocha. Assim, também poderíamos começar por meio de sites no ESP, ou podemos lidar com seus pontos e enviar de
volta para o nosso site. Mas aqui também poderíamos, sim, consideramos uma impressão
apenas para fins de depuração. Pontos D. E estamos voltando
aqui o deck tem alguns pontos porque esta não é
uma boa abordagem quando estamos lidando aqui dentro do principal. E quando estamos
voltando de toda a nossa classe, apenas os pontos e toda
a lógica serão implementados
na parte principal. Então, mais uma vez,
estamos carregando nosso arquivo. E vamos ver o que
o compilador diz. Normalmente derramando Isso é
sempre um bom sinal. Em seguida, carregando a
coisa toda mais uma vez e agora a cerimônia deve ser um
pouco mais clara. Eu perdi a quebra de linha. Então 11010202050, Um 100. E os portões do motor também. A comitiva deve estar
fora do loop for, e então está dentro de
mercadorias vendidas até agora que
implementamos agora também nos
pontos e na comitiva.
36. Visão geral do projeto: Então, vamos ver o projeto
finalizado. Em primeiro lugar, o elevador de
mármore será alimentado por um neurônio motor tão
pequeno. E o motor está
preso à parte inferior. Então, quando estou pressionando
aqui meu botão, ele está conectado via
MQTT, elevador de mármore um. E aqui está a comitiva
que acionou o motor. Então, mais uma vez, mais uma vez motor continuará e
continuará até que a comitiva seja acionada. Depois, o
mármore vai cair. E de acordo com o sensor que será acionado
e recuperando
os pontos para meu nó vermelho Burma MQTT
broker também está conectado. Agora, viveu mais tempo,
e está acabado.
37. Recap OOP IRSensors: Parabéns ao
final deste capítulo em vídeo. E espero que você tenha se divertido tanto
quanto eu tive para fazer o código-fonte
dessa maneira orientada a objetos. Então, vamos usar, aqui estão alguns segundos para recapitular todos os aprendizados
que tínhamos aqui. Primeiro de tudo, criamos seus diferentes
objetos para que
possamos verificar se alguns dos sensores infravermelhos
serão acionados. Depois, criamos
uma área para que seja maneira
mais inconveniente de controlar o censo do ano e também a
maneira orientada a objetos que vem aqui. Uma vez nos mostra as vantagens que somos criados
e a função de calibração. E essa função de calibração nos
proporciona a sensação de pino, a contagem das integrações, inserir pontos e
pensar nisso. Como você poderia facilmente desenvolver
isso com alguma função? Não será tão fácil
porque você precisa disso aqui. Diferentes tipos de
iterações, variáveis e como controlar os
diferentes tipos de sensores. De certa forma, não será tão fácil. Seria alcançável, mas não tão conveniente quanto
uma maneira orientada a objetos. Fazemos um modelo
para um caso. E depois cada objeto pode usar esse blueprint e é aqui que eu acho que é tão valioso quando
se trata de código-fonte. Sempre que você tiver diferentes
tipos de sensores, muitos deles, vários deles, então use seu objeto,
escreva sua própria classe. Será mais rápido e muito mais flexível, tanto para a recapitulação. E agora vamos para o próximo exercício e
para o próximo vídeo.
38. Fiação: Então virion parte deste
projeto é muito, muito simples. Então, temos aqui e USB 32. Temos dois LEDs, dois resistores e
um botão. O botão de pressão
será conectado
à placa de pão do
chão ao botão de pressão. E do outro lado, estamos nos conectando aqui, o botão de pressão para
o GPIO2 e 13. No meu caso, também estamos
conectando o solo do ESP, então T2 à tábua de pão. Então isso terá o
mesmo potencial para os LEDs. E, como mencionei no
primeiro exercício prático, depende da
cor do LED, que é resistente à unidade. E também depende se você
usar um Arduino ou e ESP 32. O ESP 32 suporta aqui 3,3 volts e há o enol pode entregar
cinco palavras do GPIO. E em relação a isso, você
precisa calcular a resistência. Basta dar uma
olhada em um
dos primeiros vídeos
da classe LED. Lá. Eu mencionei um
pouco mais em detalhes. Aqui meu caso era o ESP 32, eu só uso e resistor de 100 ohm para ambos porque é
apenas para fins de treinamento. Então, liguei o solo
ao cátodo do LED. Este é o, o pino minúsculo e em seguida, o pino de lava que estamos
conectando ao resistor. E do resistor para o GPIO número 25
para o vermelho. Verde, que é exibido
aqui com um azul. Eu me conectei, o
mesmo que o vermelho. Então, conectando os
terrenos ao cátodo, depois o pino mais longo que
passa pelo resistor e da resistência
ao GPIO número 12º. E é isso neste exemplo, o resto será o programa
codificado no código-fonte.
39. Adicione o botão do curso: Vamos começar com um
novo projeto novo. Sinto-me incluído no farol
e no cpp principal, acabei de editá-lo aqui
e Sarah começa. Isso é tudo o que eu fiz até agora. Agora, o que eu gostaria de
fazer é configurar toda a construção da
classe. Portanto, clicamos direito
no novo arquivo de origem. E dizemos aqui, botão ponto h, e estamos chamando novo arquivo, ponto de
botão CPP, clique com o botão direito do mouse em combatente, essa borda se divide à direita. Então vemos que o explorador
deve desaparecer. E agora temos aqui
nosso IDE de desenvolvimento. E eu gostaria de começar com
a definição do botão ponto h. Primeiro de tudo, a classe,
é chamado botão. Suportes encaracolados abrem,
fecham, ponto e vírgula. Então o próximo é
incluir guardas. Se a borda do botão N def, então poderíamos dizer definir botão H e o
final com a audição. E se eu incluir
Deus está acabado. Então, qual é a
terceira, a serpente? É toda vez a mesma coisa. Devemos incluir
a cabeça do Arduino. Então por diante. O arquivo de cabeçalho é, então esse estado foi concluído. Então, pulamos para
o botão ponto cpp, eu sugeriria que
estamos adicionando aqui. A primeira coisa inclui
o botão dessa borda. E estamos incluindo
o Arduino. Até agora, tão bom. E o que também precisamos
aqui estará lá. Eu estou certo ponto h.
Então h precisaríamos mais tarde para os LEDs para que
possamos alimentá-lo com PBM,
sua fonte, indo para possuir o explorador clicando
na plataforma em Ele. Temos que adicionar aqui a
biblioteca externa e olhar certo. E eu também
sugiro que ouvimos adicionar a porta do monitor do meu, no meu caso, é
a coluna três. Definimos a velocidade
para 115200 ou em uma estrutura e a plataforma
expressiva e acordo com você, use o PIM
também configurando a porta. Economize perto do sangue de. E temos aqui tudo o que precisamos para
o botão cpp. Então eu também
sugeriria que pulássemos
para o CPP principal e façamos a referência inclua DOD edge para que tenhamos aqui todos os arquivos referenciados
em nossos três arquivos. Em seguida, como próximo passo, recrutas definem
todo o arquivo de cabeçalho. Isso significa que podemos dizer aqui que
é uma dívida tecnológica trazida e como um breve lembrete e atos
protegidos aqui no botão de
classe ponto HHS, privado. Quando herdarmos mais tarde
em toda a classe, ela
será como membro
público, público. Portanto, protegido em carga, botão, pino, números inteiros, datas e resultados inteiros que
estamos precisando mais tarde
e no público, temos aqui o construtor, que está nos levando e pino. Estamos tendo a
função de início e temos botão
Jack com parâmetro de
retorno como um número inteiro, clique com o botão direito
do mouse em Formatar documento. E também formatamos
nosso botão ponto h. Estou pulando para o botão CPP. E eu quero, eu quero
implementar você o construtor. Portanto, eu digo botão, que é chamado de classe, em
seguida, ponto
duplo, pontos duplos, botão
no drop-in, colchetes
curly abertos, fechados, e é pino de botão. Este é o nosso membro protegido, é o pino que estamos
passando pelo construtor. Então vamos
para o CPP principal. E então o CPP principal, ou
estamos fazendo aqui um objeto. Iniciamos um botão de objeto,
botão editado lá. E no meu caso, o botão
é colocado em um GPO certo, neste exemplo, estamos apenas passando o valor para nossa classe e não estamos
configurando o PINMode. Este é um tipo diferente de abordagem que eu
gostaria de mostrar a vocês. Claro, você também pode
fazer o PinMode também. Mas até agora tão bom. Estamos configurados ainda, nossa classe, nosso botão principal, CPP
e o CPP principal. Agora estamos prontos para
citar o resto.
40. Botão Debounce com milis: Neste vídeo agora,
queremos ser equilibrados o
botão e também preparar o código para que
estejamos na próxima
etapa possamos usar l, pode identificar quanto tempo
pressionamos o botão. Mas antes de podermos fazer isso, temos que configurar
aqui nosso botão
e, portanto, botão CPP M, estamos declarando
outra função. Chama-se branco, botão, ponto
duplo,
ponto duplo, início. Aqui estamos configurando
nos modos pin. É o pino do botão. E estou usando aqui
e as entradas puxam para
cima para que tenhamos um bom sinal. E eu acho que no ambiente
Arduino, você também precisa inserir pull-up. E, caso contrário, você usa
apenas o valor da entrada. E também estou sentado aqui
na variável de estado em alta. Estamos chegando mais tarde. Por que fazemos isso. Então,
voltando para o arquivo CPP principal, na parte de configuração, estamos vendo aqui que
estamos usando o botão para cima, Há botão que
não fomos iniciados, mas o objeto com botão, botão LED, isso é nosso objeto agora que
somos iniciados. E agora podemos dizer
botão, ponto de partida LED. E agora temos
o PINMode pronto. Então, o próximo passo será que façamos aqui o botão de verificação. E mais uma vez,
mudo isso para branco porque depois
estamos usando o número inteiro, o parâmetro de retorno, mas
na primeira etapa não precisamos dele. Então, estamos dizendo que botão, dupla ligação, dupla
ligação, botão Check. E este botão Verificar será
chamado em cada loop. Então, mudamos para o CPP
principal e dizemos botão, LED e botão de verificação. Então eu sugeriria que estamos apenas escrevendo
agora algumas linhas de código. E depois enviamos
para o ESP e vamos, mais
uma vez, passar por todo
o código. Primeiro de tudo, estamos
definindo uma variável. A variável será inteira. O estado anterior é estado e o estado é digital. Pino, botão, pino, botão, pino. Então, o que você está fazendo aqui, estamos percorrendo
essa função. Cada loop, o último estado do botão será segurança
e o estado anterior, e o estado real
será salvo aqui no estado. Por que fazemos isso? O motivo é que agora podemos identificar quando alguém
pressionou o botão. E isso é muito fácil. Podemos dizer que se o
estado anterior for maior, estado é baixo porque estou usando aqui o pull-up de entrada e
estou conectado o
botão ao chão. Meu estado baixo significa que quando
estou apertando o botão, alto, é quando está, não
estou nos dando sinal? Esta é a razão pela qual estou
lhe dando design de estadia. Isso significa que, no primeiro
começo, não
estamos pressionando
o botão e iniciamos com o sinal alto. Dentro deste fungo estão
nesta condição se. Estamos fazendo remeshing
aqui de cada vez. Portanto, preciso de mais uma
ou duas variáveis. Então, estou vendo aqui um botão longo
não assinado, milissegundos
clicados e botão longo
não assinado
para baixo milissegundos. O que é não assinado? Não assinado é quando estamos
declarando variável, temos menos parte
e depois parte mais. Cada uma, cada coisa
tem o mesmo tamanho. Mas quando estamos vendo sem sinal, só
queremos o lado positivo e estamos tomando
todos os valores são todo o espaço da memória e apenas
atribuí-lo ao lado positivo. Então, dobramos
apenas o tamanho e o lado positivo, isso é o que significa
com tempo não assinado. Porque somos os milissegundos. A vida útil atual não poderia
ser uma parte negativa. Esta é a
razão pela qual o usamos. Então, com este
botãoMilissegundos clicados, agora
podemos atribuir o botão. Clique em. Milissegundos é Millis
o que você está fazendo agora? Quando alguém pressionar o botão, os milissegundos, milissegundos
atuais serão atribuídos aqui
ao botãoClique. E por que fazemos isso? Porque agora podemos continuar
e podemos dizer else-se,
se o estado anterior é
e eu acho que você sabe o que, Ele vem, baixo,
estado final é alto. Em seguida, soltamos o botão. Porque quando estou
pressionando o botão, o loop está acontecendo. Então eu estou pressionando o botão
e o botão clicado milissegundos segundos será atribuído à sua vida útil
atual para os milissegundos. E depois, se
eu estiver liberando, agora posso fazer algo com o diferente foi o botão do editor Millis
clicado em milissegundos. Então, mas aqui está, aqui vem a parte lógica. Mas uma coisa é que você está
perdendo uma moeda porque
já não somos discutidos o que está
debatendo um botão? O balanceamento significa que quando
estamos pressionando um botão, há algumas
coisas mecânicas acontecendo. Esta função mecânica
não é muito precisa quando se
trata de milissegundos porque o botão chamado fechar
em um milissegundo, o circuito forte ou
atual. E é por isso que
temos sinais mistos. Portanto, esse processo precisa de alguns
segundos, alguns milissegundos, e a arena pode reconhecer
esses milissegundos e
nos dá um sinal ligado, desligado, ligado, desligado. E isso
também ocorrerá em nosso esboço. Isso significa que
temos o espectador
receberá mais alguns sinais
do que estamos acostumados. Fazendo sua prática linha de impressão serial de
vitrine. E estamos vendo aqui
botão Clicou milissegundos. Então, normalmente devemos
pressionar o botão, nada deve ser impresso
no botão 0. E quando estou liberando,
então estamos recebendo, acho que é mais de um resultado. E esse é o motivo do
salto do botão. Então, vamos fazer o upload do
esboço para o nosso ESP. Em seguida, desligue a câmera. E você pode ver aqui
os monitores 0 ligados, apenas excluindo os antigos. E agora eu mantenho pressionado o
botão e solte-o. E você pode ver que você chegará
aqui algumas linhas de código e isso está saltando
do botão, fora do botão. Significa que não pode fechá-lo
rápido o suficiente para obter
um sinal muito claro. Então, o que
podemos fazer agora, medimos quando clicamos no botão. E isso pode ser útil para nós, porque agora podemos
continuar e podemos dizer, se por exemplo,
listarmos o atual ciclo de vida menos
botão Clicou em milissegundos. Então é quando somos
pressionados o botão abaixo 50 milissegundos porque isso é o que não somos interessantes. Aqui está a área de limites, nada a fazer apenas
para fins de treinamento. Então dizemos, senão. Se o sinal for superior a
50 milissegundos, então só devemos chegar aqui uma linha reta
carregada mais uma vez. E então estamos discutindo todo
o código. Mais uma vez, o código é carregado. Então eu sou reiniciado. Clique no botão
e solte-o. Então, o clique longo sempre, maioria das vezes funcionará. Mas se eu estiver clicando
em clipe curto e curto, então você também pode ver aqui
que está D equilibrado porque eu só recebo uma linha
reta dele e é isso que queremos. Não, sem saltar do
botão, basta clicar. E agora temos um sinal
muito preciso e estamos obtendo um bom
resultado disso. Então, mais uma vez, o que
fizemos até aqui com meteoro e estados
anteriores? E, em seguida, o
estado
nos dará um sinal do botão, e o estado anterior
salvará o status de antes. Então estamos sentados aqui
com o primeiro se, se o estado anterior for alto e isso significa que
nada é empurrado, e agora ele é empurrado. Por favor, salve-me
nos milissegundos no
botão de variávelClique em milissegundos. E eu estou pressionando o botão e o loop
continua, continua e continua. Agora estou soltando o botão. Agora, no próximo loop, estamos aqui porque o
estado anterior agora está baixo. E o estado é alto. Alto significa que
soltei o botão. A diferença entre as extremidades
Millis, o botãoClicou. Se for curto ou
inferior a 50 milissegundos, então não faça mais nada. Por favor, me dê alguma
lógica aqui nesta parte. Nos próximos vídeos,
podemos definir aqui se é maior que 5200. Portanto, esta é a área em que podemos definir os diferentes
tipos de pressões de clique. E então temos duas coisas. Em uma lógica, estamos
profundamente saltando o botão e também podemos identificar quanto
tempo alguém pressionou.
41. Detecção da duração dos cliques: E agora queremos identificar
dois tipos diferentes de quanto tempo pressionamos o botão. E isso será muito,
muito fácil agora para nós, porque agora estamos apenas adicionando um else if. E estamos vendo aqui, milli é menos botão Clicado. Então a coisa toda é
maior que 50 e preciso de um
pouco mais de espaço. Todas as coisas aqui em cima devem ser inferiores a 200 milissegundos. Então isso significa que se for
maior ou
menor que, então algo acontece. Portanto, não tem seguro. Clique em tudo. Recopie-o. botão Else-if maior que 200 e
menos de 900 milissegundos, por
exemplo, é um OnClick. Então aqui está a
área de debouncing. Nada acontecerá. E após os milissegundos de 50 a 200 ou
clipe curto deve ser identificado e depois
e longo clique. Então, carregando a
coisa toda mais uma vez, e vamos dar uma olhada mais de perto. Se você puder identificar agora os
diferentes tipos de cliques. Esboços para cima. Então eu estou clicando em
curto, curto, curto, curto, longo, longo, longo, curto. E como você pode ver, um
normal sem saltos. Tudo é
laços profundos em relação cliques
claros e claros, apenas
uma linha em um clique, e é isso que queremos. Bom. Então, como você pode ver, um mais simples que temos com
uma lógica e D libras. E podemos identificar
diferentes tipos aqui de quanto tempo pressionamos o botão. Então, é sobre sua criatividade se você quiser adicionar
mais função, mas acho que dois ou
três devem ser suficientes. Porque, de outra forma, será
difícil
identificar quanto tempo nossos
três segundos, mas depende do seu projeto e agora
seu campo pode se sentir,
sinta-se à vontade para fazer seus próprios comprimentos de patentes e identifique os diferentes
tipos de medidas.
42. Interface limpa: Este vídeo agora queremos manter
a classe um
pouco mais geral e chiller significa que
estamos nos livrando de algumas coisas específicas porque mais tarde vamos
em outro projeto, por exemplo, se nós quer usar a patente CPP e o botão ponto h, nossa classe, também no projeto. E não há necessidade de implementações
específicas, então precisamos de toda a sala. Toda a
parte lógica deve estar
no CPP principal e não
no padrão CPP. Então eu mostro o que quero dizer. Estamos mudando para o botão Checkout e
retornamos o valor para um inteiro. Também nos botões, o BPM que estamos
alterando aqui sob valor de
retorno para um inteiro. E o que fazemos agora é que estamos
definindo aqui três estados. Então, por exemplo, o teorema do valor de
retorno. Não há nada para fazer. Nada a fazer. Se estamos recebendo um retorno, ele está em um clique curto e,
caso contrário, é longo clique. Portanto,
já temos variável, que é chamada de resultado. E eu sugeriria
que estamos fazendo aqui resultado de 0 significa que não
temos nada a ver. Enquanto ele poderia o resultado 0. Coloque, insere a primeira coisa porque eu também não tenho nada a fazer. E também no
erro debouncing, nada a fazer. No final, retornamos o resultado e o clique curto. Descomentamos a impressão em série. Apenas dizemos que o resultado é um. E no else-if
é o resultado é dois. Este é o meu flex
e voltei ao flex e tenho todos os casos aqui. Não há um resultado atribuído,
portanto, ele deve ser
retornado em cada loop. E 0 ou um ou dois. Isto é o que quero dizer que foi
gerado no próximo projeto. Você pode usá-lo e
também pode identificar os diferentes tipos
de estados após os resultados e fazer algo
na parte principal. E é isso que fazemos agora, mudando para a parte principal. E agora essa função nos
entregará e retornará valor. E esse
valor retornado será capturado, por exemplo, no caso e switch. Então dizemos mudar e
dizemos caso um, caixa freio para quebra de ponto de
bolha. Então, estes são os principais fundos
estruturais, que caso? botão direito do mouse em Formatar documento
e insere o caso um, poderíamos dizer em série, impressão ,
linha, clique de fraude no CPP principal. E no caso dois, devemos ter
aqui com um clique longo. Em seguida, carrega
mais uma vez para o nosso USBE 32. Isso é o que quero dizer com
mantê-lo geral porque agora todo
o padrão CPP é nos
dá um valor de retorno. E, no entanto, o que
estamos fazendo agora, estamos pegando aqui os valores de
retorno em algo e essa é uma boa maneira como os
mantemos interface limpa. Em seguida, ligue a câmera e
abra a hora da cerimônia. E agora devemos
ver o mesmo resultado. Clipe curto, clique curto,
onclick, onclick provavelmente. Mesmo resultado. Interface mais limpa. E agora também podemos usar nossa própria biblioteca em
outros projetos.
43. Controle LEDs: Agora é hora de também podermos controlar nossos LEDs
com o botão. E, portanto,
definimos duas variáveis. Podemos dizer que é leitura de LED. Eu tenho o GPO 25 e o LED verde está no
GPO 12º. No meu caso. Na configuração, temos que
fazer um PINMode. Pinmode LED vermelho são saídas. Copie a pasta. Led green também é uma saída. Então já nos preparamos e
agora podemos controlar nossos LEDs. Isso também é fácil. Você poderia dizer aqui, e LED de direitos
digitais. Mas um clipe curto, eu usei, cinza é alto. E agora poderíamos dizer
trabalhar com bandeiras, por exemplo, se estiver ligado, então estamos definindo para baixo. Muitas vezes, nos colocamos em mais alto? Mas tenho certeza que você já
assistiu a aula de LED e também no exemplo anterior e exercício
neste curso online. E lá estamos alternados por um LED. Então, os direitos digitais, por exemplo, poderíamos usar aqui, LET green, e aqui na parte
alta ou baixa, estamos dizendo que as
leituras digitais LED verde. E o que estou fazendo agora
é que estou configurando aqui. Se o pino é que o LED está ligado, então eu
volto aqui e alto, mas não quero uma alta porque então eu
quero alterná-lo. E, portanto, estou
invertendo o sinal. E vejo que quando estou
ficando mais alto, é invertido muito baixo. Se o LED estiver desligado, eu entro aqui e baixo e interrogação, ponto de exclamação. Estamos definindo o baixo para o alto. Então, isso é tudo
o que precisamos aqui. Com alternar o LED, a impressão 0, eu o mantenho, mantenho porque então eu posso ver o que estamos recebendo no loop. E se você ler, então, isso deve ser bom.
Certo? Projeto. Em seguida, carrega a coisa toda. E agora com um pequeno clique, devemos ver ou devemos ligar. O LED verde está com um clique longo, o LED vermelho deve estar ligado. Então, ligando o serial, monitore e
clique na foto. Clicando em longo. E o que
podemos fazer agora é perder atalhos e clicar em
curto e longo. E como você pode ver, ambos funcionarão
ao mesmo tempo
porque estamos apenas controlando os GPIOs
com o botão Pin. E isso é o que eu
acho que ele torna tão poderoso porque
agora, como você pode ver, temos apenas várias
linhas de código. Toda a lógica geral
está no botão. E agora temos aqui um bom exemplo do que podemos fazer com um botão
e vários estados.
44. Farol de botão é atribuído a partir de botões: Nesta fase de um projeto, temos agora, eu
diria que terminamos nossa classe padrão
geral. Claro, você pode adicionar mais
alguns pontos a ele. O que você usa
regularmente para que você possa usar essa classe e você
projeta individualmente de novo e de novo. É por isso que fazemos essa maneira orientada a
objetos. Mas também pode ocorrer
agora que temos, agora e circunstâncias e requisitos que adeptamos
nossa classe, essa adoção não é
útil quando somos implementados na classe base
geral, no nosso caso, a classe de botão. Portanto, estamos
criando uma nova classe. O que faremos agora, chama-se rifle de
farol de botão. Isso significa que a base é a classe base é o
nosso botão ponto h. Nós herdamos e então podemos
adaptar alguns trechos de código. E isso é mais útil,
de forma mais limpa, porque as partes individuais estão
em uma classe separada. A classe base é de
uma forma geral ou nós a
mantivemos de forma gentil. Então é isso que fazemos agora. Estamos criando uma nova classe. Clique com o botão direito do mouse na fonte,
clicamos em Novo arquivo e podemos dizer que o
botão tinha um ponto de lâmpada CPP. E também clique com o
botão direito do mouse em New File, button, lamp dot h. E estamos começando
com
io.h padrão com o arquivo de cabeçalho. E agora acho que isso não
é novidade para você. Poderíamos dizer farol de
botão de classe. E agora queremos derivá-lo
da outra classe base. Um botão público duplo-cego, colchetes
curly abertos,
fechados, ponto-e-vírgula. Que isso
funcionará da maneira correta. Temos que incluir agora
esse ponto padrão h. E, como você pode ver,
na terceira vez que
incluímos o
arquivo de cabeçalho do botão. E é por isso que precisamos de alguns guardas
incluem também. Mas antes que eles
incluam guardas venham, estamos aqui e escrevemos que H. E agora o botão Include
Guarda F e surdo tinham a idade subjacente do cordeiro. E então temos
fim de ano, se bem. E no final
estamos vendo aqui. E se isso parece de uma
forma que eu diria, isso é bom até agora. Divide para a direita. Feche este. Agora estamos pulando para
o ponto promontório cpp. Portanto, temos que incluir
a lâmpada principal ponto h e temos que incluir
o arduino dot h. Eu sugeriria que também
fazemos está aqui, para que tenhamos nosso
ambiente também na classe. E agora podemos definir
aqui a primeira coisa. Por exemplo, poderíamos
dizer no arquivo de cabeçalho, ponto duplo
público, em seguida, usando um botão de
ligação dupla, padrão de ligação dupla. Então, o que é isso? Estamos usando o construtor a partir do
botão da classe base. Vamos abri-lo mais uma vez. E como você pode ver, este
é o nosso principal construtor, que somos invocados
no arquivo principal aqui. E isso será usado agora
também em nosso farol de botão de
classe relacionado ao desenvolvimento. E estamos fazendo aqui
e segunda função, chama-se White check fate. Isso também podemos criar
aqui em nosso botão, em nosso arquivo CPP. E acho que você
também conhece este. Botão, farol,
ponto duplicado, ponto duplo, verifique o destino
vem dos meus códigos extravagantes. Até agora tão bom. Uma pequena adaptação que temos que
fazer em nosso arquivo principal. Porque agora não queremos mais usar
a classe de botões porque é, eles estão relacionados em
nosso farol de botão. Portanto, mudamos aqui. botão tinha farol. Podemos usar o nome como o mesmo. E também podemos ver
aqui o construtor, mas por que recebemos um erro? Temos que alterar
o arquivo de cabeçalho. E isso é farol. E agora tudo
deve funcionar como antes. Basta dar um cheque. E acho que
estamos prontos para ir. Em seguida. Vamos verificar sim,
no próximo vídeo. Agora vamos implementar
a função para eles. Verifique se desvanece, e também estou falido um pouco
mais com a classe.
45. Botão Função Keep pressionado: Agora queremos adicionar alguma função aqui em nossa classe relacionada a dados. E queremos ver se o botão é pressionado por
mais de x segundos, por exemplo. O bom é agora
que temos excesso de todas as coisas em nossa
classe base, como por exemplo, as variáveis e também
todas as coisas que são invocadas em nosso CPP
principal no loop, estamos verificando aqui, botão aceso, botão de verificação. Isso significa que aqui
no botão de verificação. Estou por aqui e um
botão de verificação eu verifico ano a leitura
digital já e ela não será salva
no estado. E eu tenho x também está na classe relacionada
a laticínios do estado. Portanto, posso verificar
aqui se o estado é baixo, isso significa que é o botão pressionado e
também o botão Millis menos. Milissegundos. Maior que 2000. Quero dizer, dois segundos, 2
mil milissegundos. Então eu gostaria de
imprimir na linha de impressão
serial pressionada
por mais de dois segundos e sou herdada. Então, vamos ver. Isso
parece bom até agora. E temos que
implementar a fé de verificação
também em nosso CPP principal. CPP principal, ou já está lá. Então significa botão, esse é o destino do jag do ponto do objeto. E agora a função
será invocada em cada loop, estamos recebendo os
estados necessários e também o botão clicado da
classe base que estamos recebendo aqui porque o
botão Clicou em milissegundos. E também aqui, estamos vendo que aqui estão as
variáveis atribuídas e as
usamos em nossa classe de
classificação de laticínios para verificar se o botão é pressionado
por mais de dois segundos. Portanto,
estamos enviando agora o esboço para ver se
temos as funções antigas, o clique curto e longo. E agora com adicional em nossa classe específica,
onde programamos aqui com muito detalhes
no farol padrão. Então Kimara, cerimônia feita. E não clique curto,
Iniciar, clique em. Mantendo pressionado o botão
após dois segundos. Aqui você pode ver que estou pressionado
por mais de dois segundos, 12. Aqui vamos nós. Mais uma vez,
podemos ver esse também. E eu sou um pedaço
de peito em segundos. Sim. Lá vamos nós. E no próximo vídeo, estamos implementando
o componente de desvanecimento.
46. Adicione a função Fade: Então, agora queremos
implementar a lógica. É quando estamos pressionando
e mantendo pressionado o botão, o LED deve ser aumentado. E normalmente fazemos
isso com um loop for, a queda de ser
incrementado e variável, e estamos passando
o nível de incrementos para uma gravação analógica, por exemplo. E, portanto, ele deve ser
aumentado automaticamente em cada loop. Mas não é assim que é
suposto ser porque queremos, não de forma automática. Queremos manter pressionada a chave. E quando o
liberamos, o brilho um aumento deve ser interrompido. E, portanto, temos que fazer uma
abordagem ligeiramente diferente aqui. Portanto, temos aqui também alguns requisitos e desafios
que devemos conquistar. Então, na primeira coisa, eu diria analógico certo? Led verde. E poderíamos dizer, por
exemplo, para ativá-lo. Este é um passo o que
queremos implementar. Queremos
incrementá-lo de 0 para 255, por
exemplo, esse é o nível
máximo de brilho. O primeiro desafio será não
estamos recebendo o LED
adequado ou nossa variável. É claro que poderíamos
dizer apenas um valor PIN. Mas o GPO é
que poderia ser feito. Mas o que eu gostaria de mostrar
é que também podemos acessar suas variáveis
fora deste arquivo, que vou voltar ao CPP
principal e posso ver aqui nossas, hum, duas variáveis. E se, quando os colocarmos acima da declaração de inclusão? Porque aqui está isso inclui. O compilador vai de
cima para baixo e talvez ele possa
acessá-los. Lá. Led verde pulando de volta ao farol
padrão apenas para
ver a escrita firme. É isso mesmo? Escrito, sim, mas posso ver que não está definido. Então, a próxima abordagem, poderíamos copiar as declarações de LEDs
dentro do farol, mas depois temos uma declaração
dupla. Isso também não é o que queremos. Mas poderíamos dizer aqui, compilação
externa
agora sabe, ok, em algum lugar fora deste arquivo, o LED lido em
LED verde deve ser definido e eu o acesso. E como você pode ver
agora, isso funcionará. O próximo passo é como podemos aumentar o nível
do analógico, escrever o nível de brilho. E, portanto, eu gostaria usar aqui e inteiro estático, é chamado de contagem, por exemplo. E aumentamos em cada loop, o valor da variável, para que possamos adicionar a variável
count. E, na medida em que estamos no
loop, quebre suavemente o domínio. Então você pode ver aqui estamos aqui. A função é chamada
para o loop principal. E isso aumentará
nosso nível em cada loop. Mas e se quando chegarmos
a duzentos e cinquenta, duzentos e cinquenta e
cinco a 70 anos, este não é um bom caminho porque
então temos um transbordamento. Portanto, estamos redefinindo
nossa variável de contagem quando ela atinge
maior que 255. E então podemos dizer que a contagem é 0, então estamos redefinindo
a coisa toda. E também podemos dizer o
soro analogWrite, então o desligamos. E para uma visualização adequada, estamos
apostando no atraso nas camas. Mas então isso apenas para fins de
treinamento e também que
podemos ver aqui e muito mais. O efeito que eu também
gostaria de implementar em um curto atraso de 20 milissegundos para que
não esteja apenas atingindo o 255, ele vai um pouco mais lento
até o valor desejado. Ok, até agora tão bom. Do que precisamos de mais? Acho que isso é tudo. Estático, certo? Estático significa que ele será
definido no primeiro, quando o
invocarmos, na primeira
vez, será definido aqui. Em seguida, ele tem, agora o valor um no valor
de um próximo loop. Isso não será
mais invocado porque é apenas invocar a linha
padrão pela primeira vez. Agora esta conta
tem o valor 1234. Esta é uma
maneira muito conveniente de trabalhar apenas dentro deste escopo
a partir do botão branco,
promontório verificar o destino. E não precisamos
declarar de
forma global int count estática. Então, vamos ver se temos erro de
compilação e carne. Nosso ESP. Parece bom, mas não
estamos lavando. Porque gostaríamos de adicionar mais
uma linha de impressão serial. E eu gostaria de
postar uma variável de contagem para que
vejamos o que está acontecendo aqui. E para o presente de leitura,
pelo contrário, mais espaço
aqui, clique com o botão direito
do mouse em Formatar documento. Até agora tão bom. Então agora pulando de volta para o arquivo
principal porque temos que
adaptar seu também
algo porque Aqui estamos trabalhando
com direitos digitais. Mas o desvanecimento
será implementado com AnalogWrite e mixagem,
analógico e digital, certo? Nunca é uma boa ideia. Então eu sugiro que também
adaptemos uma função para que também
possamos desaparecer, mas também clicar em desligar e
no LED verde novamente. Portanto, temos que
implementar também em pouca função
com e sinalizar. Então, no arquivo principal, estamos
configurando aqui no caso escrever LED verde
é, por exemplo, Sarah. E queremos
ativá-lo com 255. E poderíamos dizer aqui, precisamos de N polar estático. Está ligado ou está desligado? E se um, então poderíamos dizer, estamos desligando. E dizemos que está ligado. Este LED acende quando
está ao retornar. Assim como o LED aceso é falso
para o próximo. Else. Quando é falso, então o ativamos
simples, pois é 255. E é verdade. E também quero ter essa impressão em série que você possa
ver o que estamos fazendo aqui. Clipe curto do CPP principal,
clique com o botão direito em Formatar documento. Mais uma vez, o que
estamos fazendo aqui, somos medo e piscina estática. É, o primeiro
começo será definido como falso quando o clique estiver chegando. Porque esta é a nossa função de botão
Check que oferece também uma. Quando chegamos aqui, uma volta, O primeiro passo
é, nós o ativamos. O led é verdadeiro. Em um próximo clique, LED. Led on é verdade. Então vamos desligá-lo
e assim por diante e assim por diante. E essa é uma
maneira conveniente de trabalhar com o flex. Então, mais uma vez,
verificamos e, em seguida, podemos fazer o upload do nosso arquivo. Aqui temos nosso arquivo principal. Clique nele, está segurado, clique em algum clique curto. Então, quando eu estiver
também posso segurá-lo um pouco e clicar em
mais de dois segundos, isso aumentará o desvanecimento. Estou clicando no ombro,
clique, clicando mais uma vez. E posso ver que
há uma mensagem dupla porque
implementei duas vezes. Esta é a
razão pela qual ele duplicou. Mas, no entanto, agora, quando
estou começando a desaparecer novamente, ele deve ser iniciado por 141, mantendo dois segundos. E como você pode ver, agora, será contínuo por 141, eu clico mais uma vez. Está com brilho total. Mais uma vez, está desligado. Clicando em menos de dois segundos. Este está ligado. Curto, um, curto. Então, em manter os seios para
que nós pedalemos uma vez até 2552 segundos de atraso, e ele se foi, e ele se foi. Muito bom. Isso é o que queremos até agora. Isso significa que nossa função completa é implementada e
desativada perfeitamente. E no próximo vídeo, tenho algumas
tarefas adicionais para você.
47. Tarefas adicionais implementadas pelo curso LED: Agora tenho uma
tarefa especial para você. Gostaríamos de
implementar a classe LED, na
qual somos criados também
neste curso on-line e
implementada neste projeto. E seria bom quando, por
exemplo, com um clique curto, configuramos a função de
pulso. Então, um clique está posando e
outro clique pulsará. E com um clique longo, gostaria de
ligar o LED vermelho. E depois, por exemplo, cinco segundos, o
LED deve apagar. Este pode ser um bom
caso, por exemplo, para alguma
porta de garagem, por exemplo. Então, quando quisermos abri-lo, o sinal ou o LED se formarão. Então isso significa cautela. Há a porta se abrindo
e quando estamos saindo, clicamos mais uma vez
na porta e a luz apagará ou será
desligada após seis segundos. Então isso poderia ser feito
com a classe LED, mas temos que adaptar aqui o arquivo principal do CPP,
essa será a tarefa. Existem muitos tipos diferentes de abordagens e soluções. No próximo vídeo,
podemos resumir como você se aproxima e
como eu o implementei.
48. Solução possível: Então, vamos começar com
a implementação ou uma solução possível
adicionando os dois LED
ao nosso espaço de trabalho. Então, basta arrastar e soltar os arquivos de
classe do LED, que foram criados
nas classes anteriores. E um dos primeiros
passos estava sendo incluído é o ponto h. E, na próxima
etapa, poderíamos dizer para implementar ou
iniciar o objeto. Então, vamos digitar isso em
maiúsculas. Vamos ler isso. Você pode ver que há uma
diferença aqui com 25 e temos LED verde com 12º. Então, também para fins de
visualização, você pode ver que estamos mantendo
aqui as variáveis porque as variáveis serão usadas
com a função de desvanecimento. E essa função é muito
curta e com o clique longo, estamos usando o objeto. Assim, podemos usar objetos
e as variáveis ou os pinos
GPIO ambos ao mesmo tempo. Mas, claro, na arquitetura e
bens, você usaria apenas
um tipo de abordagem. Mas eu gostaria de mostrar a vocês que ambos são possíveis. Então, indo um pouco
até o nosso arquivo principal, o explorador de arquivos,
estamos fechando, e lá vamos nós. Então, no arquivo principal, agora
podemos ouvir adeptos, este porque
estamos para baixo
para querer adicionar aqui esta função. Queremos implementar a função de estado
ruim. E você vai fazer, e lembre-se, podemos dizer
pontos verdes LED, cruzada. E precisamos e tempo, por exemplo, 20 milissegundos. Mas essa função deve
ser invocada em cada loop. E aqui estamos apenas verificando
se o botão está pressionado, para que isso não funcione. Portanto, temos que trabalhar
com algumas bandeiras para que
também possamos acessar a função fora
desta construção do switch. E, portanto, como fiz antes, gostaria de usar este. Então, como eu disse, a contagem de
inteiros estáticos é 0. O que faço com eles? Se a contagem módulo dois for
Sarah, por exemplo, eu diria prosseguir em false. E prosseguir ainda
não está definido. Então eu vou subir um pouco
e dizer que pulsar é falso. Então, no primeiro começo, defini-o como falso. Então, ficando um pouco escuro. Caso contrário, por exemplo,
coloca isso, é verdade. E também poderíamos dizer aqui, dizer verdadeiro e LED, ponto
verde desligado. E é verdade, é claro que é
verdade porque
usamos analógico desligado e ligado para o efeito de
desvanecimento nos rendimentos. Essa é a razão pela qual
reduzir aqui desliga-se verdade, mas sinto falta de lágrimas mistas. Isso deve ser verdade e
isso deve ser falso. O que eu implementei aqui? Essa variável será atribuída
no primeiro loop. Então o modelador sempre se divide, nos
dá o resto
da divisão. Então dividido por dois não descansou. E isso é verdade, então continuará. Em seguida, um dividido por dois. Há alguns
registros agora, nulos, que é a divisão
e, portanto,
salta para o outro. Então, cada vez que estou pressionando
aqui, eles são o botão. Eu também tenho que aumentar
o valor da variável. Esta é apenas uma
função garantida onde podemos alternar. E eu diria em Fleck. Então, clicando uma vez para sinalizar, ele será transformado em verdade. Segunda vez, ele
será transformado em falso. E agora fora da estrutura do switch do
host, eu poderia dizer que se prosseguir, se o sinalizador colocá-lo em sua verdade, então eu gostaria dizer isso porque proceda
é então em cada um, em cada loop through e também esta função
será invocada. E assim o LED poderia
ligar e desligar. Isso é o que queremos testar agora porque
fizemos muitas mudanças. E assim podemos ter certeza de
que essas mudanças são. Configurado corretamente, portanto,
desligue a câmera. Agora vamos ver. Se clicarmos uma vez. função pulsada
será ativada porque aqui na primeira variável
coluna 0,
essa variável como
um e o loop, a instrução if
é sempre verdadeira e a função predefinida
pode funcionar corretamente . Mais uma vez, clico em desligar. Assim, a variável de contagem estática
será mantida em
Um, Um modal ou dois não é 0 e,
portanto, ele vem desligado e depósito será ativado
ou falsa novamente. E posso clicar,
clicar, clicar, clicar, manter os dois segundos
e posso desbotá-lo. Desvanecendo. E desaparecer está acontecendo. Clicando uma vez novamente. E o processo, trabalhamos. Mas essa não é
toda a função. A segunda parte foi que
queríamos implementar yum e ligar e
desligar automaticamente. Portanto, poderíamos
dizer LED vermelho, ligue. E fazemos isso com
direitos digitais. Está tudo bem. E você pode saber, temos medo e
função no LET CPP, e é chamado de
desligar após atraso. Mas aqui temos que nos adaptar um pouco porque
nessa função, eu estou, deixe-me ver onde ela está. Então, estamos nessa função só
funcionará uma vez no momento. Portanto, temos que
dizer que o meio anterior está desligado, é Millis. Então ele funcionará
de forma adequada. Cada vez que ele será invocado. Volte para o CPP principal. E também esta função deve ser acessível fora da construção
do interruptor. E, portanto, dizemos que o
rato LED desligou após o atraso, por exemplo, 5 mil força, ou digamos 2500 e falso porque estamos
usando LED digital, certo? Mais uma vez, estamos
carregando todo o esboço. Então agora podemos ver que podemos
desativar o processo. Claro, também podemos
ligar, desativar o atraso. Mais uma vez, faça um ligar e desligar. E também o desvanecimento deve funcionar corretamente como vimos antes. Uma vez clique novamente e
ele estará pulsando. Isso é o que fomos
criados para cumprir as tarefas. E agora estamos no
final deste projeto e implementamos uma classe com sucesso. Eles estão relacionados à classe
e também implementaram outra classe para usá-la
em nosso projeto principal.
49. Fiação: Vamos começar com a visão geral
do hardware e
da peça do rolamento. Como você pode ver, é
muito, muito fácil. Com LEDs ESP 325. O LED está conectado ao
chão, a uma tábua de pão. E no ânodo
e no lado positivo, temos um resistor. E então vamos para o
GPI ou do ESP 32,
no meu caso, cinco LEDs e estou começando a ficar mais barato ou afundar. São 19, vai me mostrar em 1918. Em seguida, temos a GPL 51615 na parte superior de um para vários modelos
como equipe canina e G9. E você também pode usar
apenas três deles. Por exemplo, mais e menos,
estamos nos conectando
à tábua de pão. E cada uma das células
tem algum pino de dados. E estamos conectando o
pino de dados ao GPIO, por exemplo,
14, vinte e sete, vinte e
seis, vinte e cinco. Quando você estiver no modo de desenvolvimento, eu
recomendaria pular a parte V5 para a placa de pão porque a
USP é alimentada via USP. E você não quer ter dois tipos diferentes de escolhas. Mas é importante
que você conecte o chão à
tábua de pão porque os motivos, o potencial
deve ser o mesmo. Depois, quando você
quiser ter o jogo inteiro de cabeça,
não está conectado ao seu PC. Então, é claro, você precisa se
conectar para que os
ESPs também sejam alimentados. Mas estou alimentando
as paredes das células com um USB externo depois com um conector de
fonte de alimentação externa. E eu quero, estou
conectado com eles. 12º adaptador de energia mundial diferem aqui e regulador de
tensão, que é configurado para cinco volts com este potenciômetro
dentro do medidor digital, posso medir aqui para cinco mundo quando estou rolando para baixo ou para cima. Então eu estou conectando mais, menos à tábua de pão. E agora tenho cinco
volts na tábua de pão. O serviço será fornecido. Somos uma fonte de energia externa. Isso é tudo o
que estava precisando. Os LEDs têm um resistor, como discutimos anteriormente
na classe LED, e conectados às
partes menos da tábua de pão. Como você pode ver, coisas
muito, muito básicas. Está mais no lado do software. E agora podemos ir
para o código-fonte.
50. Como criar arquivos do curso: Estamos começando
neste projeto
criando um novo arquivo de projeto. Já fiz isso
na plataforma. Quaisquer dados que estamos adicionando
aqui nossos modelos básicos, por
exemplo, as portas de upload de
velocidade do monitor , a porta do
monitor. E sempre
incluo a biblioteca AnalogWrite. Salve este. E também no CPP principal, reescrevendo o 0 começa. E é chamado de
tesoura de papel de rocha e talvez tenha
alguma quarta variante. Estou pegando o poço, e é assim que eu chamo
agora minhas classificações. É um acrônimo, é RPS. Nós, WE New File, R dot h.
Então também criando aqui
e Arquivo CPP e Novo Arquivo, CPP do que à direita. E estamos começando
com o arquivo de cabeçalho. O arquivo de cabeçalho sempre tem
a mesma estrutura. Então é chamado de classe porque então estamos
fazendo em ponto e vírgula. A próxima parte será
incluir o arduino ponto h. E eles incluem guardas,
incluem guardas I, f e f r p w subjacente h i. Então é chamado definir RP SW. E no
final estamos vendo, e se parecer bom até agora, então estamos mudando
para o arquivo CPP e incluindo aqui o
Arduino hoje edge. E também estamos
incluindo o RPS W, H. Eu copio este, trocando dois CPP principais. E também estou incluindo
aqui o arquivo de cabeçalho. Então, agora configuramos o programa básico e também
criamos os arquivos de classe.
51. Arquivo de cabeçalho: Agora queremos definir todas as coisas que
entram no arquivo de cabeçalho. Embora quando não estamos
precisando disso agora, gostaria de lhe dar uma
visão geral do que precisamos. Então, primeiro de tudo, sou euro. Minha classe se foi
versículo da
classe, classe LPS W e privados. Na seção privada, não
temos string. É chamado de solução. E temos aqui e matriz
bidimensional. Então, no arquivo de solução, agora
temos quatro linhas e esses sulcos devem ser
inicializados com colchetes encaracolados. E estamos colocando
aqui por padrão. A primeira entrada é, por exemplo, tesoura, pedra, papel. Então eu tenho em cada linha, 43 entradas significam vírgula após pedra. Então posso dizer agora, a primeira entrada de cada uma das linhas
será verificada se eu, o será escolhido por mim. Então isso significa que se eu
escolher uma tesoura, então a próxima entrada vem papel, porque a tesoura bate o papel. Mas nada mais. Pedra e quando eu estiver
escolhendo pedras, pedra será tesoura,
bate uma tesoura, o
papel será de pedra e estava acelerando tesoura e
este doador. Então, quais regras? Porque os
cidadãos do mundo não sincronizam. O papel
flutuará na água. E o papel
cobrirá a pedra. Stone esmagará tesoura. Tesoura cortará papel. Estas são as regras
no formato básico. Claro, você pode
se adaptar a muitas, muitas variações para o comércio eletrônico, por exemplo, com macaco, etc, então você pode adicionar mais linhas. E minha lógica de jogo
agora é o que estamos
implementando mais tarde. Eu escolho o primeiro, por exemplo, papel
que eu iterei. E o papel pode bater
pedra e pior. E então eu vejo a pedra
inferior ou a riqueza, então ganho porque
escolhi papel. Se o bot não tem
pedra nem poços, então eu perdi porque
só posso ganhar com papel. E esta é a lógica do
jogo até agora. O primeiro é o que eu escolho, e depois vejo o que está
na segunda parte. E então posso dizer, se eu tiver um ou não, então vamos continuar
com a estrutura. Struct, por exemplo, pontuações. E nesta estrutura, vou colocar em n string
match e uma pontuação inteira. Usaremos isso mais tarde. E também terá
aqui na pontuação anterior. Clique com o botão direito do mouse Em seguida, ponto duplo público. Aqui, estamos definindo
um enum estados não. Por que fazemos isso em público? Porque queremos usar os
estados no CPP principal. Queremos verificar se
agora estamos jogando Estados, se estamos
aguardando a entrada do usuário, por
exemplo, um site, ou estamos no final e seguida, seus resultados
devem ser impressos. Então também estou dizendo que a entrada
escolhida por string, por exemplo. E eu estou digitando em uma
matriz e depois
temos tesoura, pedra, papel. Bem, e é claro que
também podemos usar aqui e descer. Mas eu gostaria
de mantê-lo simples. Eu sou, eu sou, eu escolhi a entrada. E depois podemos preencher aqui e
número aleatório, e está pronto. Então eu sou pontuações, marcar três. Então, o que são pontuações do curso
agora é nossa estrutura e
iniciamos isso. E agora temos aqui uma
matriz de três pontuações. Essas três pontuações
que estamos configurando, por exemplo. Então, um. E a pontuação é 0. E então, ok, então
eu não uso isso,
seu núcleo, eu
diria que pontuação do jogo, um. Cópia. Então, o
segundo que podemos dizer perdido. E o cirurgião deve ser, por exemplo, um apertado
desenhado como ele gostou. Olhos apertados. Até agora, tão bom. Como você pode ver. A primeira é a string, a segunda é o inteiro. Esta é uma matriz
e, no final,
precisamos aqui de ponto e vírgula. Então a próxima coisa
será branca. Todos os LEDs desligados. Branco. Led ligado. Ou poderíamos dizer que ligue todos os LEDs. Aqui vemos uma caixa de camelo, branca. Verifique, jogue e verifique o uso. Quando dois parâmetros de entrada, string usa uma string, mas um jogo de redefinição ampla. Isso é tudo o que
precisamos para este projeto. E agora
já implementamos todas as coisas
de cabeçalho necessárias
na lógica do jogo.
52. Primeiro modo de jogo: Neste vídeo agora
começamos definindo nosso
primeiro algoritmo de jogo. E, portanto, mudamos
para o RP como w dot cpp, estamos declarando ampla p.sit, W dupla ligação, dupla ligação, Check, use um vento. Esta será a nossa principal
função que
nos verificará nossa seção de jogo perdido
ou empate. Portanto, é uma string de usuário. E essa função será
invocada em nosso main.cpp, cada passagem aqui, nossa
seleção e a seleção de bots. Então podemos dizer se a entrada do usuário
é igual ao bot, então é o que projetamos. Está em estampa prateada apertada. Um. Else. Poderíamos dizer. Então, agora a lógica, o que definimos
pouco antes entrar agora no
jogo, isso significa quatro. Dizemos que aqui inteiro é igual a 0, inteiro menor que o fórum, porque nossa área de solução
tem o formulário de parâmetro. E agora estamos vendo aqui se soluções, isso é soluções. Eu defino isso com S porque existem
soluções braço plural, ano 0. Este é o usuário. Então, quando eu estiver escolhendo uma tesoura, ela irá iterar e verificará se os quatro primeiros, se o primeiro elemento estiver aqui, tesoura, quando estiver, então continua. Então dizemos, se as soluções E, mas não a primeira, a segunda é
comprada ou soluções. Precisamos de um pouco mais de espaço. Um para este local, então o que é feito? Temos um. Else. Nós perdemos. Isso podemos imprimir? Então verificamos mais uma vez
o que fizemos aqui. E poderíamos dizer que o euro perdeu. Então, mais uma vez, a lógica que iteramos através
do jogo para, através das soluções.
Aqui estamos nós. Então, por exemplo, se
eu estiver escolhendo papel, a primeira área, não vamos. O primeiro se não vai passar
porque o soro da solução, o soro é tesoura, 10 é pedra para 0 é
papel, depois maior. Verificando a próxima solução. Se o bot tem aqui, pedra, este, todos os botões poços, então eu tenho outro perdido. E esse é o
algoritmo fácil para nossa jogabilidade. Então, vamos experimentá-lo. Vamos adicionar
nosso arquivo principal e TR, iniciamos nosso novo objeto. E o objeto é que o
nome da classe é RPS w e eu
diria que o jogo é RP como nós w, mas não com esse nome w2. E então, dentro da
configuração, pude ver usuário de verificação do ponto de
jogo quando. E direi para x primeiro
exemplo, papel, papel. E o bot terá pedra. Então eu tenho um porque o
papel cobrirá pedra. Então, vamos experimentá-lo. Basta verificar aqui o compilador. Então, enquanto isso, conecto meu USB ao
computador, carregando-o. Então veremos se estamos certos. Então, reinicie. E como você pode ver com um, porque papel vamos
cobrir aqui esta cúpula. Então, o próximo exemplo, quando
estamos perdendo, por exemplo, pegamos uma tesoura e
o bot tomará Welles mais uma vez, faça o upload da coisa toda. E agora a tesoura atira
perdida contra as soldas. Então, vamos ver em
segundo plano aqui menos vários motores porque
no início eles estão
tomando a posição, então perderam a verdade. E o último jogo, o que gostaríamos de
verificar se temos papel e também papel do que todo
o jogo deve parar com impressão
serial apertada
porque a entrada é a mesma e duradoura
deve ser verificado. Vamos ver se essa
função estará correta. Em seguida, configuramos com sucesso nossos algoritmos de jogo até agora. Sim. Estamos bem? Então, na próxima parte, vamos cobrir um
pouco mais em detalhes. O algoritmo.
53. Modo de jogo em loop: Agora vamos usar o objeto
um pouco mais. E, portanto, queremos nos
livrar da impressão 0 aqui. E queremos usar a pontuação principal do
jogo. Mas eu gostaria de usá-lo com minúsculas no início. Então, pontuação do jogo. E agora queremos
ter um índice. Por exemplo,
temos seu apertado é esse segundo índice 01 segundos. E agora com algum ponto, já sou um baú eu. Temos que identificar
aqui a pontuação ou combinar. E eu gostaria de
ter que marcar. E agora mais é igual um porque
queremos ter uma adição. Para adicionar aqui para
resumir a função, some com um, o mesmo, o
mesmo, mas diferente. Temos aqui para indexar 0
e estamos no último, temos o índice um. Um pouco mais
orientado a objetos porque agora
marcamos, estamos seguros neste curso
na pontuação do jogo? Então, vamos ver, mude para o CPP principal para obter
todo o potencial aqui. O que temos. Agora, queremos entrar aqui e estamos fazendo
aqui e
os bads atrasaram apenas para fins de
treinamento,
porque depois estamos nos livrando deles. Certo? Então, uma vez agora, imprima os detalhes para que possamos
usar uma impressão serial f. E uma maneira muito conveniente como
podemos adicionar texto e variáveis. Por exemplo, poderíamos
dizer um, perdido e apertado. E o que podemos fazer agora é que
podemos configurar aqui com uma vírgula, a primeira variável, a segunda, terceira muito sala, fazendo uma
quebra de linha para que tenhamos aqui um pouco mais de espaço modelo
Merrill. E agora, como podemos
acessar agora a pontuação do jogo com o RPS W na potente pontuação do jogo. Não mexendo. Jogo é nosso nome de
objeto, jogo, jogos dois pontos. E então poderíamos dizer, queremos ter
o primeiro índice 1, a pontuação do
ponto, o nome da classe, o
nome do membro público e o índice. Então é isso que estamos usando
também para o último, mas foi o primeiro índice. E o último é
o segundo índice, mas sem vírgula no final. Vírgula dupla, também. O espaço reservado para isso será o e também o último. Parece muito bom. Para as
primeiras impressões f, ela não precisa ser impressa. E agora vamos verificar se
temos dentro da direita. E parece bom, mas queremos ouvir um
pouco mais flexível, um pouco mais aleatório. Portanto, eu diria que
fará com que sua entrada de usuário seja que sou entradas de usuário. Queremos acessar
nossas entradas escolhidas. Então estamos dizendo aqui novamente, pontos escolhidos, entrada escolhida. E eu poderia dizer,
por exemplo, dois. E isso vai me devolver, ou 10, ou 1012
serão impressos de volta. Quero imprimir também essa entrada de usuário de arte de
linha
no, no final da string aqui, também
quero adicionar uma quebra de linha. Então, barra n para quebra de linha. Mas aqui, não há função
aleatória dentro. Portanto, sugiro que
estejamos digitando aleatoriamente. E serão necessárias
duas coisas para começar, ponto de
partida e
o último ponto. Mas o último número
deve ser exclusivo. Então, ainda temos 123
são o que precisamos. Portanto, temos uma
função aleatória que nos dá, devemos também incluir
aqui a entrada do usuário? E essa função
aleatória ajuda não
papel ou riqueza. E para papel para o, para o bot será fixado para
que possamos verificá-lo depois. Em seguida, conecte o USB
ao computador. Pode ouvir meus motores de passo em segundo plano porque
ele já está conectado, então você verá se
estamos certos ou não. Então reinicie e bem, Scott perdeu contra o papel. Então, onde estamos? Quer dizer aqui? Pedra de papel foi mais
uma vez, tenho que reiniciar. Pedra, pedra, pedra, pessoas
perderam pedra, papel, perdidas. Perdido. Papel. O papel é marés. Stone dura, pedra perdida. Tesoura, uma contra bomba de cano. Estou perdido contra o papel
porque o papel está flutuando. Pedra contra pagamento. Foi, e como você pode
ver, mais uma vez, estamos começando tudo de novo para que eu possa ver que diz um,
papel, um contra o papel. Nosso papel deve estar cansado. Css, pedra perdeu riqueza um. Sim, então funciona. Você pode ver que a pontuação do jogo
será salva no objeto. E temos aqui um
pouco mais flexível. E também implementamos aqui
e função aleatória para
que fique um pouco
mais picante lá. Primeiro, no primeiro campo.
54. Criar um site: É hora de criar o site. Portanto, vamos para nossa pasta de origem,
clique com o botão direito sobre ela. Nova pasta e estou criando
aqui e pasta de dados, tem
que ser os
dados de nome para que possamos posteriormente carregar toda a
fase para o nosso sistema. Então eu copio e
colo aqui os arquivos da plataforma. Porque estamos precisando aqui
o jQuery, por exemplo, insira estilo CSS e
clique com o botão direito do mouse nele novo arquivo, e estamos criando
um HTML de índice. Agora estou copiando e colo
um pouco
porque são coisas mais gerais a fazer. Mas estamos
passando por cada linha. A primeira coisa que estamos sendo, estamos começando com HTML. Então, muitas vezes tínhamos um ano. Aqui. Poderíamos dizer, por exemplo,
pedra, papel, tesoura. Pior. Aqui estão algumas coisas que também
podemos abrir o site. Para dispositivos móveis. Nós mencionamos um
estilo e
dados de linha Jake que foram
incluídos logo antes. Então estamos começando com
a parte do corpo, corpo. E podemos fechar o
HTML. Dentro do corpo. Estamos colando aqui que o título pode ser
o mesmo que o título. Em seguida, temos aqui
e conteúdo da aula. Então, estamos fechando. Dentro desse conteúdo. O site principal será visualizado e temos
aqui e outros diff. Então, precisamos de todas as divs para que tudo esteja
alinhado muito bem. Você pode
acompanhar isso no style.css. Você pode ver o que as caixas de
aula farão. Então o próximo, para que realmente tenhamos tudo alinhado
TO. É incrível div. E dentro da caixa, sem sombra. Tenho aqui e
seleciono o Select. Eu diria, tornamos
seguras todas as coisas. Em seguida, vamos para
nossa pasta de projeto. Portanto, esses são todos os dados de origem da pasta de
tesoura de papel rock. Clique duas vezes no HTML de índice. E onde ele está? Aqui está. Aqui está o site até agora. Papel de pedra, tesoura, jogo. E aqui tenho minha seleção. E então eu vou tesoura, pedra, papel, riqueza. E também o id deve ser
nomeado como o mesmo. Tesoura, papel de pedra. Pior. Certo, atualize a página. Agora temos coisas novas. Até agora tão bom. A próxima coisa
será, por exemplo, poderíamos dizer quebra de linha,
quebra de linha. Que temos um pouco
mais de espaço aqui perto das mortes após as caixas. Deixe-me ver. Depois das caixas, preenchemos aqui um novo
galpão de caderno e ele é chamado, por exemplo, enviar entrada. E isso é necessário que tenhamos aqui uma função
onclick. Eu venho a ele mais
tarde, jogo ou jogo. Então isso é uma patente. O que fizemos agora? Nós fizemos e botões. Então, quando escolhemos depois
aqui e seleção, podemos invocar
aqui E função, que passamos
os dados para o nosso ESP 32. Então isso parece, parece muito bom. Após o def principal,
após o conteúdo, adicionarei hertz e
sublinharei sprays sublinhados. E eu estou adicionando aqui uma nova div e é chamada
def statistic, por exemplo. Então esta estatística
que estamos postando aqui, a estatística da classe de resultados tem que ser o nome
porque está definida no estilo CSS, para que eu possa alterar o nome aqui. Caso contrário, eu tenho
que alterá-lo também os arquivos CSS. E aqui eu não tenho mesa. Esta tabela será preenchida posteriormente com o evento do
lado do servidor. A tabela tem alguém
com linhas e linhas. E a ideia é, por exemplo, esse curso
que eu poderia verificar a mudança. E estes não são o resultado de
Duran em H3. Mais uma vez,
atualize, e este é nosso
site perfeitamente respondido até agora, tão bom. No final,
sugiro que também
incluímos seu JavaScript
não em um novo arquivo. Eu diria que é bom o suficiente quando estamos todos colocando
aqui em um roteiro. Então dizemos função,
como é chamado? Chama-se Submit get. Nesta função,
passaremos dados para o nosso ESP 32. Então, até agora
criamos um site. Em seguida, na próxima etapa,
discutiremos como podemos colocar uma conexão Wi-Fi e como podemos obter dados para o nosso ESP 32.
55. Acesse o site através do servidor de ESP32: Agora é hora de o USB 32, vamos conectá-lo ao nosso
wireframe e também podemos acessar o site
de ou para o GSP 32. Primeiro de tudo, pequeno erro no vídeo antes de
termos que tirar os dados dele
na hierarquia principal, na
área da pasta principal que as fontes, dados e fonte
na mesma hierarquia isso é necessário
para fins posteriores. Então, em nossa fonte, copiarei aqui
minhas credenciais. Então você pode me seguir junto
com o botão direito do mouse em novo arquivo. Suas credenciais, por exemplo, dentaduras de
Craig ponto h. E podemos dizer
aqui, por exemplo, é
vida de char constante e ver SSID. E poderíamos dizer que a senha
é const char não 2442. É isso. Isso é o que precisamos
para identificá-lo e defini-lo. Eu excluo este porque
já o tenho aqui. No cpp principal. Eu incluo isso inclui próteses
dot h como a próxima. Poderíamos dizer que
precisamos aqui um pouco mais das bibliotecas externas. Portanto,
incluo os seguintes. Você pode se perguntar, onde você pode obtê-los? Você pode colocá-los na plataforma. Eu não abro bibliotecas. E não sei se
fizemos isso antes, mas aqui você pode
escolher, por exemplo, próprio
ESP e ouvir o nome, por
exemplo, de
Kevin Harrington. E você inicia o exemplo
de instalação. E você ouvirá
o nome da biblioteca. Pode copiá-lo. E como eu
tenho aqui, cole-o. Isso é tudo o que
temos que fazer agora. Salve-o e mude para o CPP principal TO antes ou
depois do arduino ponto h. Incluímos agora todas as
bibliotecas
que precisamos, isso é o ajuste y e H. Por que não fizemos referência
e um sangue de nenhum? Esse é o motivo porque
o feed y em H não é o núcleo do ESP 30 para o núcleo significa que há referência as bibliotecas
são bibliotecas internas, eu diria e todas as outras. Temos que incluí-lo
dessa maneira, como fizemos antes. Por exemplo, também o TCP
que eram necessários e o servidor web de arsenics ESP para a comunicação
com o servidor web. Spits também está incluído no núcleo e
os espetos
são depreciados. Isso significa que nos próximos lançamentos eles podem não
ser mais suportados. Em vez disso, há
pouco EFS usado. Por que estou usando spoofs, porque estou usando aqui a versão USB 32 de espuma
preta, 3.5, a versão de filme sanguíneo, e preciso dela por outros motivos. Mas depois, quando você
quer mudar dois pequenos EFS, há apenas
algumas pequenas mudanças e tudo
funciona da mesma maneira. Eu mostro a você depois
como você pode fazer isso. Então precisamos ouvir
esse servo ponto h. São todas as bibliotecas
que precisamos até agora. Então nosso peito que estamos fazendo alterações na fonte
do Explorer, novo arquivo, minha esposa, V ponto h. Agora estamos
conectando ou dizemos aqui, todas as
funções necessárias que precisamos. Por exemplo, eles se conectam a pontos de
acesso que
temos uma conexão Wi-Fi. Aqui podemos dizer que
se conecta ao Wi-Fi. Wi-Fi entre SSID e senha. E isso é das
credenciais ponto h, Nossas principais variáveis globais. Então isso está no procedimento
padrão. Você pode simplesmente copiar e colar o
botão direito do mouse Formatar documento. Aqui você obtém a conexão
Wi-Fi. Se estiver em um loop while, cada segundo
será impresso
e apontado e será bem-sucedido. Podemos imprimir aqui
e o endereço IP local. Se for mais de 20 loops, ele sairá
do loop while. Porque muitas vezes
é para que haja algo com o
roteador, por exemplo. Então também sugiro que você
inclua aqui a função do processador. Será necessário para a web. Por exemplo, se gostaríamos desligar e acender as luzes,
etc.
Para que, quando estamos
transferindo e
obtemos parâmetro, não o usemos neste caso, mas você deve
implementá-lo porque é necessário. Crie também o objeto mais tarde. O que precisamos para os eventos do
lado do servidor? E também criamos aqui o objeto do servidor web
era para a porta 80. E então também devemos incluir
aqui o ponto arduino h. E também esses
erros seriais devem ter desaparecido. Até agora, tão bom,
muita cópia de pastas. Isso é algumas coisas gerais. Estamos voltando para o
CPP principal para a parte de configuração. Porque agora o que queremos fazer é começar o Smith's. Há também um procedimento
padrão. Também pode copiá-lo e colá-lo. Em seguida, invocamos nossa função, ou chamamos nossa função
se conecta ao
ponto de acesso que já definimos. Mas como você pode ver onde
se você for um erro, porque não estamos incluídos,
ele ainda inclui minha esposa ponto h. O próximo ponto, temos que adicionar aqui funções de soma
para o servidor web. Então eu só posto em todas as coisas e depois
passamos por linha por linha. Este é chamado de Server on. Servidor ligado, quando estamos
acessando o site, ele passará do
nosso sistema de arquivos, o
lado index.html do Smith's. O próximo. Temos aqui nosso arquivo CSS. Um arquivo CSS será fornecido a partir do site da
Smith e
também do Chaco, é JavaScript de texto,
e será fornecido através de espíritos
com esse nome de arquivo. Nome do arquivo. Então, como você pode ver, inicie o índice do meio. E isso é necessário
porque estamos armazenando os dados no
sistema de arquivos a partir de derramamentos. E é assim que podemos
acessá-lo automaticamente
a partir do estilo do programa CSS e
também do índice ou amanhã. Até agora, tão bom. E o que também precisamos disso
aqui no servidor começa. Uma nota lateral, se você quiser
mudar para little f s mais tarde, basta alterar a
instrução include S start. E aqui estava esse
respeito que você muda dois pequenos EFS e
tudo deve funcionar bem. Tal como acontece com os espíritos. Depois que a prata começar. Não estamos adicionando nada até agora. E eu também
recomendo que
comentemos o loop porque queremos confiar
para verificar se temos conexão Wi-Fi
estável e
se podemos acessar o site, portanto, estamos fazendo
aqui e primeiro compilando, verifique se tudo está certo
e, em seguida, estamos carregando essa captura em
primeiro lugar. Então, vamos ver se
tudo parece bem. Sim. Em seguida, carregando o esboço, como podemos ver, o
arquivo será carregado. Agora, se o upload
for bem-sucedido, estamos mudando para o
soro monótono porque agora devemos ver se o gás, se está conectando ou não. Sim, e temos função
instável, mas não podemos acessar
nosso site agora porque
não o enviamos até agora. Então, estamos perto de 0. Mana é necessária porque,
caso contrário, bloqueamos o caminho. Então, agora temos uma abordagem
diferente. Se você não é Arduino EDM, eu recomendaria você
aleatoriamente não aos terroristas. Procure, por exemplo, o upload do sistema de arquivos ESP
32. Porque é
completamente diferente. Você fez a unidade aqui no aplicativo de
terceiros, que é fornecido a
você no artigo. Mas não vem com o
Arduino IDE apontar O. Então eu também, já
experimentei com a mídia antiga e com esse upload
específico funciona muito, muito bom com o
novo Arduino IDE. Não consigo ver nada
porque não uso isso. Então, basta passar passo a passo
por todo esse processo, fazer upload de seus arquivos de dados
e, em seguida, você pode me seguir
junto com as outras etapas. Com o Visual Studio Code. É mais conveniente. Nós mudamos para a plataforma IO, vamos para o nosso kit surdo. Primeiro de tudo, poderíamos
limpar tudo, por exemplo, ou dizemos Construir imagem do sistema de
arquivos. Mais uma vez, é necessário que todos os
monitores de soro estejam fechados. Caso contrário, nós o bloquearíamos. Então poderíamos dizer
Upload File System. E agora todos os dados serão carregados para
a melodia ESP 30. Ainda não terminou. Aguarde até aqui a
mensagem bem-sucedida aparecer
no monitor serial nos
dados do turno verificados, saindo. Isso parece muito bom. Agora podemos ligar o monitor serial para
que ele esteja se conectando, mais
uma vez, conectando-se ao WiFi
am digitando na atriz. Mais uma vez. No meu caso, muitas vezes
tenho que denunciá-lo para que a conexão possa
ser estabelecida. Mais uma vez, agora, ele
foi estabelecido com sucesso. E quando estou digitando
o endereço IP neles, em minhas webs, no meu navegador no site
deve ser aberto. E é isso na
primeira abordagem, teremos
criado com sucesso e a conexão Wi-Fi
editará os dados específicos para o USB 32, e teremos acesso ao nosso
site no ESP 32. Abordagem muito, muito, muito boa. Muito é que
fizemos de tudo. E então, no próximo passo,
estamos implementando o algoritmo
do jogo em seu site.
56. Transfira dados do site para o ESP32: Agora queremos estabelecer
a comunicação entre a ESPN
e o site. Então, nosso objetivo neste vídeo, estaremos quando estivermos
escolhendo aqui algumas
de nossas opções. Reclamação semanal de que esse valor será passado para o nosso ESP 32. Primeiro de tudo, temos a
abertura do nosso índice HTML, e ele está em nossa pasta de dados. E no final, depois de abrir mais uma vez, é o final que temos
aqui uma função vazia, envie obtém este Submit get será invocado quando estamos
clicando neste botão. Este botão
transferirá ou acessará a função que deve nos fornecer parte
da opção escolhida. Então este é o ID SSP Oswald. E estamos acessando essa ideia e devemos
recuperar uma dessas opções. Então, como podemos fazer isso? Sou fã do jQuery porque
é para mim mais fácil de usar. Mas você também pode usar sua linguagem JavaScript
padrão também. Então, eu diria que a entrada
do usuário está longe. Agora estamos acessando a ideia. E a ideia é com a
hashtag, SSP ser Oswald. Chama-se ponto bem, para as minúsculas mais
ricas e americanas. Caso tenhamos outros caracteres
temíveis, imprimi nas entradas do usuário do bloqueio do console para mais tarde para a proposta de depuração. E agora a tarefa será
que também transferimos esse valor para o ESP e isso podemos fazer
com eles solicitação GET, o que não é a solicitação GET? Por exemplo, meu site. E se eu tiver aqui, por exemplo, em um site chamado ele é chamado
arduino dot PHP. E, em seguida, indicando com
algum ponto de interrogação, o nome da variável é William. E isso não é, hum, sim, e como podemos nos comunicar através do USB com
as variáveis GET. Isso significa que mais tarde eu
posso obter aqui esse nome de variável
e buscar os dados. E isso é o que estamos fazendo
aqui com essa abordagem. Portanto,
também estou usando jQuery. Então eu estou usando aqui, você é nossa função
para cima que não estava certo. Isso não era para ser. Deve codificar,
função e dados. Lá vamos nós. E essa é a estrutura disso. E aqui não há nada. Aqui não há nada a
fazer por nós porque só queremos enviar
a anomalia de dados. O USB pode enviar dados volta para o site e
podemos fazer algo aqui. Mas estamos usando
uma outra abordagem porque isso não está apenas
em processo de sincronia, mas queremos um
processo assíncrono porque mais tarde a ESPN deve fazer todo
o jogo e depois
deve enviar de volta os dados. Isso é apenas para enviar dados em tempo
real para nossa ESPN. Mas o URL deve ser definido. E eu diria que o
nome da variável get é chamado SSP BM. E estou vendo igual, e estamos sentados no nome da
variável é a entrada do usuário. Portanto, o parâmetro GET deve se parecer com
algo assim, é, por exemplo, Stein
ou roubado neste caso. E deite, estamos buscando esse nome de variável e
recebendo de volta as entradas do usuário. Então, estamos economizando os dados. E eu recomendaria
que estamos enviando agora apenas para o site para
que possamos ver se
temos aqui algumas setas. Então vamos sangrar de
Iowa, fazer upload da imagem do arquivo. E pare. Vejo aqui que perdi aqui. É claro que tenho que
colocar aqui para conseguir mais uma vez, fazer o upload. Abriu uma cerimônia feita. Então eu já estou conectado do que
estou abrindo o
site mais uma vez,
atualize-o, clique com o botão direito
em algum lugar aqui. Então você pode continuar a inspecionar. Estamos clicando em cancelar. E agora, quando
estamos escolhendo aqui algo e
clicamos no avião, estamos recebendo aqui o id. Perfeito. Então, o que
fizemos até agora é que
estamos recebendo clicando
no botão de reprodução, esse valor do ID, não o conteúdo, o ID. Essa ideia deve ser a
mesma que definimos no, oh, onde a temos
no arquivo de cabeçalho? Porque então podemos igualá-lo. Portanto, esta é uma
riqueza de papel de pedra deve ter a mesma identificação que aqui, definida. Então podemos continuar mais tarde
em cheque o uso de in poderia colocar os valores nesta função e ter toda a nossa lógica de jogo. Então, mas ainda não
terminamos porque temos que colocar aqui no CPP principal e função que
também capturará o get. E eu já o
declarei aqui. Então, fazemos aqui uma função
individual e queremos chegar aqui, eles estão respondendo pode
ser uma solicitação de servidor web porque essa construção
tem tudo o que precisamos. Primeiro de tudo, vamos um
pouco até o topo do nosso arquivo e estamos criando
aqui algumas variáveis. Primeiro de tudo, gostaria de
fazer uma entrada de usuário de
variável global. E estamos definindo aqui
e função protótipo. Qual é o protótipo da função? Porque eu
gostaria de fazer aqui a função de verificação de padrões, mas não acima da configuração quando estou declarando não comentado para mostrar o
que eu sou o que
quero dizer com isso. Basta copiá-lo. Vou até o final do arquivo. Eu gostaria de ter
aqui a função porque ela me dá
uma visão geral melhor. Mas aqui você pode vê-lo. As libras de verificação podem ter sido compilando erro
porque precisamos definir no primeiro lugar a função para que o compilador vá de
cima para baixo, sabe, ok, o função
será definida, não
tem lógica, vai,
vai para baixo, para baixo, e
aqui vem a lógica. Isso é o que um protótipo
faz, portanto, não comentado para que o
compilador conheça a função. E agora vamos direto para
o botão e agora eles estão, os detalhes entram
como um parlamento de entrada que estamos usando essa solicitação que estamos recebendo
do servidor web. E agora poderíamos dizer, se as solicitações, e
isso é um ponteiro, então estamos acessando
com o erro. E aqui estão todas as funções
implementadas que estão lá. E não deve haver nenhuma
função com Hesse param, não sibilante S, S PBM, ou como chamamos
isso? Nós o chamamos. Deixe-me ver. Spb, por exemplo. No entanto, você quer
chamá-lo de CPP principal. Quero capturar isso. E se houver esse parâmetro, então eu digo entradas do usuário, que somos declaradas em
um escopo global geral. Então dizemos solicitação
que tem parâmetro. Agora temos que os pais
receberem param, SSP, PM. E estamos dizendo, bem, você é muito bom até agora. Agora, eu
gostaria de imprimi-lo 0, imprimir a entrada do usuário, para que
possamos verificar se o nosso direito, vamos ver o que o
compilador diz. Fechando todas as coisas do Hello
abertas. E quando o compilador nos
dá uma luz verde, enviamos o esboço, o site já está carregado. Então podemos ver se não
estabelecemos e as cerimônias de
comunicação estão abertas ou recarregando
o site. E agora eu quero ter que apedrejar. Stone está aqui. Eu queria papel. Certo, perdi
uma quebra de linha. Tesoura. tesoura novamente foi muito boa. E aqui temos um estabelecer
com sucesso
a comunicação entre o site e nos transmitir
o valor para o ESP 32.
57. Modo de jogo sobre dois jogos ganhos: Agora estamos chegando
ao molho secreto do nosso jogo porque
queríamos mudar o modo de jogo para que possamos detectar automaticamente se estamos esperando por uma entrada, se estamos sangrando ou se o jogo está no enésimo
e jogamos para um. Então isso significa que preciso de duas vitórias ou duas derrotas que estamos
terminando o jogo. E, portanto, nossos estados
entram aqui no jogo. E antes de tudo, temos que pensar qual
é o primeiro estado? O primeiro estado será, estamos aguardando as entradas do usuário
após o início do USP 32. Depois de
configurarmos aqui e usar a
entrada através do site
, estamos mudando
para jogar o jogo. Quando você está jogando o jogo, tem que
haver em
segundo plano. Verifique se estamos no final ou estamos jogando
novamente contra o bot. Porque se alguém, se eu tiver um ou o
teste DBO duas vezes um, então estamos no final. Estamos redefinindo tudo ao
publicar os resultados no console ou estamos aguardando a entrada. Isso é o que estamos
querendo implementar agora. Então, antes de tudo, vamos para a parte de configuração. E na configuração, temos que declarar aqui, queremos esperar. Então, a primeira declaração
de nossos estados, portanto, vamos
até o final da configuração. Então estamos digitando nosso objeto Cloud nome de
triclinium é chamado de jogo. Ponto do jogo. Estado é igual a ponto do jogo. Aguarde a entrada do usuário. Aqui recebemos um erro porque
aqui temos nossos estados, mas os estados
não são inicializados. E, claro, não é incomum que
estamos inicializando coisas
no arquivo de cabeçalho, mas eu só quero um
objeto dos estados. Não quero ter muitos tipos diferentes de
objetos, apenas um estado. E esta é a
razão pela qual podemos
iniciá-lo aqui no arquivo de cabeçalho, e então podemos
usá-lo e acessá-lo. Então agora podemos ouvir no loop, perguntar ao nosso objeto, nosso objeto de jogo, em que estado
estamos atualmente. E então podemos aqui, focando na
borracha, por exemplo. Então, o que podemos fazer agora? Mude o estado do ponto do jogo. E no caso do switch que estamos, estou perguntando o próximo caso. Então, o jogo do caso,
jogando ponto duplo, quebra o jogo de casos, aguarde os pontos de dados de entrada
do usuário. E temos o jogo do Reino Unido
e sem qualquer intervalo. E até agora identificamos os diferentes tipos de
estados dentro e quebramos. Salte de volta aqui. Tem que ser superior f. Agora, deve ser bom. Sim. Então, deite, estamos verificando aqui o conteúdo
do caso do switch, mas estamos atualmente
no estado. É a configuração. Estamos aguardando a entrada do usuário. Então agora alguém está entrando no site em entradas e estamos
recebendo a entrada aqui, excluindo a
impressão serial e mudando o estado para reprodução. Portanto, o ponto do jogo
Estados é o jogo. Agora que mudamos o
estado no próximo loop aqui, a função será iniciada
no jogo do caso. E agora podemos pensar
qual é o próximo passo? Agora temos que usar
nossa função principal. Chama-se Verificação do jogo, uso de quando as entradas do usuário. Esta é a nossa variável global
de params tchecos. E aqui eu quero ter as
entradas dentro do loop,
mas fora do switch, eu definiria aqui o pote de cordas. E o pote chega aqui. Entradas escolhidas por ponto de jogo. Aqui, esta é a nossa RAM desejada. Tem quatro entradas e
queremos com um número aleatório, x está aqui, uma delas. E como discutimos antes, isso é uma coisa particular. Essa é a
razão pela qual o adicionamos aqui. A entrada escolhida como entrada escolhida pelo
público. Então estamos fazendo
em número aleatório, por
exemplo, aleatório a quatro e S que discutimos
também anteriormente. Este primeiro número é
inclusivo e isso é
exclusivo. Então, precisamos aqui. 0 a três, essa é a
razão pela qual temos que entrar em você. E para o nosso número, número
redondo que também estamos
identificando. Porque precisávamos também
mais tarde abaixo desse número. E podemos definir aqui no campo
URL número aleatório. Ok, até agora tão bom. Agora, a entrada do usuário
vem do site será verificada aqui
a partir dos padrões checos. E chegamos aqui em
entradas aleatórias. Até agora, tão bom. Do que precisamos? Agora? Acabamos de verificar os estados. Vamos ver o
usuário de verificação do jogo quando estamos apenas
armazenando este curso, mas não mudamos aqui nenhum
estado e o mantemos geral. Isso significa que temos que
me ouvir Pode segunda função e verificar a jogabilidade. Jogabilidade. Ainda não fomos definidos
, portanto, estamos mudando para o nosso arquivo. Vou pressionar W e estamos
dizendo o que RPS, WOW, apontar, verificar jogabilidade. E aqui, sob a culpa do jogo
checo, temos que pensar sobre
o que deve acontecer. Então, alguém entra em
algo e bule. E agora é que temos por
aqui nos estados em que alguém ganhou ou perdeu. E agora devemos identificar, o jogo
está no final ou devemos esperar
por outra entrada? Porque, por exemplo, se eu tiver uma tesoura e eu for a pedra, o bot ganhou pela primeira
vez. Agora temos que esperar. Mas o que devemos desenhar, quando só
temos um para um. Portanto, verificamos
agora se nossa coluna de jogos,
então, se a pontuação do jogo apontar, temos que acessar aqui
para marcar a pontuação do jogo. Pontuação do ponto da primeira entrada. Isso é o, isso é o que queremos, é maior que a ferramenta. Ou se o jogo marcar com a primeira pontuação maior que dois, então alguém perdeu
ou alguém tem um. Porque o primeiro é que eu tenho 12 vezes ou o
bot tem 12 vezes. Então, mesmo depois dos eventos, então o jogo está terminado. Então podemos dizer aqui, o estado é quando não, uau, ninguém tem um. Em seguida, o estado é, aguarde as entradas do usuário. E estamos aqui
dentro da aula. Portanto, essa é a
razão pela qual não precisamos um nome de objeto e podemos
identificá-lo com um sinal de igual. Até agora tão bom. E essa jogabilidade de verificação será invocada e cada loop
quando estivermos jogando. E por esse motivo,
gostaria de adicionar algumas impressões prateadas para que
tenhamos uma saída melhor. Resultados. Impressão em série. Podemos dizer um. Então vemos perdidos. E poderíamos dizer marés. E estamos digitando
a pontuação do jogo, não 0. Pontuação. Perdi este. E os esquemas de CO2 estão empatados, então pegamos a coisa toda. E como a última, linha de impressão
serial, Okey-dokey, parece boa até agora. Então temos que voltar
ao nosso loop principal porque ainda não
terminamos. Porque agora
verificamos novamente a culpa. Então, está mais úmido esperando por
uma entrada ou é o fim. Mas o que ele disse ao enésimo, indo um pouco
para baixo, temos aqui mais
uma função que
temos que implementar. Então, poderíamos dizer jogo de redefinição de
pontos do jogo. E deixe-me ver um pouco. Então redefina o jogo,
voltando para o nosso arquivo de classe, RP SW
branco, jogo recente. E o que deve acontecer aqui? É muito fácil porque eu não
quero excluir o objeto em um
iniciado ou novo, porque
talvez você faça aqui algumas rodadas contando, etc. Então eu só quero excluir ou
substituir a escola de colagem. Portanto, estou
usando um loop for. Então, números inteiros contam até três. E Tia, eu digo a pontuação do jogo. Eu, a pontuação é igual a 0. E agora estou sobrescrevendo
este curso no final e alterando o estado para
aguardar as entradas do usuário. Agora acho que gerenciamos todos os estados de uma maneira geral
porque ele no loop, podemos acessar os
vários modelos, por exemplo, mas não implementando algo
na classe principal principal. E também aqui estamos
aguardando a entrada do usuário, nada para fazer aqui. Mas também aqui eu
sugeriria para fins de
treinamento e
também para validação. Eu gostaria de
imprimir aqui
as entradas, então impressão em série. E aqui estamos nós. Estou dando a ele o fundo, mas estou trocando aqui, não o pote no primeiro. Eu gostaria de ter
aqui as entradas do usuário, porque então é a mesma
ordem como aqui, a entrada do usuário. Então temos o pote
como o último sinal
que estamos fazendo aqui, linha de
impressão e
ponto e vírgula no final. Não se esqueça do ponto e vírgula. Vamos verificar se temos
aqui algumas setas. Recebemos a
luz verde do nosso compilador? E então estamos
enviando o esboço para o USP 32 deles.
Sim, parece bom. Em seguida, carrega. Então o programa é
exibido e estamos conectados ao Wi-Fi e
mais uma vez recarregamos o site termina. Agora, eu gostaria de
escolher pedra. Stone é minha entrada, papel é o bot, então eu perdi. Isso é verdade. Pedra novamente, papel de pedra. Certo. Mais uma vez, gostaria de ter papel, papel contra tesoura. Eu perdi do que a riqueza era. Mais uma vez irmã, eu ganho porque as
tesouras são sorteadas. Então, mais uma vez, Wells era flutuador de
papel e papel. Eu perdi novamente. Novo jogo. Começaremos na próxima vez. Tesoura. Tesoura
não foi meu dia de sorte. Tesoura roubada. Um, mais uma vez, o papel de pedra
e pedra, eu perdi. Mais um jogo. Gostaria de ter medo
e tesoura de papel apertada. Perdi propósitos enquanto perdi. Como você pode ver, aqui, temos papel, papel apertado. Isso é o que eu queria verificar. Então, a jogabilidade, eu
diria, funciona muito bem. E no próximo vídeo,
vamos mostrar nossa tentativa de fazer o resto.
58. Como enviar eventos paralelos do servidor: Agora queremos enviar de volta
aos resultados do ESP para o site para que mais tarde
também
possamos visualizar os
resultados lá. Portanto, podemos usar aqui
os eventos do lado do servidor e
os eventos paralelos do vendedor estão
praticamente preparados para nós. Só temos que copiar as coisas de
colar. E isso é do
expressivo em si. Eles nos deram os trechos de código
e você pode preenchê-lo. Portanto, estamos
abrindo o índice HTML e fora da função
Submeter get, estamos declarando aqui. E se a origem do evento da janela, dentro, copiamos e colamos a primeira função,
clique com o botão direito do mouse em Formatar documento. Então, um EventListener,
ele será aberto. E então chegamos aqui
também na mensagem quando ela está desconectada e o
ESP perdeu a conexão. Além disso, a mensagem, a
primeira será implementada aqui. Mas agora você é nossa fonte. Nossos eventos podem vir. Antes de fazer isso,
estamos
voltando para o nosso arquivo CPP principal. E nós, vamos ver, vamos para o estado. E temos que inicializar
aqui os eventos do lado do servidor. O servidor começou aqui, mas agora lida com os eventos do servidor
web. E como poderíamos fazer isso? Também está aqui no
padrão fixo copiar e colar aqui e também para
auto-evento expressivo em conectado. Então, temos aqui uma
ideia quando estamos reconectando, e esta é a primeira partida. A mensagem foi,
que será enviada aqui dentro do Halo e
do servidor nas alças. Portanto, esse é o script básico, cujos manipuladores são os eventos. Mas qual é o nosso trabalho? Nosso trabalho é enviar os
resultados para o site. Portanto, poderíamos ir aqui sob a jogabilidade, por exemplo, e enviar resultados para o site. E isso é o que
podemos fazer agora, eventos, eventos
punk send é nosso objeto
que somos criados aqui. Deixe-me ver aqui. Deveria estar em um wi
fi, acho que aqui. Este é esse evento, fonte
do evento. E agora no loop descendo, enviado você, temos que
enviar uma string, por exemplo. E corda. Basta copiar e colar
o primeiro. Alguma string porque isso é apenas um inteiro
convertido em uma string. E então dois não carregados
porque isso é o que precisamos. Então eu também estou dando o segundo valor e ele é
chamado, por exemplo, um. E também estamos
postando aqui Millis. Então aqui temos que
adicionar não reduzido, e é chamado de jogo. E como gravar
a pontuação do jogo. Pontuação do jogo de pontos, 0 e pontuação de pontos. Agora temos dois pontos. Próxima linha,
queremos ter o perdido. E o terceiro
será o apertado. Certo. Vamos terminar. Primeiro de tudo,
carrega os sites. Não, não terminamos
no site. Só temos os eventos básicos, mas agora temos que
capturar nossos eventos. Portanto, também
preparei algo aqui. Vamos passar por isso. AddeVentListener de origem,
e é chamado 11. Em seguida, dividimos aqui
no cpp principal, este. Então este será
inicializado aqui em um. E então estamos
imprimindo os valores
no console apenas para
o primeiro propósito. Em seguida, copie cole duas vezes
porque perdemos e apertamos. último. Agora, salve e carregue o arquivo para que tenhamos uma nova
atualização do site. Mais uma vez, qual é o problema? Sim. Agora funciona porque o monitor
serial estava aberto. E depois também
carregue essa captura. Usp tem conexão. Então estamos fazendo Reese
refrescar inspecionar console, enquanto o conselho
um pouco maior. Aqui estamos nós. E como você pode ver, recebemos aqui as mensagens. Então, quando estamos atualizando, use P está conectando você também
aos eventos do lado do servidor. Então, por que não estão aparecendo aqui? Então estou enviando uma tesoura. E aqui o resultado
na entrada 0 é o mesmo, mas também
ouvimos o feedback. Então, um perdeu firme. Mais uma vez, eu
escolheria o PayPal com 110. Então nós cortamos
aqui foi eu tenho 111. Estes são os últimos 31. Muito bom. Isso é do log do console
no site para que
possamos ver o que inserimos uma
tesoura para 11. Quando eu estiver pressionando a próxima, a próxima opção, o jogo
começará tudo de novo. E como você pode ver, chegamos aqui também esses eventos do lado do servidor. Perfeitamente. Estamos enviando valores
para o cabeçalho ESP e o jogo jogando
Glenn motors e , em seguida, enviando de volta os
valores para nossos sites. E no próximo passo, mas
poderíamos torná-lo um pouco mais. Eu sou bonito esse JavaScript
e também com CSS.
59. Preparar eventos: Nesse estado deste projeto, podemos obter com sucesso eventos do
lado do servidor
no site, mas ele está apenas no console. E agora queremos ficar bem
com a coisa toda. Portanto, vamos
voltar ao nosso CPP principal e os eventos estão
cortando os eventos do
jogo principal até o fim. E antes de redefinir o jogo, estamos enviando aqui
os eventos apenas uma vez após o jogo. Então estamos salvando
aqui o CPP principal e mudando para o nosso HTML de índice, porque aqui temos que
adicionar um pouco. Primeiro de tudo, estamos olhando
aqui para essa estrutura. Temos aqui uma estatística. E é chamado de resultados é o nome da classe de archaea
tem que chamá-lo de rins. E porque é um nome de classe. E queremos adicionar
aqui em algumas linhas. E uma tabela é de uma
estrutura com um rho. Rho é e t são tecnológicos. E também temos algumas colunas, e as colunas são
identificadas com td. Quero ter suas
quatro colunas. Uma linha. A primeira coluna é
o número redondo. Então quantos, com que
frequência eu tenho um, perdido e apertado, etc. Portanto, estamos usando o jQuery. Primeiro de tudo, eu
gostaria de ter aqui e variável, e é chamado de
contador TR porque
quero saber quantas horas, quantas linhas estou adicionando. Veremos por que estamos
usando a necessidade deles. Primeiro de tudo, temos que declarar não só
para as rodadas, eu quero ter uma perdida. Este é o cabeçalho
e também apertado. Certo? Agora podemos
ir aos nossos eventos. E agora temos que pensar. Queremos adicionar aqui no 1. Primeiro de tudo, temos que
criar o n a partir de uma nova linha e, em seguida, o comentário das
colunas e o final, temos a estrutura
do final
da coluna e da
linha mais uma vez, primeiro lugar, a linha começa, depois temos quatro colunas e depois temos
que terminar lá. Linha. Portanto, mais uma vez, indo para o nosso único evento. Então, antes de tudo, var row é, estamos começando com
algum evento TR, e então vem nossa coluna. E isso será enviado agora via
che chromium para nossa tabela. E a tabela é chamada. É uma classe que estamos usando
um ponto, sr. por exemplo. E estamos usando o
apend porque
queremos adicionar depois
cada linha depois. Estamos analisando a sala de valor da
linha, mas não terminamos aqui. Qual é o nosso TR? Eu gostaria de me identificar
com identificação especial e a ideia é o t, nosso contador. Então, primeiro de tudo, apenas
aspas normais, depois aspas duplas para
que eu possa adicionar aqui a própria sala e insights. O T D que eu gostaria de
ter também. Além disso, mais. Certo? Não estou bem aqui
porque aqui vem o número da linha
mais, mais contador. Então, isso é o mesmo. O id é apenas o identificador para
nós, para a programação. E aqui eu
gostaria de ter isso. Aqui está 123, etc. Mas eu também adiciono aqui e classe. São números pequenos e você
pode vê-lo neste estilo CSS. Até agora, tudo bem. Em seguida, estamos sobrescrevendo nossa
variável de linha e estamos enviando
também esta para o TR, que somos criados aqui. Portanto, hashtag
mais t, nosso contador. Portanto, estamos querendo
agora acessar o id do novo criado um ponto de
linha acrescentar uma linha. Dentro da linha. Estamos criando uma nova coluna. E isso também acontece com números e insights menores que
não possuem classe. Este, podemos adicionar aqui
e dados. O que são dados? Dados são o que somos
impressos no console, que passamos
pela ESPN. E isso é tudo o que precisamos. Acho que, então,
copiaria este. O log do console estamos substituindo e estou adicionando aqui e
var na frente da linha. E também aqui, o último, mas não terminamos. A última coisa porque
temos que fechar a linha. Perto da luz. Nós o abrimos aqui no
primeiro começo, mas queremos fechá-lo agora. Portanto, eu digo o ID
do contador TR, que inicializamos antes. Anexação de ponto e uma
tag de fechamento para a linha. No final, tenho que
aumentar nosso contador
para a próxima linha. Isso deve ser tudo. Acho que até agora. Então eu sugeriria que
estamos enviando o
site e o esboço. E vamos ver o que
o compilador diz. Usp se conectou do que estamos reiniciando ou atualizando o site. Como podemos ver, nossas quatro
linhas ou colunas estão aqui. Agora estou enviando tesoura. Eu perdi uma vez, segunda tesoura, e já
perdi o jogo, como você pode ver aqui. Estou perdido. Então, mais uma vez, perdeu uma vez, apertado
, uma vez, um. Então, só temos uma linha porque ainda
estamos no jogo. E agora temos um. E então temos aqui,
depois a próxima linha. Então, um pequeno erro. Temos que inicializar nosso
contador com um e não 0. Mas aqui, outro jogo com pedra depois perdido uma
vez, perdido para o tempo. Próxima linha. Perdi uma da primeira vez. Apertado, apertado. Segunda vez, perdi uma
vez do que agora mudei
para papel e ganhei. Então o jogo ou o quarto jogo, 12 vezes, perdeu uma vez
apertado duas vezes. Então,
implementamos com sucesso aqui os
eventos do lado do servidor e também temos uma boa página de resultados onde podemos visualizar
como são nossos resultados.
60. Implemente o curso LED: Uma de nossas últimas tarefas
agora será implementar a classe LED. Portanto, vou para
a pasta principal do
capítulo anterior do curso no qual o, que definimos os LEDs. E lá vamos nós. Copiamos e colamos em nossa pasta de
origem e abrimos. Aqui você pode ver o que
definimos aqui. Então eu sugeriria que
estamos abrindo aqui o RPS, w é TPP e inclusive aqui
nos novos LEDs ponto h.
E, como expoente, eu diria que
verificamos o arquivo de cabeçalho
porque no arquivo de cabeçalho
eu já implementado no
primeiro começo. Todos os LEDs desligam e
ligam todos os LEDs. Eu não diria terminologia. É um nome um pouco falso. Ele deve ser
LEDs de exibição, por exemplo. Então aqui vamos nós,
Wide, todos os LEDs desligados. E vale a pena nosso tópico BSW e
MSW ponto a ponto. Essas tampas. Então, o que há de errado com esse? Desculpe, não, está tudo bem. Então agora temos que pensar, como poderíamos implementar
aqui uma função LED, que é, que será
invocada em todos os jogos. E, portanto, é
relativamente fácil porque chamamos a função
após cada jogador de verificação. Porque depois de cada cheque, tem que ficar inalterado
no discurso. E então também queremos
exibir aqui a
mudança da pontuação. Ecrã LEDs. E aqui fazemos uma
função mais simples, onde podemos ver se a pontuação do jogo para ganhar por pontuação de
0 pontos é igual a uma. Em seguida, primeiro LED na LLC
se o jogo marcar um. Então isso significa que perdemos. Dotcom é uma culpa minha. Eu sou o único porque tenho dois
LEDs ganhando e perdendo para LEDs estão na
mesma coisa com débitos. Então, se estamos perdendo, então primeiro LED aceso e
também aqui o segundo. Portanto, não iniciamos
nenhum objeto novo. O nome da classe é tampas. Então, por exemplo,
acendeu, amarelo, um está
aceso e está no pino 55. Temos cinco LEDs. Deixe o LED vermelho ler, e temos um azul. Temos dois pinos. Estou tendo o segundo
amarelo unpin 18, o primeiro vermelho no 17, no 16, no 19. E agora podemos ativá-lo. Então, dizemos tarde, amarelo, um turno. Se tivermos a pontuação do jogo 12, então eu gostaria de ter aqui
o amarelo para ligar. Jogos apanhados. Eu gostaria de ter o LED
vermelho ligado o LED 12. Se a
pontuação do jogo para marcar for igual a uma, então a grande, LED azul ou ligue. Quando quisermos. De novo não, por favor. Oh wow, devemos redefinir todos os
LEDs para LED estão desligados. Este é simples. Estamos ligando para cada um
dos LEDs e os desligamos. E como poderíamos fazer
isso com o desligamento? E SEM talvez se lembre, temos aqui um analógico. Verificamos se
ativamos os LEDs, qual analogWrite
sempre digital, o que ligamos
com o digital, certo? Essa é a razão pela qual
passamos aqui e falsos. Depois,
vou para o jogo Reset e chamo que todos os LED estão desligados. Isso deve ser
tudo o que
precisávamos para
exibir o LED. Então, vamos ver o que
o compilador diz. Então, no ESP é piscado, ligando a câmera
para que possamos ver aqui todo o nosso Bahrein. E apenas os relatos de que meu roteador permitiu que meu ESP se conecte à
equipe da esposa. Agora estamos prontos. Então agora eu posso escolher aqui,
por exemplo, pedra. E o LED vermelho acende
porque eu perdi. Então, mais uma vez,
perdi duas vezes n, ele desaparecerá imediatamente. Esta é a razão pela qual, porque não temos nível
sob seu CPP principal. Quando estamos redefinindo
aqui tudo
no loop, poderíamos definir
aqui e um curto atraso. Por exemplo, atrase
três segundos. Tudo bem que estamos usando
aqui e atrasamos porque o jogo quando terminar não
deve fazer nada. Então, por exemplo, você pode atualizar aqui o esboço mais uma vez. Mas estou mantendo aqui, apenas testando aqui os LEDs. Agora temos apertado, então o LED azul também funciona. Então, no segundo, perdi mais uma vez. Eu tenho 111, perdi muito apertado,
e acabamos. John, também, nossos LEDs funcionam
muito bem de forma rápida. Implementamos aqui
essas classes e você poderia acessar aqui
diferentes tipos de funções quando
quiser. E isso nos dá agora
uma boa visão geral
do potencial da maneira orientada a
objetos.
61. Crie e publique sua própria biblioteca: Então, quando criamos
nossas próprias aulas, talvez você também
queira compartilhar e fornecer aulas com outras pessoas. Isso pode ser feito com
alguma Biblioteca concluída. Neste vídeo,
gostaria de mostrar como
poderíamos configurar a partir de uma aula na biblioteca e como
você poderia compartilhá-la e implementou o arduino, EDA. E Stefan. Estou aqui na minha máquina Windows. Estou na pasta documentos,
Arduino e bibliotecas. Esta é a pasta padrão, e também é para
o Arduino IDE para 0 e também para as
versões posteriores adequadas. Nessa estrutura de
pastas, estou criando uma nova
pasta e estou chamando LEDs de pixel, por exemplo. E nesta pasta agora, estou copiando e colando. Aqui. Deixe-me ver onde estou. Forme nosso
esboço acabado a partir dos LEDs. Deixe-me ver a fonte de LEDs. Estou lidando aqui. Tudo desafia insights. Esta pasta principal
e o cpp principal, estou adicionando, o nome
ou, por exemplo, perseguindo LEDs não são cpp. Estou mudando para ignorar
porque queremos adicionar
a biblioteca
ao Arduino EDM. Em seguida, estamos criando uma pasta para os exemplos que
precisam ser chamados de exemplos. E então arrastaremos
e soltamos esse arquivo dentro desta pasta que
fizemos na subpasta. Ele deve ser o mesmo
nome do arquivo. Por exemplo. Neste arquivo, nesta pasta, estou abrindo os dados do inode e temos que nos adaptar,
ouvir alguma coisa. Primeiro de tudo, temos que adicionar aqui alguns nós
que licenciam, etc. Para
que serve essa biblioteca? que serve esse exemplo? A primeira coisa que
estamos fazendo é aqui, estamos mudando as citações
para essa ciência porque agora não
terminamos a biblioteca
nas bibliotecas tem que
ser incluída nisso. O sinal maior e menor que. Isso é tudo o que temos que fazer. Então vamos arrumar um
pouco nosso código. Talvez nós adicionemos aqui
alguns, alguns comentários. Apenas se livre de todos
esses exemplos. Deixe perseguir. E poderíamos dizer aqui, por exemplo, os exemplos. Salve isso. E isso é bom para nós até agora. Vamos voltar para a pasta. Aqui estão meu CPP e LEDs ponto h. É o que eu quero ter aqui. Nada mais o que eu quero adicionar. Mas uma única coisa
deve ser feita. E isso está sob as propriedades do ponto da
biblioteca. Vamos abri-lo. Aqui. Você pode definir seu
nome, por exemplo, ou o nome da classe
deve ser o mesmo nome que
o desvio de fótons ou
a manutenção externa. Algumas postagens são
coisas que categoria e também quais dependências
estão em sua classe. Isso lhe dá uma boa visão geral. Há muito
mais coisas para fazer. Por exemplo, palavras-chave
que serão encontradas com o gerenciador de
bibliotecas, etc. Mas eu gostaria de mantê-lo
aqui muito simples para que você possa ver o que queremos fazer aqui. A EDA externa leva minha
máquina sempre um pouco de tempo. Então, agora vamos esboçar, incluir biblioteca, ir
até Bibliotecas contribuídas. E deveria haver
aqui retrata as tampas da senhora. Perfeito. Então eu estou dizendo, sim, porque agora depois de um
acesso completo após a aula, vamos meu LED é tampas. Por exemplo, estou usando
aqui a cópia da barra cinco. Este pode
vazar é, por exemplo, 18. Então estou ligando
minhas pistas para ligar. E no loop eu digo
minhas cruzadas de LED, 20th. Meu LED para. Então, há uma
sugestão completa? Deixe-me ver. Se funcionar também em
Yeah, lá vamos nós. Gostaria de ter
desligado após o atraso. Temos dois milissegundos. Gostaria de desligar o
segundo LED e cinco segundos. E está em falso porque
não temos um analógico, certo? Muito bom. Agora eu quero fazer o upload deste. Eu usei seus nós 23 e vamos fazer
o upload da coisa toda. Lá vamos nós, ligando
a câmera, reiniciamos novamente. Então, temos aqui
o LED pulsando. Este deve sair depois de
cinco segundos. Muito bom. E
implementamos com sucesso nossa própria biblioteca
no Arduino IDE. Agora podemos acessá-lo uma
maneira muito conveniente e você pode compartilhar sua biblioteca com outras pessoas. Mas ainda não terminamos. Também temos aqui
alguns exemplos de arquivo. Então descemos. E também deve haver o
exemplo entre incluído. Lá vamos nós, porque
Lydia perseguindo LEDs. Vamos abrir esse. Aqui. Devemos ter o
exemplo de antes com todos os nossos arquivos e com
o exemplo, perfeito. E esses presentes também outros desenvolvedores e
boa visão interna, o que eles podem fazer
com sua biblioteca. Então, vamos ver onde estamos, onde estamos aqui
sob bibliotecas. Assim, você também pode ir nessa pasta
sagrada e sorvá-la, para um arquivo SIP. E então você pode compartilhá-lo, por exemplo, no GitHub em, ou você pode enviá-los para desenvolver neste desenvolvedor
pode ir para Sketch, Incluir biblioteca
em uma biblioteca SIP
e, em seguida, o todo será instalada na mídia. Essa também é uma
maneira conveniente para outras pessoas
implementarem toda a sua configuração, por exemplo, para biblioteca. E é isso até agora. É assim que você pode criar uma maneira simples de sua própria biblioteca e pode fornecê-la a outras pessoas.
62. Resumo do aprendizado: Estamos agora no final
deste curso on-line e gostaria de
tirar alguns minutos para resumir todos os aprendizados que somos feitos
neste curso online. Então, antes de tudo,
somos discutidos um pouco sobre o básico. O que é um enum,
o que é instruir? Quais são os diferentes
tipos de IDEs? O que temos o Arduino IDE, Visual Studio Code,
esse íon de plataforma. Como podemos usar o
código do Arduino para o código visual
e visto versa. Em seguida, fizemos uma
breve introdução ao básico orientado a objetos. Somos discutidos
sobre como podemos configurar um projeto vazio. Qual é a classe principal? O que é o construto? O que é um construtor
e o início de um objeto que também podemos
sobrecarregar construtores, construtores as principais funções, a primeira função quando
iniciamos um objeto de projeto. E podemos ter fornecido vários
tipos diferentes de construtores. Em seguida, também discutimos sobre funções
básicas como
getter e setter. Então, com a função pública, podemos acessar membros privados. Esse é o encapsulamento de dados. E também falamos sobre
herança para que seja fácil para nós editar
e biblioteca pública. Em seguida, começamos com a
primeira classe LED individual. Significa que tínhamos muitos LEDs
e, no mesmo tempo de execução ou no mesmo ciclo de vida,
poderíamos controlar aqui em diferentes tipos de LEDs ao
mesmo tempo. Isso só é possível
da maneira orientada a objetos. Se você fizer isso em uma
função orientada onde você precisava de muito mais barreiras,
isso é possível. Somos alternados para LEDs que fizemos e atrasamos
após oito segundos. Nós nos desvanecemos em pulsar. E também o
acessamos com um array. Portanto, são quatro quanto possível
para controlar e chamar
muitos LEDs ao mesmo tempo. Um fora do próximo projeto
estamos com o tabuleiro Galton. Tínhamos muitos tipos diferentes de sensores também incluídos
neste projeto. E foi fácil para nós
criar um array e iniciar, controlá-lo, inicializar
os sensores ER. E isso nos dá também a
oportunidade de trabalhar de forma rápida e flexível com diferentes
tipos de entradas de sensores. Um projeto principal
também foi o farol. Devido à redução de nossos controles de entradas
com apenas um botão. Foi o desafio
ter implementado três
tipos diferentes de modelos leves. Então dissemos uma respiração curta, implementamos, basta
ligá-lo e desligar. O primeiro LED. Quando apertamos um botão
por rotunda 1 segundo. Em seguida, o segundo LET
entra ou desliga. E quando estamos mantendo pressionado o botão
para acender a tecnologia, estamos nos alimentando dos primeiros modelos LET all sweet Lite, onde acessíveis através de um
botão ao mesmo tempo. Isso não é realmente prático. Exemplo porque
muitas vezes só temos uma entrada, mas precisamos de
mais de um mody. E isso é o
exemplo da vida real. Último projeto implementamos o
jogo de tesoura de papel de rocha, recriado e novamente, Modi na
maneira orientada a objetos que estamos chamando aqui e servidor web fez
comunicação
do servidor web para o servidor
web com o ESP. E também você pode ver
neste exemplo como
é fácil controlar várias
células com uma matriz. E isso lhe dá uma oportunidade mais uma
vez interagir com os componentes
elétricos deste Smith, componentes
mecânicos de uma maneira fácil. Por isso, nos concentramos no
lado do hardware, no lado do software. E espero poder mostrar todo
o potencial
do objeto orientado para ele.