Instantly share code, notes, and snippets.

Embed
What would you like to do?
Manipule os oito LEDs de forma independente utilizando uma comunicação serial.
/**
* Easy Shift Register Serial
* https://www.tecdicas.com/58/manipulando-dados-no-shift-register
*
* EXEMPLO2: CONTROLE DE LEDS VIA SOFTWARE - V2.0
*
* Autora: Ana Paula Messina - anapaula@tecdicas.com
*
* https://www.tecdicas.com/
*
* 22/01/2019
*
* MIT
*/
/**
* Constantes para GPIOs do NodeMCU ESP-12E
*/
#define DATA 12 // D6
#define LATCH 13 // D7
#define CLK 15 // D8
/**
* Constantes para GPIOs do Arduino Atmega328p
*/
//#define DATA 8
//#define LATCH 9
//#define CLK 10
byte valorByte = 0x00;
/**
* Monta e limpa um byte para ser manipulado no Shift Register.
*
* @param byte &valor - Valor do byte de até 0xFF/255/8 bits.
* @param int posicao - Posição do bit de 0 a 7.
* @param int estado - Estado de HIGH/1 ou LOW/0 para o bit.
*/
void montarByte(byte &valor, int posicao, int estado)
{
if(estado == HIGH)
{
bitSet(valor, posicao);
}
else if(estado == LOW)
{
bitClear(valor, posicao);
}
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLK, LSBFIRST, valor);
digitalWrite(LATCH, HIGH);
//Serial.println(valorByte, BIN);
}
/**
* Manipula a posição e estado de cada led.
*
* @param int posicao - Posição do bit de 0 a 7.
*/
void manipulaLed(int posicao)
{
int bRead = bitRead(valorByte, posicao);
montarByte(valorByte, posicao, !bRead);
Serial.println(bitRead(valorByte, posicao));
}
/**
* Realiza a comunicação serial enviando os dados requeridos.
* Utilizar Monitor Serial, Putty, terminal Linux ou software que realize comunicação serial.
*/
void comSerial()
{
if(Serial.available())
{
//int op = (int) Serial.read() - 48;
int op = Serial.parseInt();
if (op >=0 && op <= 7)
{
manipulaLed(op);
}
else if(op == 8)
{
apagaByte();
}
}
}
/**
* Seta todas posições dos bits em zero.
*/
void apagaByte()
{
for (int i=0;i<=7;i++)
{
montarByte(valorByte, i, LOW);
}
}
void setup()
{
Serial.begin(9600);
pinMode(DATA, OUTPUT);
pinMode(LATCH, OUTPUT);
pinMode(CLK, OUTPUT);
apagaByte();
}
void loop()
{
comSerial();
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment