Introdução à programação orientada a objetos com Arduino | Markus Edenhauser | Skillshare

Velocidade de reprodução


1.0x


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

Introdução à programação orientada a objetos com Arduino

teacher avatar Markus Edenhauser, Bringing IT and People togehter

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      Introdução a este curso

      2:29

    • 2.

      Experiência prática em teoria

      1:10

    • 3.

      Pré-requisitos para este curso

      2:46

    • 4.

      Aviso de responsabilidade

      1:45

    • 5.

      ESP32 Pinout

      2:25

    • 6.

      Código VS vs IDE Arduino

      6:17

    • 7.

      Código fonte do código VS no IDE Arduino

      4:58

    • 8.

      Simulador on-line

      2:07

    • 9.

      Enum

      6:38

    • 10.

      Struct

      2:40

    • 11.

      Definição básica de um projeto vazio

      4:39

    • 12.

      Estrutura de um curso e encapsulamento de dados

      5:11

    • 13.

      Instância e construtor

      5:05

    • 14.

      Construtor de sobrecarga

      3:29

    • 15.

      Exercite interação de cabeçalho e arquivos CPP

      6:29

    • 16.

      Getter

      10:21

    • 17.

      Setter

      4:46

    • 18.

      Herança

      7:21

    • 19.

      Função herdada

      5:47

    • 20.

      Introdução de retoque OOP

      1:48

    • 21.

      Cálculo de fiação e resistência em série

      4:52

    • 22.

      Controle o LED com um objeto

      10:23

    • 23.

      Arquivo de cabeçalho

      6:14

    • 24.

      LED de alternância

      7:12

    • 25.

      Desligue o LED após x segundos

      7:50

    • 26.

      Desbotar

      6:14

    • 27.

      Pulsate

      5:06

    • 28.

      Como criar objetos em array

      7:07

    • 29.

      Efeito de perseguição LED

      2:35

    • 30.

      Fiação

      2:22

    • 31.

      Como criar projeto e curso

      5:42

    • 32.

      Sensor de endereço IR individualmente

      8:03

    • 33.

      Objetos em matriz

      4:11

    • 34.

      Simule motor em desligado

      4:00

    • 35.

      Avaliação dos sensores IR

      6:48

    • 36.

      Visão geral do projeto

      1:06

    • 37.

      Recolher IRSensors OOP

      1:35

    • 38.

      Fiação

      2:01

    • 39.

      Adicionar botão de classe

      5:21

    • 40.

      Botão de Debounce com millis

      10:39

    • 41.

      Detecte duração dos cliques

      2:22

    • 42.

      Interface limpa

      3:49

    • 43.

      LEDs de controle

      3:29

    • 44.

      Botão Farol herda do botão

      5:27

    • 45.

      Função Manter botão pressionado

      3:01

    • 46.

      Adicionar função desvanecer

      9:52

    • 47.

      Tarefa adicional implementar classe LED

      1:17

    • 48.

      Solução possível

      8:19

    • 49.

      Fiação

      2:45

    • 50.

      Como criar arquivos de classe

      2:12

    • 51.

      Arquivo de cabeçalho

      6:48

    • 52.

      Modo de primeiro jogo

      6:08

    • 53.

      Modo de jogo

      6:12

    • 54.

      Criar um site

      5:58

    • 55.

      Acesse site via servidor ESP32

      11:13

    • 56.

      Transferir dados do site para ESP32

      9:38

    • 57.

      Modo de jogo em dois jogos ganhos

      13:49

    • 58.

      Como enviar eventos laterais

      6:31

    • 59.

      Prettify eventos

      7:46

    • 60.

      Implementar classe LED

      7:16

    • 61.

      Criar e publicar sua própria biblioteca

      7:01

    • 62.

      Resumo dos ensinamentos

      4:17

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

391

Estudantes

--

Projetos

Sobre este curso

Especialmente no desenvolvimento de microcontroladores muitas vezes trabalhamos com bibliotecas, por exemplo, para controlar componentes de hardware. As vantagens do design de código fonte flexível e eficiente serão apresentadas neste curso.

Um ESP32 é usado em todo o curso, mas todos os exemplos (exceto o último com o Site/servidor Web e WIFI), exercícios e explicações podem ser feitos com qualquer Arduino.

Depois de concluir este curso, você vai ser capaz de…

  • ...crie seus próprios programas e bibliotecas orientadas a objetos

  • Código fonte reutilizável

  • ... criar arquitetura de código fonte limpo para programação e adaptação flexíveis

  • ... classes generalizadas de código e fornecer as bibliotecas

  • ... implementar os conceitos básicos do OOP para seus próprios projetos e aplicá-los imediatamente.

  • ... economize tempo para programação complicada. Devido ao design conceitual fornecido, seu código self-written é mais fácil de adaptar.

  • ... mantenha seu próprio código melhor mesmo após um período mais longo.

O que passamos no curso:

  • Noções básicas de programação orientada a objetos no ambiente Arduino. Vamos passar pelos conteúdos essenciais do OOP passo a passo. Vamos começar em exemplos práticos.

  • Exemplo prático: curso próprio LED. Muitas funções e interfaces diferentes.

  • Exemplo prático 2: Placa de galton com elevador em mármore e avaliação de 12 sensores IR.

  • Exemplo prático 3: farol com apenas um (!) botão, dois LEDs e três modos de luz.

  • Exemplo prático: Rock, papel, jogo de tesoura. Desenvolvemos este pequeno jogo. Nós competimos contra o bot e jogamos para ganhar dois jogos. A lógica é acionada por um servidor web no ESP32 (com eventos laterais do servidor).

Minha abordagem no curso:

  • Nenhum (ok, apenas muito poucos) slides/Powerpoint. Começamos nos noções básicas imediatamente com um exemplo prático. Também a teoria pode ser testada imediatamente no Arduino com o Monitor Serial e, portanto, mais bem entendida.

  • Os projetos práticos são desenvolvidos em conjunto com instruções passo a passo.

  • Juntos significa neste contexto que demonstro o código, dependendo da tarefa e você pode me acompanhar com o código fonte.

  • Todos os códigos estão disponíveis para download na plataforma, para que você possa chegar ao resultado sem frustração.

  • Sem explicações erradas ou monólogos de teoria, temos direito a trabalhar no capítulo básico.

Todos os esboços/arquivos deste curso estão anexados na seção Projeto.

Beneficie-se dos meus anos de experiência e obtenha as principais habilidades no desenvolvimento de microcontroller

Estou ansioso para vê-lo no curso

Markus Edenhauser

Conheça seu professor

Teacher Profile Image

Markus Edenhauser

Bringing IT and People togehter

Professor

Hello!

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

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

I am looking forward to welcoming you in my courses.

pixelEDI

Visualizar o perfil completo

Level: Intermediate

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

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.