miércoles, 25 de marzo de 2015

laboratorio 6

laboratorio 6
en este laboratorio se controlan 8 LEDs desde arduino atraves de un IC 74Hc595 definiendo mínimo 8 patrones de movimiento que son controlados desde una interfaz gráfica en processing/controlIp5.

materiales
  1. placa arduino +cable de comunicacion +pc con ide arduino y processing
  2. 8 LEDs + 8 resistencias 1kohm + protoboard
  3. jumper varios
  4. 1 Ic 74HC595
diagrama en protoboard











diagrama en fritzing
























montaje de componentes















codigo arduino

// pin que envia los datos al 74HC595
int data_pin = 9;
// pin que conecta el latch
int latch_pin = 10;
// pin que conecta el reloj
int clock_pin = 11;

// Guardamos el valor lo que recibimos via serial
int valor, val;
char letr;

//primera secuencia : arreglo de dos en dos.
int ledS1[4] = {3, 12, 48, 192};

//segunda secuencia : arreglo de uno en uno
int ledS2[8] = {1, 2, 4, 8, 16, 32, 64, 128};

//segunda secuencia : arreglo de uno en uno
int ledS3[8] = {1, 4, 2, 8, 16, 64, 32, 128};

//segunda secuencia : arreglo de uno en uno
int ledS4[2] = {255, 0};

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

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

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

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


void setup() {

  // La comunicacion serial sera a 9600 baudios
  Serial.begin(9600);

  // establecer pines a la salida para que pueda controlar el 74HC595
  pinMode(data_pin, OUTPUT);
  pinMode(latch_pin, OUTPUT);
  pinMode(clock_pin, OUTPUT);

}

void loop() {

  // send data only when you receive data:
  if (Serial.available() > 0) {

    letr = Serial.read();
    val = Serial.parseInt();
    Serial.print(letr);
    Serial.println(val);


  }


  // toma el latch_pin en bajo (LOW), para que los LEDs no cambien, mientras
  // se envian los datos (en bits).
  digitalWrite(latch_pin, LOW);
  // cambiar los bits ej. 0000 0001 0002 0003...
  shiftOut(data_pin, clock_pin, MSBFIRST, val);
  //toma el latch_pin en alto (HIGH), para que los LEDs se iliminen
  digitalWrite(latch_pin, HIGH);
  // se hace una pausa antes del siguiente valor
  //delay(500);

  if (val == 1) { //Si es 1 inicie funcion de secuencia1
    secuencia1();
  }
  if (val == 2) { //Si es 2 inicie funcion de secuencia2
    secuencia2();
  }
  if (val == 3) { //Si es 3 inicie funcion de secuencia3
    secuencia3();
  }
  if (val == 4) { //Si es 4 inicie funcion de secuencia4
    secuencia4();
  }
  if (val == 5) { //Si es 5 inicie funcion de secuencia5
    secuencia5();
  }
  if (val == 6) { //Si es 6 inicie funcion de secuencia7
    secuencia6();
  }
  if (val == 7) { //Si es 7 inicie funcion de secuencia7
    secuencia7();
  }
  if (val == 8) { //Si es 4 inicie funcion de secuencia8
    secuencia8();
  }

}

void secuencia1() {

  //recorre el arreglo donde se difinio la secuencia
  for (int i = 0; i < 4; i++) {
    // toma el latch_pin en bajo (LOW), para que los LEDs no cambien, mientras
    // se envian los datos (en bits).
    digitalWrite(latch_pin, LOW);
    // cambiar los bits ej. 0000 0001 0002 0003...
    shiftOut(data_pin, clock_pin, MSBFIRST, ledS1[i]);
    //toma el latch_pin en alto (HIGH), para que los LEDs se iliminen
    digitalWrite(latch_pin, HIGH);
    // se hace una pausa antes del siguiente valor
    delay(200);
  }


}

void secuencia2() {
  //recorre el arreglo donde se difinio la secuencia
  for (int i = 0; i < 8; i++) {
    // toma el latch_pin en bajo (LOW), para que los LEDs no cambien, mientras
    // se envian los datos (en bits).
    digitalWrite(latch_pin, LOW);
    // cambiar los bits ej. 0000 0001 0002 0003...
    shiftOut(data_pin, clock_pin, MSBFIRST, ledS2[i]);
    //toma el latch_pin en alto (HIGH), para que los LEDs se iliminen
    digitalWrite(latch_pin, HIGH);
    // se hace una pausa antes del siguiente valor
    delay(200);
  }
}

void secuencia3() {
  //recorre el arreglo donde se difinio la secuencia
  for (int i = 0; i < 8; i++) {
    // toma el latch_pin en bajo (LOW), para que los LEDs no cambien, mientras
    // se envian los datos (en bits).
    digitalWrite(latch_pin, LOW);
    // cambiar los bits ej. 0000 0001 0002 0003...
    shiftOut(data_pin, clock_pin, MSBFIRST, ledS3[i]);
    //toma el latch_pin en alto (HIGH), para que los LEDs se iliminen
    digitalWrite(latch_pin, HIGH);
    // se hace una pausa antes del siguiente valor
    delay(200);
  }
}

void secuencia4() {
  //recorre el arreglo donde se difinio la secuencia
  for (int i = 0; i < 2; i++) {
    // toma el latch_pin en bajo (LOW), para que los LEDs no cambien, mientras
    // se envian los datos (en bits).
    digitalWrite(latch_pin, LOW);
    // cambiar los bits ej. 0000 0001 0002 0003...
    shiftOut(data_pin, clock_pin, MSBFIRST, ledS4[i]);
    //toma el latch_pin en alto (HIGH), para que los LEDs se iliminen
    digitalWrite(latch_pin, HIGH);
    // se hace una pausa antes del siguiente valor
    delay(200);
  }
}

void secuencia5() {

//recorre el arreglo donde se difinio la secuencia
  for (int i = 0; i < 12; i++) {
    // toma el latch_pin en bajo (LOW), para que los LEDs no cambien, mientras
    // se envian los datos (en bits).
    digitalWrite(latch_pin, LOW);
    // cambiar los bits ej. 0000 0001 0002 0003...
    shiftOut(data_pin, clock_pin, MSBFIRST, ledS5[i]);
    //toma el latch_pin en alto (HIGH), para que los LEDs se iliminen
    digitalWrite(latch_pin, HIGH);
    // se hace una pausa antes del siguiente valor
    delay(200);
  }

}


void secuencia6() {
//recorre el arreglo donde se difinio la secuencia
  for (int i = 0; i < 22; i++) {
    // toma el latch_pin en bajo (LOW), para que los LEDs no cambien, mientras
    // se envian los datos (en bits).
    digitalWrite(latch_pin, LOW);
    // cambiar los bits ej. 0000 0001 0002 0003...
    shiftOut(data_pin, clock_pin, MSBFIRST, ledS6[i]);
    //toma el latch_pin en alto (HIGH), para que los LEDs se iliminen
    digitalWrite(latch_pin, HIGH);
    // se hace una pausa antes del siguiente valor
    delay(200);
  }
}


void secuencia7() {
//recorre el arreglo donde se difinio la secuencia
  for (int i = 0; i < 12; i++) {
    // toma el latch_pin en bajo (LOW), para que los LEDs no cambien, mientras
    // se envian los datos (en bits).
    digitalWrite(latch_pin, LOW);
    // cambiar los bits ej. 0000 0001 0002 0003...
    shiftOut(data_pin, clock_pin, MSBFIRST, ledS7[i]);
    //toma el latch_pin en alto (HIGH), para que los LEDs se iliminen
    digitalWrite(latch_pin, HIGH);
    // se hace una pausa antes del siguiente valor
    delay(200);
  }
}


void secuencia8() {
  //recorre el arreglo donde se difinio la secuencia
  for (int i = 0; i < 14; i++) {
    // toma el latch_pin en bajo (LOW), para que los LEDs no cambien, mientras
    // se envian los datos (en bits).
    digitalWrite(latch_pin, LOW);
    // cambiar los bits ej. 0000 0001 0002 0003...
    shiftOut(data_pin, clock_pin, MSBFIRST, ledS8[i]);
    //toma el latch_pin en alto (HIGH), para que los LEDs se iliminen
    digitalWrite(latch_pin, HIGH);
    // se hace una pausa antes del siguiente valor
    delay(200);
  }
}

codigo de processing

import controlP5.*;
import processing.serial.*;

ControlP5 cp5;

int colorDeFondo = color (215, 215, 215);
int val; // Data received from the serial port

RadioButton radioButton;

Serial serial;  // definir la variable serial del tipo Serial
int lf = 10;      // ASCII linefeed


void setup() {
  size(400, 300);
  noStroke();

  // Print a list of the serial ports, for debugging purposes:
  println("Puertos usados:");
  printArray(Serial.list());

  cp5 = new ControlP5(this);
  radioButton = cp5.addRadioButton("radioButton")
    .setPosition(20, 50)
      .setSize(40, 20)
        .setColorForeground(color(120))
          .setColorActive(color(255))
            .setColorLabel(color(0))
              .setItemsPerRow(4)
                .setSpacingColumn(50)
                  .setSpacingRow(20)
                    .addItem("Patron 1", 1)
                      .addItem("Patron 2", 2)
                        .addItem("Patron 3", 3)
                          .addItem("Patron 4", 4)
                            .addItem("Patron 5", 5)
                              .addItem("Patron 6", 6)
                                .addItem("Patron 7", 7)
                                  .addItem("Patron 8", 8)
                                    ;

  for (Toggle t : radioButton.getItems ()) {
    //t.captionLabel().setColorBackground(color(255,80));
    t.captionLabel().style().moveMargin(-7, 0, 0, -3);
    t.captionLabel().style().movePadding(7, 0, 0, 3);
    t.captionLabel().style().backgroundWidth = 45;
    t.captionLabel().style().backgroundHeight = 13;
  }

  /*
      cp5.addButton("Enviar")
   .setPosition(100, 320)
   .setSize(80,40)
   ;
   */

  serial = new Serial(this, Serial.list()[0], 9600);
  serial.bufferUntil(lf);
}

void draw() {
  background(colorDeFondo);
}

//Majejando los radioButtons con el teclado
void keyPressed() {
  switch(key) {
    case('0'):
    radioButton.deactivateAll();
    break;
    case('1'):
    radioButton.activate(0);
    break;
    case('2'):
    radioButton.activate(1);
    break;
    case('3'):
    radioButton.activate(2);
    break;
    case('4'):
    radioButton.activate(3);
    break;
    case('5'):
    radioButton.activate(4);
    break;
    case('6'):
    radioButton.activate(5);
    break;
    case('7'):
    radioButton.activate(6);
    break;
    case('8'):
    radioButton.activate(7);
    break;
  }
}


void controlEvent(ControlEvent evento) {

  if (evento.isFrom(radioButton)) {

    int total = 0;

    total = (int)evento.getValue();

    println("\nValor a ser enviado por Serial = " + total);
    //serial.write(total+"");
 
    serial.write("P"+total);
 
  }
  //println(serial.readString());
}

video


No hay comentarios.:

Publicar un comentario