- Material necessário:
- Diagrama de circuito:
- Explicação de programação:
- Configuração de hardware para sequência de LED piscando:
- Carregando e trabalhando:
Este é o segundo tutorial de uma sequência de tutoriais em que estamos aprendendo o MSP430G2 LaunchPad da Texas Instruments usando o IDE Energia. No último tutorial do LED Blinky nos apresentamos à placa de desenvolvimento do LaunchPad e ao IDE Energia, também carregamos nosso primeiro programa que é piscar o LED da placa em intervalos regulares.
Neste tutorial, aprenderemos como usar a opção Leitura digital e Gravação digital para ler o status de um dispositivo de entrada como uma chave e controlar várias saídas como LEDs. No final deste tutorial, você terá aprendido a trabalhar com entradas e saídas digitais, que podem ser usadas para fazer a interface de muitos sensores digitais como sensor IR, sensor PIR etc. e também para ligar ou desligar saídas como LED, Buzzer etc. Parece interessante direito!!? Vamos começar.
Material necessário:
- MSP430G2 LaunchPad
- LED de qualquer cor - 8
- Switch - 2
- Resistor 1k - 8
- Fios de conexão
Diagrama de circuito:
Em nosso tutorial anterior, notamos que a própria plataforma de lançamento vem com dois LEDs e um interruptor na placa. Mas neste tutorial vamos precisar de mais do que isso, já que planejamos acender oito luzes LED em sequência quando um botão for pressionado. Também mudaremos a sequência quando outro botão for pressionado, apenas para torná-lo interessante. Portanto, temos que construir um circuito com 8 luzes LED e dois interruptores, o diagrama completo do circuito pode ser encontrado abaixo.
Aqui, os 8 LEDs são as saídas e os dois interruptores são as entradas. Podemos conectá-los a qualquer pino de E / S na placa, mas conectei os LRDs do pino P1.0 ao P2.1 e do switch 1 e 2 ao pino P2.4 e P2.3 respectivamente, conforme mostrado acima.
Todos os pinos do cátodo do LED são ligados à terra e o pino do ânodo é conectado aos pinos de E / S através de um resistor. Este resistor é chamado de resistor limitador de corrente, este resistor não é obrigatório para um MSP430 porque a corrente máxima que seu pino de E / S pode fornecer é de apenas 6mA e a tensão no pino é de 3,6 V apenas. No entanto, é uma boa prática usá-los. Quando qualquer um desses pinos digitais ficar alto, o respectivo LED acenderá. Se você puder se lembrar do último programa de LED dos tutoriais, então você se lembrará que digitalWrite (LED_pin_name, HIGH) fará o LED brilhar e digitalWrite (LED_pin_name, LOW) desligará o LED.
As chaves são o dispositivo de entrada, uma extremidade da chave é conectada ao terminal de aterramento e a outra é conectada aos pinos digitais P2.3 e P2.4. Isso significa que sempre que pressionarmos a chave, o pino de E / S (2.3 ou 2.4) será aterrado e ficará livre se o botão não for pressionado. Vamos ver como podemos usar esse arranjo durante a programação.
Explicação de programação:
O programa deve ser escrito para controlar os 8 LEDs de maneira sequencial quando o interruptor 1 é pressionado e, em seguida, quando o interruptor 2 é pressionado, a sequência deve ser alterada. O programa completo e o vídeo de demonstração podem ser encontrados no final desta página. Mais abaixo irei explicar o programa linha por linha para que você possa entendê-lo facilmente.
Como sempre, devemos começar com a função void setup () dentro da qual declararíamos os pinos que estamos usando como pino de entrada ou saída. Em nosso programa, os 8 pinos do LED são emitidos e as 2 chaves são entradas. Esses 8 LEDs são conectados de P1.0 a P2.1, que é o pino número 2 a 9 na placa. Em seguida, os interruptores são conectados ao pino P2.3 e ao pino 2.4, que são os pinos 11 e 12, respectivamente. Portanto, declaramos o seguinte na configuração void ()
void setup () {for (int i = 2; i <= 9; i ++) {pinMode (i, OUTPUT); } para (int i = 2; i <= 9; i ++) {digitalWrite (i, LOW); } pinMode (11, INPUT_PULLUP); pinMode (12, INPUT_PULLUP); }
Como sabemos, a função pinMode () declara o pino como saída ou entrada e a função digitalWrite () torna-o alto (ON) ou baixo (OFF). Usamos um loop for para fazer essa declaração para reduzir o número de linhas. A variável “i” será incrementado de 2 a 9 no por loop e para cada incremento da função dentro será executada. Outra coisa que pode confundir você é o termo “ INPUT_PULLUP ”. Um pino pode ser declarado como entrada apenas chamando a função pinMode (Pin_name, INPUT), mas aqui usamos um INPUT_PULLUP em vez de um INPUT e ambos têm uma alteração perceptível.
Quando estamos usando qualquer pino do microcontrolador, o pino deve ser conectado em baixo ou em alto. Neste caso, os pinos 11 e 12 são conectados ao interruptor que será conectado ao terra quando pressionado. Mas quando a chave não é pressionada, o pino não está conectado a nada, essa condição é chamada de pino flutuante e é ruim para microcontroladores. Portanto, para evitar isso, usamos um resistor pull-up ou pull-down para manter o pino em um estado quando ele entrar em flutuação. No microcontrolador MSP430G2553, os pinos de E / S têm um resistor pull-up embutido. Para usar isso, tudo o que precisamos fazer é chamar INPUT_PULLUP em vez de INPUT durante a declaração, assim como fizemos acima.
Agora vamos entrar na função void loop () . O que quer que esteja escrito nesta função será executado para sempre. O primeiro passo em nosso programa é verificar se o interruptor está pressionado e, se pressionado, devemos começar a piscar os LEDs em sequência. Para verificar se o botão foi pressionado, a seguinte linha é usada
if (digitalRead (12) == LOW)
Aqui, a nova função é digitalRead () , esta função irá ler o status de um pino digital e retornará ALTO (1) quando o pino estiver recebendo alguma tensão e retornará BAIXO BAIXO (0) quando o pino estiver aterrado. Em nosso hardware, o pino será aterrado apenas quando pressionamos o botão, caso contrário, ele será alto, pois usamos um resistor pull-up. Portanto, usamos a instrução if para verificar se o botão foi pressionado.
Assim que o botão é pressionado, entramos no loop while (1) infinito. É aqui que começamos a piscar os LEDs em sequência. Um loop while infinito é mostrado abaixo e tudo o que está escrito dentro do loop será executado para sempre até uma pausa; declaração é usada.
whiel (1) {}
Dentro do infinito enquanto verificamos o status da segunda chave que está conectada ao pino 11.
Se esta chave for pressionada, piscaremos o LED em uma sequência particular, caso contrário, piscaremos em outra sequência.
if (digitalRead (11) == LOW) {for (int i = 2; i <= 9; i ++) {digitalWrite (i, HIGH); atraso (100); } para (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
Para piscar o LED em sequência, usamos novamente o loop for , mas desta vez usamos um pequeno atraso de 100 milissegundos usando a função delay (100) para que possamos notar o LED ficando alto. Para fazer apenas um LED brilhar por vez, também usamos outro loop for para desligar todos os LEDs. Então acendemos um led, esperamos um tempo e depois apagamos todos os LEDs e incrementamos a contagem, acendemos o LED, esperamos algum tempo e o ciclo continua. Mas tudo isso acontecerá enquanto o segundo botão não for pressionado.
Se a segunda chave for pressionada então mudamos a sequência, o programa será mais ou menos o mesmo esperado para a sequência em que o LED é ligado. As linhas são mostradas abaixo, tente dar uma olhada e descobrir o que foi alterado.
else {for (int i = 9; i> = 2; i--) {digitalWrite (i, HIGH); atraso (100); } para (int i = 2; i <= 9; i ++) digitalWrite (i, LOW); }
Sim, o de circuito foi alterado. Anteriormente, fazíamos o LED brilhar do número 2 e todo o caminho até o 9. Mas agora vamos começar do número 9 e diminuir até o 2. Desta forma, podemos notar se o botão está pressionado ou não.
Configuração de hardware para sequência de LED piscando:
Ok, chega de toda a teoria e parte do software. Vamos pegar alguns componentes e ver como esse programa funciona. O circuito é muito simples e, portanto, pode ser facilmente construído em uma placa de ensaio. Mas eu soldei o LED e os interruptores na placa de desempenho apenas para torná-la perfeita. A placa de desempenho que soldou é mostrada abaixo.
Como você pode ver, temos os pinos de saída do LED e o switch retirados como pinos do conector. Agora, usamos os fios conector fêmea para fêmea para conectar os LEDs e interruptores à placa MSP430 LaunchPad, conforme mostrado na imagem abaixo.
Carregando e trabalhando:
Assim que terminar o hardware, basta conectar a placa MSP430 ao seu computador e abrir o IDE Energia e usar o programa fornecido no final desta página. Certifique-se de que a placa e a porta COM corretas estejam selecionadas no Energia IDE e clique no botão Upload. O programa deve ser compilado com sucesso e, uma vez carregado, exibirá “Carregamento concluído”.
Agora pressione o botão 1 na placa e o LED deve acender na sequência conforme mostrado abaixo
Você também pode segurar o segundo botão para verificar se a sequência está sendo alterada. O funcionamento completo do projeto é mostrado no vídeo abaixo. Se estiver satisfeito com os resultados, você pode tentar fazer algumas alterações no código, como alterar o tempo de atraso, alterar a sequência, etc. Isso o ajudará a aprender e entender melhor.
Espero que você tenha entendido o tutorial e aprendido algo útil com ele. Se você enfrentou algum problema, sinta-se à vontade para postar a pergunta na seção de comentários ou usar os fóruns. Vamos nos encontrar em outro tutorial onde aprenderemos como ler tensões analógicas usando nossa plataforma de lançamento MSP30.