#define Enable_Pin 13
#define S0_Pin 12
#define S1_Pin 11
#define S2_Pin 10
#define S3_Pin 9
#define Segnala 8
#define COM 6
#define PStart_Pin 2
#define PStop_Pin 3
bool va = 1;
int Microsecondi_delay = 1000;
int i = 0, j = 0;
int ValMax = 13;
int ValLum = 0;
int Aspetta_Pov;
byte Cambio = 10;
byte ValMax_Lum = 255;
bool StatoPStart = 0;
bool StatoPStop = 0;
unsigned long Tempo_Attuale = millis();
unsigned long Tempo_Precedente = 0;
unsigned long Tempo_CambioLum = 1000;
void setup() {
pinMode( Enable_Pin , OUTPUT );
pinMode( S0_Pin , OUTPUT );
pinMode( S1_Pin , OUTPUT );
pinMode( S2_Pin , OUTPUT );
pinMode( S3_Pin , OUTPUT );
pinMode( COM , OUTPUT );
digitalWrite( Enable_Pin , LOW );
digitalWrite( COM , HIGH );
attachInterrupt( digitalPinToInterrupt( PStart_Pin ), AssegnaStart , RISING );
attachInterrupt( digitalPinToInterrupt( PStop_Pin ), AssegnaStop , RISING );
Serial.begin( 9600 );
/*for( j = 0; j < ValMax; j = j + 1 ){
while( Tempo_Attuale - Tempo_Precedente <= Ritardo ){
for( i = 0; i <= j; i = i + 1 ){
digitalWrite( S0_Pin , Y[i][3] );
digitalWrite( S1_Pin , Y[i][2] );
digitalWrite( S2_Pin , Y[i][1] );
digitalWrite( S3_Pin , Y[i][0] );
//delay( Tempo );
}
/*for( i = j; i > 0; i = i - 1 ){
digitalWrite( S0_Pin , Y[i][3] );
digitalWrite( S1_Pin , Y[i][2] );
digitalWrite( S2_Pin , Y[i][1] );
digitalWrite( S3_Pin , Y[i][0] );
delay( Tempo );
} */
/* Tempo_Attuale = millis();
}
Tempo_Precedente = Tempo_Attuale;
} */
}
void loop()
{
if( va == 1 ){
digitalWrite( Enable_Pin , LOW );
/*for( ValLum = 0; ValLum < 256 && va == 1; ValLum = ValLum + Cambio ){
analogWrite( COM , ValLum );
//Serial.print(" ValLum = \t");
//Serial.println( ValLum );
while( Tempo_Attuale - Tempo_Precedente < Tempo_CambioLum && va == 1 ){
for( i = 0; i < ValMax; i = i + 1 ){
Seleziona_Canale( i );
delay( 100 );
}
Tempo_Attuale = millis();
//Serial.println(" Uscito For ");
}
Tempo_Precedente = Tempo_Attuale;
//Serial.println(" Uscito Millis ");
}
*/
for( ValLum = 0; ValLum < 256 && va == 1; ValLum = ValLum + Cambio ){
digitalWrite( Enable_Pin , LOW );
for( i = 0; i < ValMax; i = i + 1 ){
Seleziona_Canale( i );
}
digitalWrite( Enable_Pin , HIGH );
Aspetta_Pov = Calcola_Tempo_Pov( ValLum );
delayMicroseconds( Aspetta_Pov );
}
}else{
digitalWrite( Enable_Pin , HIGH );
}
}
char Uscite[ 16 ] = {
0b0000 , // 0
0b0001 , // 1
0b0010 , // 2
0b0011 , // 3
0b0100 , // 4
0b0101 , // 5
0b0110 , // 6
0b0111 , // 7
0b1000 , // 8
0b1001 , // 9
0b1010 , // 10
0b1011 , // 11
0b1100 , // 12
0b1101 , // 13
0b1110 , // 14
0b1111 // 15
};
void Seleziona_Canale( int cnt )
{
digitalWrite( S0_Pin , Uscite[cnt] & 1 );
digitalWrite( S1_Pin , Uscite[cnt] >> 1 & 1 );
digitalWrite( S2_Pin , Uscite[cnt] >> 2 & 1 );
digitalWrite( S3_Pin , Uscite[cnt] >> 3 & 1);
}
void AssegnaStart()
{
va = 1;
digitalWrite( Segnala , HIGH );
}
void AssegnaStop()
{
va = 0;
digitalWrite( Segnala , LOW );
digitalWrite( Enable_Pin , HIGH );
}
void Aspetta()
{
while( Tempo_Attuale - Tempo_Precedente < Tempo_CambioLum && va == 1 ){
Tempo_Attuale = millis();
}
Tempo_Precedente = Tempo_Attuale;
}
float Calcola_Tempo_Pov( int Pwm )
{
float Tempo_delay;
Tempo_delay = 1020 * Pwm / 255.0;
Serial.print( " Tempo_delay = \t" );
Serial.println( Tempo_delay );
Serial.println();
return Tempo_delay;
}Loading
cd74hc4067
cd74hc4067