Eccolo…
const int ShiftPWM_latchPin=8;
const bool ShiftPWM_invertOutputs = false;
const bool ShiftPWM_balanceLoad = false;
#define SHIFTPWM_USE_TIMER2 // for Arduino Uno and earlier (Atmega328)
#include <ShiftPWM.h> // include ShiftPWM.h after setting the pins!
unsigned char maxBrightness = 255;
unsigned char pwmFrequency = 75;
int numRegisters = 6;
int numRGBleds = numRegisters*8/3;
int x = 0;
boolean action = false;
boolean rotat = false;
int L = 0;
int REL1 = 3;
int REL2 = 5;
int latchPin = 2;
int dataPin = 6;
int clockPin = 4;
byte SW1 = 72;
byte prSW1 = 0;
byte SW2 = 159;
byte prSW2 = 0;
void setup(){
ShiftPWM.SetAmountOfRegisters(numRegisters);
ShiftPWM.Start(pwmFrequency,maxBrightness);
ShiftPWM.SetAllRGB(35,160,255);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, INPUT);
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
digitalWrite(REL1, LOW);
digitalWrite(REL2, LOW);
}
void loop()
{
digitalWrite(latchPin,1);
delayMicroseconds(20);
digitalWrite(latchPin,0);
SW1 = shiftIn(dataPin, clockPin);
SW2 = shiftIn(dataPin, clockPin);
delay(50);
if (SW1 != prSW1){
if (SW1 != 0){
action = !action;
if (action == true){
rotat = !rotat;
for (int n=0 ; n<=7; n++){
if (SW1 & (1 << n) ){
ShiftPWM.SetRGB(n,170,80,50);
int L = n;
for (int p = 0; p<=15; p++){
if (p != L){
ShiftPWM.SetRGB(p,20,220,10);
}
}
}
}
if (rotat == true){
digitalWrite(3, HIGH);
delay(500);
digitalWrite(3, LOW);
}
else{
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
}
}
else{
ShiftPWM.SetAllRGB(35,160,255);
digitalWrite(3, HIGH);
delay(500);
digitalWrite(3, LOW);
}
}
}
if (SW2 != prSW2){
if (SW2 != 0){
action = !action;
if (action == true){
rotat = !rotat;
for (int n=0 ; n<=7; n++){
if (SW2 & (1 << n) ){
ShiftPWM.SetRGB(n+8,170,80,50);
int L = n+8;
for (int p = 0; p<=15; p++){
if (p != L){
ShiftPWM.SetRGB(p,20,220,10);
}
}
}
}
if (rotat == true){
digitalWrite(3, HIGH);
delay(500);
digitalWrite(3, LOW);
}
else{
digitalWrite(5, HIGH);
delay(500);
digitalWrite(5, LOW);
}
}
else{
ShiftPWM.SetAllRGB(35,160,255);
digitalWrite(3, HIGH);
delay(500);
digitalWrite(3, LOW);
}
}
}
prSW1 = SW1;
prSW2 = SW2;
Serial.println(rotat);
}
//******************************//
// shift in Function //
//******************************//
byte shiftIn(int myDataPin, int myClockPin) {
int i;
int temp = 0;
int pinState;
byte myDataIn = 0;
pinMode(myClockPin, OUTPUT);
pinMode(myDataPin, INPUT);
for (i=7; i>=0; i--)
{
digitalWrite(myClockPin, 0);
delayMicroseconds(0.2);
temp = digitalRead(myDataPin);
if (temp) {
pinState = 1;
myDataIn = myDataIn | (1 << i);
}
else {
pinState = 0;
}
digitalWrite(myClockPin, 1);
}
return myDataIn;
}