quinta-feira, 5 de junho de 2014

Alterando pinos disponíveis do Arduino no S4A

O S4A (Scratch 4 Arduino) é uma ferramenta sensacional, mas é engessado em alguns aspectos. O principal dele é a disponibilidade de portas do Arduino. Normalmente é liberado apenas uma pequena seleção de portas.
Por padrão temos o seguinte disponível:
  • 6 entradas analógicas (A0, A1, A2, A3, A4 e A5)
  • 2 entradas digitais (2 e 3)
  • 3 saídas analógicas (5, 6 e 9)
  • 3 saídas digitais (10, 11 e 13)
  • 2 saídas para motores (4 e 7)
  • 2 saídas para servos (8 e 12)
Portanto para acender um display de 7 segmentos por exemplo, que é composto de 7 leds no dígito e mais um led no ponto decimal, precisamos de 8 saídas digitais.

Temos 3 saídas analógicas e 3 saídas digitais, o que ainda não é suficiente nem elegante (misturar digitais e analógicos), isso significa que não podemos utilizá-lo? Não necessariamente.

Os pinos no S4A são delegados diretamente no código fonte do software (que roda no computador) e do firmware (que é enviado ao Arduino), mas felizmente como o S4A e o próprio Scratch (Até o 1.4) foram desenvolvidos em Squeak SmallTalk é fácil modificarmos.

Ou seja, precisaremos modificar os pinos que desejarmos em dois lugares:
  1.  No código fonte do próprio S4A instalado no computador.
  2. No firmware do S4A que vai para o Arduino.
1) No S4A alterar o código fonte é tão simples quanto usar código de trapaça em um jogo de videogame:

Aparecerá então o seguinte menu:

Nota-se logo que apareceram mais opções no menu que estavam escondidas. A que queremos é "Exit User Mode" (Sair do Modo Usuário).

Esse recurso é herdado da própria origem do S4A/Scratch 1.4 de Squeak SmallTalk. Quando saímos do modo usuário (que utilizamos normalmente), temos acesso direto ao código fonte.

Nossa tela vai ficar estranha, com blocos na parte inferior e lateral direita:


É normal. Clique com o botão esquerdo nessa lateral em branco e irá aparecer o seguinte menu:

 

Escolha "open..." e em seguida "browser".

Teremos agora a seguinte janela, que pode assustar na primeira vista:


Nessa janela está o código fonte do S4A. Não se preocupe em entender o que é cada componente, tudo que precisaremos editar está em um mesmo local.

Atente na caixa selecionada na imagem acima, "instance". Iremos editar primeiramente em "instance" e em seguida em "class".

Primeiro, siga o caminho da imagem abaixo conforme as opções em vermelho:

Em "digitalPinNumbers" estão os números dos pinos digitais a serem utilizados. No caso do nosso exemplo com o display de 7 segmentos, faça como na imagem e preencha com os pinos 4 a 13.

Agora clique em "class" e siga o caminho em vermelho na imagem abaixo:

Remova o trecho de código destacado em verde, que diz respeito a usos dos pinos que iremos descartar para libera-los como pinos digitais de saída.

Agora para gravar nossas modificações precisamos fazer o seguinte:

Clicando com o botão esquerdo segurando ALT aparecerá o seguinte menu:


Clique em "accept" para verificar se há algum erro no código. Caso nenhuma mensagem apareça, está tudo de acordo.

Feche a janela verde do System Browser clicando no "X" no canto superior esquerdo e então clique no espaço em branco na lateral direita ou inferior e escolha "save".

Aparecerão duas mensagens indicando erro, porém não é necessário se preocupar. Clique em "Ok" para ambos.

Voltaremos agora ao Modo Usuário:

Clicando em seguida em "Enter User Mode":


Tudo deverá estar como estava antes de começarmos a modificação. Exceto que ao clicar nas opções de pinos digitais...


Agora temos pinos o suficiente!

2) Falta agora modificar o firmware que será enviado ao Arduino e então se comunicará com o S4A. Baixe o firmware e abra-o com a IDE do Arduino. Nele procure por "configurePins".

Aqui não há muito segredo, note que em cinza estão comentados quais são os pinos. Em azul, logo à esquerda há uma letra que determina qual tipo de pino é cada pino:
  • a - analógico
  • d - digital
  • c - motor
  • s - servo
 Vamos mudar todos pinos de 4 a 13 para digitais (d):

Neste exemplo não é necessário mais modificações, basta enviar o firmware modificado ao Arduino e já deverá ser possível utilizar até 10 pinos digitais.

Note que ainda assim não é possível modificar os pinos de qualquer maneira - há restrições quanto a pinos de entrada/saída e só é possível utilizar como pino analógico de saída aqueles com PWM (Pulse Width Modulation): 3, 5, 6, 9, 10 e 11.

Bons projetos!


8 comentários:

  1. Ótimo post! Sabe como eu crio um bloco no S4A? Já pesquisei mas não consigo achar anda.

    ResponderExcluir
    Respostas
    1. Olá Gustavo, obrigado! Quanto à sua dúvida, eu nunca tentei essa possibilidade mas até onde sei não seria nada simples. Algo mais adequado para sua necessidade seria BYOB/Snap: http://byob.berkeley.edu

      Excluir
  2. Muitoooooooooooo Bom!!! Otima contribuição! Parabéns!

    ResponderExcluir
    Respostas
    1. Muito obrigado pelo feedback positivo Marisa!

      Excluir
  3. Bom dia!
    Não tenho experiência no arduino, e gostaria de fazer uma pergunta: com o scratch eu posso montar a programação no pc e enviar para o arduíno e ele vai funcionar sem estar conectado ao pc? Ou para controlar um motor ou leds por exemplo, tenho que manter a conexão com o pc?

    ResponderExcluir
    Respostas
    1. Olá Claudio, com o Scratch é necessário ter o computador com o Scratch aberto e conectado com a placa para enviar os comandos, pois utiliza de protocolo Firmata para se comunicar.

      De forma independente só enviando o código através da própria IDE do Arduino.

      Uma outra opção de programação por blocos parecida com Scratch que permite utilizar sem PC é o Ardublock, porque ele automaticamente converte seu código de blocos no código em C do Arduino na IDE. Em breve postarei um tutorial de Ardublock aqui no Labduino.

      Excluir
    2. Eu estou a adorar o s4a mas não sei como se faz para gravar o projecto dentro da placa arduino uno .
      eu faço o projecto e ele funciona quando ligado ao pc.
      Se eu desligar a placa e voltar a ligar não funciona .
      O que quer dizer que não ficou gravado .
      Se me poderes responder para o meu e-mail ( luis.magessi@gmail-com ) para eu ter essa informação registada .
      obrigado

      Excluir
  4. como desfazer essa alteração? já tentei ate reinstalar o S4a sem sucesso, o que fazer?

    ResponderExcluir