LED e Shift register 74HC595

Buongiorno a tutti, esiste un modo per far si che che i primi 2 led rimangono accesi dopo l'inizio del loop e lasciar dissolvere gli altri utilizzando il 74hc595?
Oppure un comando per escludere tali led da far altre operazioni?

const byte datapin = 2;                 // data pin 14 su arduino pin 2-----su attyni pin 3
 const byte clockpin = 3;                // clock pin 11 su arduino pin 3----su attyni pin 1
 const byte latchpin = 4;                // latch pin 12 su arduino pin 4----su attyni pin 2
 const byte oepin = 5;                   // oe pin 13 su arduino pin 5 ------su attiny pin 0
 byte dato = 0;

 void setup()
 {
  pinMode ( datapin, OUTPUT );          
  pinMode ( clockpin, OUTPUT );
  pinMode ( latchpin, OUTPUT );
  pinMode ( oepin, OUTPUT );
  pinMode (15, OUTPUT);                  //pin 15 su arduino-----------------su attyni pin 4
  digitalWrite(15, HIGH);                //pin 15 su arduino-----------------su attyni pin 4                        
 }
 
 void loop()
 {
 
  dato=0b11000000;
  analogWrite ( oepin, 255 );
  digitalWrite ( latchpin, LOW );
  shiftOut ( datapin, clockpin, LSBFIRST, dato );
  digitalWrite ( latchpin, HIGH );
  delay ( 10 );
  analogWrite ( oepin, 255 );
for  ( byte brightness = 255; brightness > 0; brightness -= 5 )
  {
    analogWrite ( oepin, brightness );
    delay ( 50 );
  }
  analogWrite ( oepin, 0 );
for  ( byte brightness = 0; brightness < 255; brightness += 5 )
  {
    analogWrite ( oepin, brightness );
    delay ( 50 );
  }                                    

dato=0b11110000;

  analogWrite ( oepin, 255 );
  digitalWrite ( latchpin, LOW );
  shiftOut ( datapin, clockpin, LSBFIRST, dato );
  digitalWrite ( latchpin, HIGH );
  delay ( 10 );
  analogWrite ( oepin, 255 );
for  ( byte brightness = 255; brightness > 0; brightness -= 5 )
  {
    analogWrite ( oepin, brightness );
    delay ( 50 );
  }
  analogWrite ( oepin, 0 );
for  ( byte brightness = 0; brightness < 255; brightness += 5 )
  {
    analogWrite ( oepin, brightness );
    delay ( 50 );
  }

dato=0b00001100;

  analogWrite ( oepin, 255 );
  digitalWrite ( latchpin, LOW );
  shiftOut ( datapin, clockpin, LSBFIRST, dato );
  digitalWrite ( latchpin, HIGH );
  delay ( 10 );
  analogWrite ( oepin, 255 );
for  ( byte brightness = 255; brightness > 0; brightness -= 5 )
  {
    analogWrite ( oepin, brightness );
    delay ( 50 );
  }
  analogWrite ( oepin, 0 );
for  ( byte brightness = 0; brightness < 255; brightness += 5 )
  {
    analogWrite ( oepin, brightness );
    delay ( 50 );
  }

dato=0b00000011;

  analogWrite ( oepin, 255 );
  digitalWrite ( latchpin, LOW );
  shiftOut ( datapin, clockpin, LSBFIRST, dato );
  digitalWrite ( latchpin, HIGH );
  delay ( 10 );
  analogWrite ( oepin, 255 );
for  ( byte brightness = 255; brightness > 0; brightness -= 5 )
  {
    analogWrite ( oepin, brightness );
    delay ( 50 );
  }
  analogWrite ( oepin, 0 );
for  ( byte brightness = 0; brightness < 255; brightness += 5 )
  {
    analogWrite ( oepin, brightness );
    delay ( 50 );
  }  
 }

Toc toc....is anybody there?

Ciao

Sicuramente la struttura del programma è da rivedere, perché i for bloccano lo scorrimento del programma, che invece deve andare alla massima velocità (salvo casi particolari in cui si sia perfettamente coscienti di ciò che si sta facendo...).
Devi scrivere una funzione che piloti ciascun LED ricevendo in ingresso il numero del LED e la luminosità desiderata, contenente più o meno questo blocco:

analogWrite (oepin, 255);
  digitalWrite (latchpin, LOW);
  shiftOut (datapin, clockpin, LSBFIRST, dato);
  digitalWrite (latchpin, HIGH);
  delay (10);
  analogWrite (oepin, 255);

A quel punto, devi solo inviare volta per volta le informazioni corrette.
In particolare, per quanto riguarda la dissolvenza, puoi inviare dei byte 0b11000000 | 0bxxxxxx, in modo da mantenere i 2 byte più a sinistra sempre a 1.

Grazie, ma non credo di essermi spiegato bene:
la mia intenzione è far iniziare il loop con la dissolvenza in luminosità dei led 0b10000001, poi questi devono rimanere accesi e in coda devono accendersi i rimanenti 0b11000011 e così via sempre però con i led appena accesi rimangano HIGH.
Il tutto con un attiny85 che comanda un 74hc595.
Appena riesco faccio un video d'esempio e mando il link.
So duro de comprendonio, portate pazienza.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.