// scrivi un numero da 0 a 255 nella barra di input seriale e premi invio.
// Il numero inserito verrà mostrato in formato binario, se il led
// è acceso quel bit sarà 1.
const byte PIN_DATA = 2;
const byte PIN_LATCH = 4;
const byte PIN_CLOCK = 3;
const byte PIN_START = 7;
char dataBuffer[4];
byte lenDataBuffer;
bool cmdComplete;
void setup() {
Serial.begin(115200);
pinMode(PIN_START, INPUT_PULLUP);
pinMode(PIN_LATCH, OUTPUT);
pinMode(PIN_DATA, OUTPUT);
pinMode(PIN_CLOCK, OUTPUT);
}
// la chiamata writeShiftReg(byte data) consuma 148us
void writeShiftReg(byte data) {
digitalWrite(PIN_LATCH, LOW);
shiftOut(PIN_DATA, PIN_CLOCK, MSBFIRST, data);
digitalWrite(PIN_LATCH, HIGH);
}
void recvData(byte data) {
if (lenDataBuffer < sizeof(dataBuffer) - 1) {
dataBuffer[lenDataBuffer++] = data;
}
}
void loop() {
if (Serial.available()) {
char data = Serial.read();
if (!cmdComplete) {
if ((data != '\r') & (data != '\n')) {
//Serial.println(data, HEX);
//Serial.println(data);
recvData(data);
} else {
if (lenDataBuffer > 0)
cmdComplete = true;
}
}
}
if (cmdComplete && Serial.available() == 0) {
// Serial.println(strlen(dataBuffer));
Serial.println(dataBuffer);
writeShiftReg(atoi(dataBuffer));
memset(dataBuffer, 0, sizeof(dataBuffer));
lenDataBuffer = 0;
cmdComplete = false;
}
}