const byte ledPin0 = 6;
const byte ledPin1 = 7;
const byte ledPin2 = 8;
const byte ledPin3 = 9;
const byte ledPin4 = 10;
const byte ledPin5 = 11;
const byte ledPin6 = 12;
const byte ledPin7 = 13;
const byte mode0 = 3;
const byte mode1 = 4;
const byte InterruptPin = 2;
volatile byte UpDown = HIGH;
byte ledState = 0;
byte mode = 0;
byte inicio = 0;
byte direccion = true;
byte izquierda = 0;
byte derecha = 0;
unsigned long previousMillis = 0;
const long interval = 1000;
void setup() {
// put your setup code here, to run once:
pinMode(ledPin0, OUTPUT);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
pinMode(ledPin5, OUTPUT);
pinMode(ledPin6, OUTPUT);
pinMode(ledPin7, OUTPUT);
pinMode(mode0, OUTPUT);
pinMode(mode1, OUTPUT);
pinMode(InterruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(InterruptPin), blink, FALLING);
}
void loop() {
// put your main code here, to run repeatedly:
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
///////////////////////////////////////////////////
//Secuencias
///////////////////////////////////////////////////
//*************************************************
//Secuencias 1
//*************************************************
if(mode==0){
if(direccion==true)
{
ledState<<=1;
if(ledState==0b10000000)
direccion=false;
}
else
{
ledState>>=1;
if(ledState==0b00000001)
direccion=true;
}
}
//*************************************************
//*************************************************
//Secuencias 2
//*************************************************
else if(mode==1){
if(direccion==true)
{
derecha<<=1;
izquierda>>=1;
ledState=ledState|derecha;
ledState=ledState|izquierda;
if(ledState==0b11111111){
direccion=false;
derecha=0b11111111;
izquierda=0b11111111;
}
}
else
{
derecha<<=1;
izquierda>>=1;
ledState=ledState&derecha;
ledState=ledState&izquierda;
if(ledState==0b00000000){
direccion=true;
ledState=0b10000001;
derecha=0b00000001;
izquierda=0b10000000;
}
}
}
//*************************************************
//*************************************************
//Secuencias 3
//*************************************************
else if(mode==2){
if(direccion==true)
{
derecha<<=1;
izquierda>>=1;
ledState=ledState|derecha;
ledState=ledState|izquierda;
if(ledState==0b11111111){
direccion=false;
derecha=0b11101111;
izquierda=0b11110111;
}
}
else
{
ledState=ledState&derecha;
ledState=ledState&izquierda;
derecha<<=1;
derecha++;
izquierda>>=1;
izquierda|=0b10000000;
if(ledState==0b00000000){
direccion=true;
ledState=0b00011000;
derecha=0b00001000;
izquierda=0b00010000;
}
}
}
//*************************************************
//*************************************************
//Secuencias 4
//*************************************************
else if(mode==3){
if(direccion==true)
{
derecha<<=1;
izquierda>>=1;
ledState=derecha;
ledState=ledState|izquierda;
if(ledState==0b10000001){
direccion=false;
derecha=0b00000001;
izquierda=0b10000000;
}
}
else
{
derecha<<=1;
izquierda>>=1;
ledState=ledState&derecha;
ledState=ledState&izquierda;
if(ledState==0b00000000){
direccion=true;
ledState=0b10000001;
derecha=0b00000001;
izquierda=0b10000000;
}
}
}
//*************************************************
}
digitalWrite(ledPin0,bitRead(~ledState,0));
digitalWrite(ledPin1,bitRead(~ledState,1));
digitalWrite(ledPin2,bitRead(~ledState,2));
digitalWrite(ledPin3,bitRead(~ledState,3));
digitalWrite(ledPin4,bitRead(~ledState,4));
digitalWrite(ledPin5,bitRead(~ledState,5));
digitalWrite(ledPin6,bitRead(~ledState,6));
digitalWrite(ledPin7,bitRead(~ledState,7));
digitalWrite(mode0, bitRead(~mode,0));
digitalWrite(mode1, bitRead(~mode,1));
}
void blink(){
if(mode<3){
mode++;
}
else {
mode=0;
}
inicio = 0;
if(mode==0){
ledState=0b00000001;
}
if(mode==1){
ledState=0b10000001;
derecha=0b00000001;
izquierda=0b10000000;
}
if(mode==2){
ledState=0b00011000;
derecha=0b00001000;
izquierda=0b00010000;
}
if(mode==3){
ledState=0b00011000;
}
}