Contribuindo com o Arduino IDE – Notícias

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


A melhor coisa sobre o software de código aberto é que, quando você quiser um novo recurso, basta adicioná-lo!



Favorito



Favorito


Algo que adoro no meu trabalho é que nunca sei no que vou trabalhar a seguir. Qualquer coisa, desde o layout do hardware ao design mecânico, ao firmware e software, tudo é válido. Se não sei fazer alguma coisa, tentarei aprender. Isso me levou a aprender pedaços de um muitos de diferentes habilidades. Tudo isso quer dizer que, quando Nate me perguntou se eu poderia adicionar um novo recurso ao IDE do Arduino, meu primeiro pensamento foi: “Bem, foi uma boa execução, mas ninguém evita o Java para sempre.”

Muito Legado

Brincadeiras à parte, eu estava realmente um pouco apreensivo. Não tanto por causa do Java – embora nunca seja tão divertido instalar um novo conjunto de ferramentas – mas porque a ideia de contribuir para um projeto tão grande e em andamento pode ser intimidante. O Arduino GitHub Repository contém mais de 7.000 commits em 87 releases ao longo de 15 anos … isso é muito legado! De alguma forma, ele conseguiu não se transformar em uma enorme pilha de espaguete ao longo desse período, o que é uma prova da comunidade ao redor dele. Entrarei em contato com o processo de solicitações pull e revisão de código aqui em um minuto, mas primeiro vamos falar sobre o novo recurso: Placas usadas recentemente!

Um efeito colateral do tremendo sucesso do Arduino ao longo dos anos é que o ecossistema de placas de desenvolvimento compatíveis com o Arduino explodiu completamente. Combinado com a adição do Board Manager, é mais fácil do que nunca abarrotar seu menu “boards” com centenas de pacotes de board. Para o usuário médio, isso provavelmente nunca se torna chato, mas em nossa linha de trabalho na SparkFun – alternando constantemente entre placas de desenvolvimento – acabamos fazendo muita rolagem. A versão mais recente deu pequenos passos para corrigir esse problema, dividindo as placas em submenus. Isso definitivamente ajuda, mas dependendo da resolução do seu monitor, fator de escala, etc., muitas placas ainda não podem ser localizadas à primeira vista. A ideia de Nate para resolver isso? Faça a mesma coisa que nós ja fiz com os esboços e acompanhe os itens usados ​​mais recentemente em uma lista facilmente acessível.

Implementação

Não vou entrar muito no processo de instalação e configuração do conjunto de ferramentas Java. Não é mais nem menos doloroso do que qualquer outro pacote de desenvolvimento. Dito isso, uma coisa fez me atrapalhe por cerca de um dia, então me sinto obrigado a mencioná-lo aqui: você não pode construir o Arduino com o JDK de 64 bits, você tem que usar o JDK de 32 bits (a partir de 1.8.13 de qualquer maneira, imagino que isso mudará em o futuro).

Leia Também  Adicionando baterias ao worklamp | Tudo sobre circuitos

Então, de qualquer maneira, como faço para adicionar um novo recurso a uma base de código desconhecida em uma linguagem desconhecida? O primeiro passo para mim é basicamente simular tudo. Encontre a estrutura do menu no código-fonte – pesquisando em todo o repositório pela string “Ferramentas” e depois aprofundando até ver “placas” – e adicione alguns itens de menu que se parecem com o que eu quero, embora não sejam qualquer coisa quando você clica neles. Depois de saber como os itens de menu são representados no código, posso descobrir o que realmente acontece quando você clica neles e como inseri-los no menu programaticamente.

Então, como os menus da placa funcionam no IDE do Arduino?

Basicamente, todos os menus são reconstruídos periodicamente em diferentes pontos enquanto o programa está em execução – alguns na inicialização, alguns sempre que certos pop-ups são abertos, alguns após clicar em compilar, etc. Tudo isso acontece em app/src/processing/app/Base.java. O menu de tabuleiros é reconstruído por uma rotina chamada apropriadamente rebuildBoardsMenu() primeiro na inicialização e depois novamente sempre que o Board Manager ou Library Manager for aberto. Foi fácil adicionar alguns itens de menu aqui para a maquete e ficou muito bom! Então, agora eu só tinha que resolver dois problemas: 1) Eles eram estáticos e não refletiam nenhum tipo de histórico do tabuleiro e 2) eles não tinham nenhuma ação atribuída a eles, então clicar neles não adiantou.

Para acompanhar o histórico do quadro, eu precisaria de identificadores únicos para cada quadro e um local para armazenar a lista que persistiria entre as sessões. O ID exclusivo foi fácil, uma vez que já existem como parte do perfil do conselho e são usados ​​para se referir ao conselho durante a construção dos menus. Posso simplesmente consultar o ID de um painel sempre que ele estiver selecionado e salvá-lo na “lista de painéis recentes” para referência ao construir o menu posteriormente. Esta lista seria armazenada em um arquivo que contém todos os dados persistentes no IDE: preferências.txt

O arquivo de preferências é interessante; ele é carregado em um objeto no início de cada sessão, onde vários métodos permitem que ele seja lido e modificado e, em seguida, no final da sessão, é serializado de volta no arquivo de texto. Métodos são fornecidos para armazenar e recuperar strings e coleções por nomes de chave arbitrários. Tudo o que persiste entre as sessões ou entre as janelas é armazenado aqui, portanto, coisas como a porta COM selecionada, esboços recentes e, claro, preferências. Na verdade, se você estiver usando o Arduino por um tempo, talvez queira verificar seu arquivo preferências.txt porque, enquanto eu estava brincando com ele, descobri que o recent.sketches O campo não parece ser gerenciado de forma alguma e é simplesmente um registro de TODOS os esboços que foram abertos desde a instalação (e, portanto, crescerão indefinidamente).

Leia Também  Lâmpada de Humor LED - Open Electronics
cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

Para acompanhar as cinco placas usadas mais recentemente, encontrei uma função que é chamada sempre que uma placa é selecionada (onBoardOrPortChange()) e adicionou um pequeno pedaço de código para capturar o ID da placa selecionada. Então eu verifico se as preferências têm uma chave chamada boards.recent. Se isso acontecer, pego essa lista e verifico se a placa atual está nela. Se for, eu o coloco no topo da lista; se não, eu o anexo ao topo da lista. A lista é então limitada a cinco itens e armazenada de volta em boards.recent.

Sempre que o menu de placas é reconstruído, todas as ações são atribuídas a cada item de menu, bem como os menus personalizados atribuídos a cada placa (coisas como bootloader e submenus de seleção de processador), o que é um bom momento para pegar essas ações e copie-os em novos itens de menu. Infelizmente, este não é um bom momento para construir o menu “fóruns recentes” porque – novamente – isso só acontece quando o Gerenciador de Quadros ou o Gerenciador de Biblioteca é aberto e fechado. Precisamos armazenar essas ações e usá-las para construir o menu mais tarde. Originalmente, a lista que contém essas ações não tinha escopo fora de createBoardMenusAndCustomMenus() então, tive que ampliar o escopo desta e de algumas outras variáveis. Com essa lista na memória, no entanto, agora temos liberdade para construir nosso menu sempre que precisarmos.

De volta ao nosso amigo onBoardOrPortChange(), e escrevemos um pequeno pedaço de código para criar os novos itens de menu e inseri-los no menu … mas espere, onde no menu? Não podemos codificar o índice do menu, porque certos itens do menu vão e vêm dependendo das preferências, então nosso índice alvo pode mudar, mas só mudará sempre que o menu maior dos ‘tabuleiros’ for reconstruído, então em rebuildBoardsMenu() nós escolhemos um local para o nosso menu na linha com o resto do menu, reconstrua e anote o índice naquele momento.

TL; DR

  • Durante rebuildBoardsMenu(), verifique se as preferências recent.boards. Em caso afirmativo, insira separadores e um rótulo de menu para denotar a lista “Placas usadas recentemente” e armazene o índice desta seção para a inserção de itens de menu posteriormente.
  • Durante createBoardMenusAndCustomMenus(...) crie uma coleção de itens de menu ‘clone’ cuja ação é clicar nos itens de menu originais. Faça referência a eles por boardId.
  • Durante onBoardOrPortChange() atualize a lista de boardIds em recent.boards. Esta lista é tratada como uma pilha com novas placas destacando-se do membro mais antigo da lista. Então ligue rebuildRecentBoardsList() para remover itens de menu anteriores e inserir novos itens de menu usando a coleção gerada durante createBoardMenusAndCustomMenus(...).
captura de tela do IDE Arduino com o menu da placa aberto e uma nova lista de menus rotulada "Placas usadas recentemente"

Os frutos do nosso trabalho

Contribuindo com minhas mudanças

A política de desenvolvimento do Arduino está listada no wiki e é um ótimo lugar para começar se você estiver pensando em se juntar ao esforço de desenvolvimento ou propor mudanças. Depois de decidir que quer contribuir com seriedade, verifique o arquivo CONTRIBUTING.md para regras de contribuição e orientação sobre onde contribuir para diferentes esforços. Preste atenção especial à seção sobre solicitações pull, que descreve os requisitos para fazer um PR útil. A maioria deles são boas maneiras do git em geral e ajudam a evitar que o projeto se torne insustentável sob o peso de mil desenvolvedores. Coisas como escrever bons commits, remover código comentado e abordar uma correção de bug ou aprimoramento por vez ajudam os desenvolvedores a entender o que você está tentando alcançar e fazer a revisão do código sem problemas.

Leia Também  Crowdfunding um telefone baseado em ESP32 - Open Electronics

Uma etapa importante que negligenciei foi pesquisar os PRs existentes para ter certeza de que não estava reinventando a roda. Em algum momento, houve um PR que abordou essa ideia, mas faltou persistência entre as sessões, então tive sorte.

Depois de fazer um fork do repositório do Arduino, fazer minhas alterações em um novo branch e preencher minha solicitação de pull, vários testes automatizados foram iniciados para garantir que o código proposto ainda pudesse ser compilado e devidamente lintado. Então, esperei que alguém revisse meu código. Em pouco tempo, tive uma série de sugestões de ajustes nos comentários e é aí que está. Ainda estou fazendo as alterações propostas, mas parece haver interesse em puxar o código, então espero que você possa encontrar esse recurso no próximo lançamento oficial. Nesse ínterim, se quiser testá-lo, você pode baixar este arquivo para substituir o ‘pde.jar’ atual em seu diretório arduino / lib /.

captura de tela da janela Propriedades para pde.jar mostrando a localização de um arquivo de "C:  Arquivos de programas (x86)  Arduino  lib"

Minha instalação do Windows se parece com isto, se isso ajudar você a localizar o arquivo

Moral da história

Não tenha medo de contribuir para grandes projetos de código aberto! A única maneira de essas ferramentas melhorarem para todos é se todos contribuírem e ajudarem. Tem uma ótima ideia, mas não tem os recursos para implementar? Fale com o pessoal dos fóruns – alguém que tenha as habilidades pode gostar da sua ideia e ajudá-lo com a proposta! Com sorte, todos vocês acharão este pequeno aprimoramento útil e mal posso esperar para ver que ideia vocês temos para o IDE do Arduino.

Feliz hackeamento!

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br