martes, 11 de diciembre de 2012

LABORATORIO # 5

en este laboratorio se va  hacer Igual al Lab2, pero usando un IC 74HC595 (Shift Register).


MATERIALES QUE SE USARON






1 arduino


8 leds 

1 cable usb

1 protoboard

12 cables utp

8 resistencias

1 Potenciometro 10K

Shift Register

IMAGENES EN TIEMPO REAL DEL ENSAMBLAJE







VIDEOS EN TIEMPO REAL DEL FUNCIONAMIENTO




CODIGO QUE SE USO


const int MAXLED = 8;
//Pin connected to ST_CP of 74HC595 --- pin 12
int latchPin = 8;
//Pin connected to SH_CP of 74HC595 -- pin 11
int clockPin = 12;
////Pin connected to DS of 74HC595  --pin 14
int dataPin = 11;
//se asigna a una variable el puerto análogo del arduino 
int pot = A4;
// se guarda la lectura del potenciometro
int valpot =0;

// arreglo de 8 LEDs
int led[MAXLED] = {1,2,4,8,16,32,64,128};

//primera secuencia : arreglo de un led de por medio
int ledS1[14] = {1,2,4,8,4,2,1,16,32,64,128,64,32,16};


//segunda secuencia : arreglo de un leds de los extremos al medio
int ledS2[MAXLED] = {2,4,8,16,128,64,32,16};


//tercera secuencia
int ledS3[MAXLED] = {1,4,16,64,2,8,32,128};

//cuarta secuencia
int ledS4[MAXLED] = {2,4,128,64,8,16,32,1};




// se ejecuta 1 sola vez, al iniciar el programa
void setup() {
  //set pins to output so you can control the shift register
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  pinMode(pot, INPUT);
}




// se repite infinitamente mientras el arduino tenga corriente
void loop() { 
// recorre desde el indice 0 hasta el 7   
for (int i=0; i
  
     digitalWrite(latchPin, LOW);
    delay(100);
    // shift out the bits:
    shiftOut(dataPin, clockPin, MSBFIRST,led[i]); 
    //take the latch pin high so the LEDs will light up:
    digitalWrite(latchPin, HIGH);
    // pause before next value:
    delay(100);
  
         
       
        //se hace una lectura del potenciometro
          valpot = analogRead(pot);
        //se evalua,  dependiendo del valor del potenciometro
        // se le asigna una secuencia   
          if( valpot > 0  && valpot <256 span="span">
          { secuenciaUno(); }      
          else if(valpot > 256  && valpot < 512)
          {  secuenciaDos();}
          else if(valpot > 512  && valpot < 768)
          {  secuenciaTres();}
         else if(valpot > 768  && valpot < 1024)
         {  secuenciaCuatro();}
         
 }

 // recorre desde el indice 6 hasta el 1, para no repetir los extremos 
 for (int i=MAXLED-2; i>0; i--) {
    // take the latchPin low so 
    // the LEDs don't change while you're sending in bits:
    digitalWrite(latchPin, LOW);
    delay(100);
    // shift out the bits:
    shiftOut(dataPin, clockPin, MSBFIRST,led[i]); 

    //take the latch pin high so the LEDs will light up:
    digitalWrite(latchPin, HIGH);
    // pause before next value:
    delay(100);
  }



}



// métodos propios --------------------------------------------

//secuencia I
void secuenciaUno(){
   uno:
  //recorre el arreglo donde se difinio la secuencia 
   for (int i=0; i<14 i="i" span="span">
     
     // take the latchPin low so 
  // the LEDs don't change while you're sending in bits:
  digitalWrite(latchPin, LOW);
  delay(500);
  // shift out the bits:
  shiftOut(dataPin, clockPin, MSBFIRST, ledS1[i]);  
  //take the latch pin high so the LEDs will light up:
  digitalWrite(latchPin, HIGH);
  delay(700);   
  }  

     //se hace una lectura previa para saber 
     //si todavia se esta ejecutando la secuencia actual
     valpot = analogRead(pot); 
     if( valpot > 0  && valpot <256 nbsp="nbsp" span="span">
     goto uno; }         
}



//secuencia II
void secuenciaDos(){  
   
   
  
  dos:  
 //recorro ciclo de los leds
 for (int i=0; i
  
   
   // take the latchPin low so 
  // the LEDs don't change while you're sending in bits:
  digitalWrite(latchPin, LOW);
  delay(100); 
  // shift out the bits:
  shiftOut(dataPin, clockPin, MSBFIRST, ledS2[i]);  
  //take the latch pin high so the LEDs will light up:    
   digitalWrite(latchPin, HIGH);
   delay(250);      
}

    //se hace una lectura previa para saber 
     //si todavia se esta ejecutando la secuencia actual                        
    valpot = analogRead(pot); 
    if(valpot > 256   && valpot < 512){    
    goto dos; }

}




//secuencia III
void secuenciaTres(){
tres:
//recorre el arreglo donde se difinio la secuencia 
for (int i=0; i
  
  
   // take the latchPin low so 
  // the LEDs don't change while you're sending in bits:
  digitalWrite(latchPin, LOW);
  delay(100);
  // shift out the bits:
  shiftOut(dataPin, clockPin, MSBFIRST, ledS3[i]);  
  //take the latch pin high so the LEDs will light up:
  digitalWrite(latchPin, HIGH);
  delay(700);  
          
}
    //se hace una lectura previa para saber 
     //si todavia se esta ejecutando la secuencia actual
    valpot = analogRead(pot); 
    if(valpot > 512  && valpot < 768){    
    goto tres; }
}




//secuencia IV
void secuenciaCuatro(){
 //var definir la posicion de los ultimos 4 leds
   int num = 0;

 cuatro:
//recorre el arreglo donde se difinio la secuencia 
for (int i=0; i
           
           
           
             // take the latchPin low so 
  // the LEDs don't change while you're sending in bits:
  digitalWrite(latchPin, LOW);
  delay(100);
  // shift out the bits:
  shiftOut(dataPin, clockPin, MSBFIRST, ledS4[i]);  
  //take the latch pin high so the LEDs will light up:
  digitalWrite(latchPin, HIGH);
  delay(250);  
}
    //se hace una lectura previa para saber 
     //si todavia se esta ejecutando la secuencia actual
    valpot = analogRead(pot); 
    if(valpot > 768  && valpot < 1024){    
    goto cuatro; }
}



DIAGRAMA DEL LABORATORIO



ESQUEMA DEL LABORATORIO






No hay comentarios:

Publicar un comentario