Initial commit
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
#pragma once
|
||||
|
||||
#include <Arduino.h>
|
||||
|
||||
class ShiftRegister {
|
||||
public:
|
||||
ShiftRegister(uint8_t latch, uint8_t clock, uint8_t data, uint8_t numberOfRegister = 1);
|
||||
~ShiftRegister();
|
||||
|
||||
bool writePin(uint8_t pin, uint8_t state);
|
||||
bool writeByte(uint8_t registerNumber, byte data);
|
||||
|
||||
private:
|
||||
void write();
|
||||
|
||||
uint8_t latchPin;
|
||||
uint8_t clockPin;
|
||||
uint8_t dataPin;
|
||||
uint8_t numberOfRegister;
|
||||
uint8_t numberOfPins;
|
||||
|
||||
byte* data;
|
||||
|
||||
};
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"name": "Shiftregister",
|
||||
"version": "1.0.0",
|
||||
"description": "Control shift register with simple Class.",
|
||||
"keywords": "shift, register, multiple",
|
||||
"repository":
|
||||
{
|
||||
"type": "git",
|
||||
"url": "https://git.kleiax.de/PlatformIO-Libs/Shiftregister.git"
|
||||
},
|
||||
"authors":
|
||||
[
|
||||
{
|
||||
"name": "Alexander Klein",
|
||||
"email": "alex@kleiax.de",
|
||||
"url": "https://www.kleiax.de/contact"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"homepage": "https://www.kleiax.de/",
|
||||
"frameworks": "*",
|
||||
"platforms": "*"
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
#include "shiftregister.h"
|
||||
|
||||
ShiftRegister::ShiftRegister(uint8_t latch, uint8_t clock, uint8_t data, uint8_t numberOfRegister) {
|
||||
this->latchPin = latch;
|
||||
this->clockPin = clock;
|
||||
this->dataPin = data;
|
||||
this->numberOfPins = numberOfRegister * 8;
|
||||
|
||||
pinMode(this->latchPin, OUTPUT);
|
||||
pinMode(this->clockPin, OUTPUT);
|
||||
pinMode(this->dataPin, OUTPUT);
|
||||
|
||||
digitalWrite(this->latchPin, LOW);
|
||||
digitalWrite(this->clockPin, LOW);
|
||||
digitalWrite(this->dataPin, LOW);
|
||||
|
||||
this->data = new byte[numberOfRegister];
|
||||
|
||||
for (uint8_t i = 0; i < numberOfRegister; i++)
|
||||
this->data[i] = 0;
|
||||
|
||||
this->numberOfRegister = numberOfRegister;
|
||||
this->numberOfPins = this->numberOfRegister * 8;
|
||||
|
||||
this->write();
|
||||
}
|
||||
|
||||
ShiftRegister::~ShiftRegister() {
|
||||
delete[] data;
|
||||
}
|
||||
|
||||
bool ShiftRegister::writePin(uint8_t pin, uint8_t state) {
|
||||
if (!(pin < this->numberOfPins))
|
||||
return false;
|
||||
|
||||
uint8_t registerNumber = pin / 8;
|
||||
if (registerNumber)
|
||||
pin -= 8;
|
||||
|
||||
if (state)
|
||||
this->data[registerNumber] |= (1 << pin);
|
||||
else
|
||||
this->data[registerNumber] &= ~(1 << pin);
|
||||
|
||||
this->write();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ShiftRegister::writeByte(uint8_t registerNumber, byte data) {
|
||||
if (registerNumber < this->numberOfRegister) {
|
||||
this->data[registerNumber] = data;
|
||||
this->write();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void ShiftRegister::write() {
|
||||
for (int8_t i = this->numberOfRegister - 1; i >= 0; i--)
|
||||
shiftOut(this->dataPin, this->clockPin, MSBFIRST, this->data[i]);
|
||||
|
||||
digitalWrite(this->latchPin, HIGH);
|
||||
digitalWrite(this->latchPin, LOW);
|
||||
}
|
||||
Reference in New Issue
Block a user