Show Posts
Pages: [1] 2 3
1  International / Proyectos / Re: Proyecto hexapodo + matrices led como ojos on: May 26, 2013, 04:50:13 am
¿Nadie puede saber porque me ocurre esto?
2  Using Arduino / LEDs and Multiplexing / Re: HELP with 5x9 Led matrix with two 74hc595 on: May 26, 2013, 04:49:14 am
Can anyone help me?
3  Using Arduino / LEDs and Multiplexing / HELP with 5x9 Led matrix with two 74hc595 on: May 22, 2013, 08:37:41 am
Hi,
I've some time working in a matrix of 5 rows and 9 columns. And I've run into the problem that I can not show a circle. I used two shift registers. In the first 5 outputs of the first 74hc595 I connected the 5 rows and in the remaining, part of the columns. The rest of the columns it connected to another 74hc595 that is in cascade with the first.

Code:
int latchPin = 8;
int clockPin = 12;
int dataPin = 11;

int counter = 0;
int LEDs[5][9] = {
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0}
};

int ojocentrado[5][9] = {
  {0,0,0,0,1,1,1,0,0},
  {0,0,0,1,1,1,1,0,0},
  {0,0,1,1,0,1,1,0,0},
  {0,0,1,1,1,1,0,0,0},
  {0,0,1,1,1,0,0,0,0}
};

int ojoderecha[5][9] = {
  {0,0,0,1,1,1,0,0,0},
  {0,0,1,1,1,1,0,0,0},
  {0,1,1,0,1,1,0,0,0},
  {0,1,1,1,1,0,0,0,0},
  {0,1,1,1,0,0,0,0,0}
};

void setup()
{
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop()
{
  if (counter < 50) {
    lightLED(ojocentrado);
  }
  if (counter > 50) {
    lightLED(ojoderecha);
  }
  if (counter > 100) {
    counter = 0;
  }
  counter++;
}

void lightLED(int tempLED[5][9]) {
  byte columnbitsToSend = 0;
  byte rowbitsToSend = 0;
  
  int x = 0;
  int y = 0;
  for (x = 0; x < 9; x++) {
    columnbitsToSend = 0;
    rowbitsToSend = 0;
    
    
    for (y = 0; y < 5; y++) {
      if (tempLED[x][y] == 1) {
        bitWrite(rowbitsToSend, y, HIGH);
      }
    }
    
    digitalWrite(latchPin, LOW);
    bitWrite(columnbitsToSend, x, HIGH);
    shiftOut(dataPin, clockPin, MSBFIRST, columnbitsToSend);
    shiftOut(dataPin, clockPin, MSBFIRST, rowbitsToSend);
    digitalWrite(latchPin, HIGH);
    delay(2);
  }
}
I can not showing anything and I do not understand. I've looked at a lot of places: instructables, some forums even arduino, and nothing. I do not get to create a sketch that I work with my array. If anyone can help me to find the fault I would appreciate it.

Also I try using this other sketch, to learn how it works, but I do not get out well. In this I think the problem is that the accounts have not done well. The sketch is based on the first LED light, then the next in the row and then when it reach the end go to the next line and so all the time.
Code:
//pin connections- the #define tag will replace all instances of "latchPin" in your code with A1 (and so on)
#define latchPin A1
#define clockPin A0
#define dataPin A2

//looping variables
byte i;
byte j;

//storage variable
byte dataToSend;

void setup() {
  //set pins as output
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  
  for (i=0;i<5;i++){
    
    for (j=0;j<9;j++){
      
      //bit manipulation (more info at http://arduino.cc/en/Reference/Bitshift ,  http://arduino.cc/en/Reference/BitwiseXorNot , and http://arduino.cc/en/Reference/BitwiseAnd)
      dataToSend = (1 << (i+10)) | (255 & ~(1 << j));//preprare byte (series of 8 bits) to send to 74HC595
      //for example when i =2, j = 3,
      //dataToSend = (1 << 6) | (15 & ~(1 << 3));
      //dataToSend = 01000000 | (15 & ~(00001000));
      //dataToSend = 01000000 | (15 & 11110111);
      //dataToSend = 01000000 | (15 & 11110111);
      //dataToSend = 01000000 | 00000111;
      //dataToSend = 01000111;
      //the first four bits of dataToSend go to the four rows (anodes) of the LED matrix- only one is set high and the rest are set to ground
      //the last four bits of dataToSend go to the four columns (cathodes) of the LED matrix- only one is set to ground and the rest are high
      //this means that going through i = 0 to 3 and j = 0 to three with light up each led once
      
      // setlatch pin low so the LEDs don't change while sending in bits
      digitalWrite(latchPin, LOW);
      // shift out the bits of dataToSend to the 74HC595
      shiftOut(dataPin, clockPin, LSBFIRST, dataToSend);
      //set latch pin high- this sends data to outputs so the LEDs will light up
      digitalWrite(latchPin, HIGH);
      
      delay(500);//wait
    }
  }
  
}
4  International / Proyectos / Re: Proyecto hexapodo + matrices led como ojos on: May 21, 2013, 12:06:22 pm
Buenas,

Llevo un tiempo ya trabajando en el hexapodo y decidí ponerme con los ojos, que son dos matrices de 5 filas y 9 columnas. Y me he topado con el problema de que no consigo mostrar la forma de una pupila. He utilizado dos registros de desplazamiento. En las 5 primeras salidas del 1 74hc595 he conectado las 5 filas y en las restantes parte de las columnas. El resto de de columnas las he conectado a otra 74hc595 que esta conectado en cascada con el primero.

Code:
int latchPin = 8;
int clockPin = 12;
int dataPin = 11;

int counter = 0;
int LEDs[5][9] = {
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0},
  {0,0,0,0,0,0,0,0,0}
};

int ojocentrado[5][9] = {
  {0,0,0,0,1,1,1,0,0},
  {0,0,0,1,1,1,1,0,0},
  {0,0,1,1,0,1,1,0,0},
  {0,0,1,1,1,1,0,0,0},
  {0,0,1,1,1,0,0,0,0}
};

int ojoderecha[5][9] = {
  {0,0,0,1,1,1,0,0,0},
  {0,0,1,1,1,1,0,0,0},
  {0,1,1,0,1,1,0,0,0},
  {0,1,1,1,1,0,0,0,0},
  {0,1,1,1,0,0,0,0,0}
};

void setup()
{
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop()
{
  if (counter < 50) {
    lightLED(ojocentrado);
  }
  if (counter > 50) {
    lightLED(ojoderecha);
  }
  if (counter > 100) {
    counter = 0;
  }
  counter++;
}

void lightLED(int tempLED[5][9]) {
  byte columnbitsToSend = 0;
  byte rowbitsToSend = 0;
 
  int x = 0;
  int y = 0;
  for (x = 0; x < 9; x++) {
    columnbitsToSend = 0;
    rowbitsToSend = 0;
   
   
    for (y = 0; y < 5; y++) {
      if (tempLED[x][y] == 1) {
        bitWrite(rowbitsToSend, y, HIGH);
      }
    }
   
    digitalWrite(latchPin, LOW);
    bitWrite(columnbitsToSend, x, HIGH);
    shiftOut(dataPin, clockPin, MSBFIRST, columnbitsToSend);
    shiftOut(dataPin, clockPin, MSBFIRST, rowbitsToSend);
    digitalWrite(latchPin, HIGH);
    delay(2);
  }
}
 

no consigo que me muestre nada y no lo entiendo. He mirado por un montón de sitios: en instructables, en algunos foros incluso de arduino, y nada no consigo crear un sketch que me funciona con mi matriz. SI alguien me puede ayudar muchas gracias de antemano.

También intente usar este otro sketch, para aprender como funciona, pero no tampoco consigo que me salga bien. En este creo que el problema es que las cuentas no las he hecho bien. El sketch se basa en encender un led luego el siguiente de cada fila y luego cuando llegue pasar a la siguiente linea y así todo el tiempo.
Code:
//pin connections- the #define tag will replace all instances of "latchPin" in your code with A1 (and so on)
#define latchPin A1
#define clockPin A0
#define dataPin A2

//looping variables
byte i;
byte j;

//storage variable
byte dataToSend;

void setup() {
  //set pins as output
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
 
  for (i=0;i<5;i++){
   
    for (j=0;j<9;j++){
     
      //bit manipulation (more info at http://arduino.cc/en/Reference/Bitshift ,  http://arduino.cc/en/Reference/BitwiseXorNot , and http://arduino.cc/en/Reference/BitwiseAnd)
      dataToSend = (1 << (i+10)) | (255 & ~(1 << j));//preprare byte (series of 8 bits) to send to 74HC595
      //for example when i =2, j = 3,
      //dataToSend = (1 << 6) | (15 & ~(1 << 3));
      //dataToSend = 01000000 | (15 & ~(00001000));
      //dataToSend = 01000000 | (15 & 11110111);
      //dataToSend = 01000000 | (15 & 11110111);
      //dataToSend = 01000000 | 00000111;
      //dataToSend = 01000111;
      //the first four bits of dataToSend go to the four rows (anodes) of the LED matrix- only one is set high and the rest are set to ground
      //the last four bits of dataToSend go to the four columns (cathodes) of the LED matrix- only one is set to ground and the rest are high
      //this means that going through i = 0 to 3 and j = 0 to three with light up each led once
     
      // setlatch pin low so the LEDs don't change while sending in bits
      digitalWrite(latchPin, LOW);
      // shift out the bits of dataToSend to the 74HC595
      shiftOut(dataPin, clockPin, LSBFIRST, dataToSend);
      //set latch pin high- this sends data to outputs so the LEDs will light up
      digitalWrite(latchPin, HIGH);
     
      delay(500);//wait
    }
  }
 
}
5  International / Proyectos / Re: Proyecto hexapodo on: May 09, 2013, 01:19:08 pm
Al final pude sacar un poco de tiempo y avanzar un poco con el hexapodo acondicionando los cables y terminando los ojos.



6  International / Proyectos / Re: Proyecto hexapodo on: May 01, 2013, 01:20:53 pm
Perdón por tardar tanto en responder, pero con tantos exámenes y con selectividad a la vuelta de la esquina no he tenido mucho tiempo para hacer casi nada, cuando tenga tiempo y avance algo ya veré lo que subo.
Saludos
7  International / Proyectos / Re: Proyecto hexapodo on: April 19, 2013, 03:15:48 pm
Muchas gracias por vuestra ayuda, sois geniales. Ya lo he pedido, ahora solo me queda que me llegue y ponerme a programar jaja. Ademas le voy a hacer una ojos con dos matrices leds, ya pondré fotos y os iré comentando como va. Saludos.
8  International / Proyectos / Re: Proyecto hexapodo on: April 16, 2013, 10:56:13 am
Muchas gracias. He estado mirando lo del estabilizador y la verdad nunca he comprado por hobbyking ademas de que es un poco caro ya que quiero reducir un poco el presupuesto porque llevo ya bastante gastado. He estado mirando por ebay, que suelo comprar mucho por hay y he estado viendo algunos que dan 3a como máximo 5 bastante mas baratos pero creo que llegara muy justo o no sera suficiente. Se me había ocurrido poner o dos juntos para el total de los 12 servos o irme a por uno de 6a, no se como hacer la verdad:
El de 6a:
http://www.ebay.es/itm/HENGE-6A-2-6S-Input-Switch-Mode-UBEC-/140927444629?pt=US_Radio_Control_Control_Line&hash=item20cfee2695#ht_2548wt_952

El de 3a max 5a:
http://www.ebay.es/itm/Hobbywing-3A-UBEC-5V-6V-max-5A-Lowest-RF-Noise-BEC-S-/120753508902?pt=US_Radio_Control_Control_Line&hash=item1c1d785226#ht_2788wt_952

Sobre las baterías tengo un cargador tengo un ultramat 14 plus que me permite cargas las baterías de lipo pero lo que si tengo son muchas baterías de nimh y nicd ya que tengo un coche electrico. Pero si dan mejor resultado als de lipo poder puedo cargarlas.
Saludos
9  International / Proyectos / Re: Proyecto hexapodo on: April 15, 2013, 03:47:46 pm
Hay en la foto los servos no están conectados a nada esa foto fue la que hice el dia que lo acabe de montar. Los servos los tengo conectados a corriente externa y una arduino mega controlandolos pero aun teniéndolos así conectados solo funcionan bien 4 servos simultáneamente a pleno rendimiento.
10  International / Proyectos / Proyecto hexapodo + matrices led como ojos on: April 15, 2013, 01:30:12 pm

Hola, buenas estoy trabajando es la construcción de un hexapodo  con 12 servos controlados por una arduino mega, pero después  de terminarlo y conectar todo me topo con un problema que es que los servos no se mueven solo vibran. tengo los servos alimentados con una fuente externa de 6v y 2,5 amperios. Buscando por internet he visto a mucha gente con el mismo problema y quería saber si seria posible hacer algún circuito de potencia que me permita usar esa batería para alimentarlo.
Saludos y muchas gracias.
11  Using Arduino / Installation & Troubleshooting / Problems with arduino lilypad and pro mini on: February 23, 2013, 06:07:50 am
Hi, recently i bought a new arduino lilypad and pro mini boards with atmega168.
I use a usb to serial adaptar like this:

An when y try to upload the sketch de pin13 led blink normally and the rx led of the serial adaptar blink three times and the arduino ide said thar the board dont comunicate with the computer. I have the problem with both boards. I use the arduino 1.0.2 and i review the port and the conexion with rx and tx with the board and the serial adaptar and nothing change. i also tried using the arduino uno board without the chip as usb to serial adaptar and hte problem persist. I dont know how to fix the problem. The correct board and port is selected in the arduino IDE and dont work.
12  Using Arduino / LEDs and Multiplexing / Re: How to use multiplexer CD74HC4051 on: October 14, 2012, 09:29:34 am
So, it is not possible by any multiplexer to control many servos with Arduino?
13  Using Arduino / LEDs and Multiplexing / Re: How to use multiplexer CD74HC4051 on: October 13, 2012, 02:21:19 pm



It would be something like this. But instead of controlling LEDs, if is possible to control servos, and how to program arduino to control each servo independently. Not only I will use all outputs for servos, also I will use for sensors too.
14  Using Arduino / LEDs and Multiplexing / How to use multiplexer CD74HC4051 on: October 12, 2012, 02:38:11 pm
Hello, I have doubts about how to use the multiplexer CD74HC4051, I need to use it to have both analog inputs to read sensors, as digital outputs to move servos and motors And incidentally also to use digital inputs. I've been looking online and I found three examples for each situation but I not understand.
Code:
void loop()
{
  //This for loop is used to scroll through and store the 16 inputs on the FIRST multiplexer
  for (int i=0; i<16; i++)
  {
    //The following 4 commands set the correct logic for the control pins to select the desired input
    //See the Arduino Bitwise AND Reference: http://www.arduino.cc/en/Reference/BitwiseAnd
    //See the Aruino Bitshift Reference: http://www.arduino.cc/en/Reference/Bitshift
    digitalWrite(CONTROL0, (i&15)>>3);
    digitalWrite(CONTROL1, (i&7)>>2); 
    digitalWrite(CONTROL2, (i&3)>>1); 
    digitalWrite(CONTROL3, (i&1));     
   
    //Read and store the input value at a location in the array
    mux0array[i] = analogRead(0);
  }
 
  //This for loop is used to scroll through the SECOND multiplexer
  for (int i=0; i<16; i++)
  {
    digitalWrite(CONTROL0, (i&15)>>3);
    digitalWrite(CONTROL1, (i&7)>>2); 
    digitalWrite(CONTROL2, (i&3)>>1); 
    digitalWrite(CONTROL3, (i&1));     
    mux1array[i] = analogRead(1);
  }
 
  //This for loop is used to scroll through the THIRD multiplexer
  for (int i=0; i<16; i++)
  {
    digitalWrite(CONTROL0, (i&15)>>3);
    digitalWrite(CONTROL1, (i&7)>>2); 
    digitalWrite(CONTROL2, (i&3)>>1); 
    digitalWrite(CONTROL3, (i&1));     
    mux2array[i] = analogRead(2);
  }   
 
  //The following lines are for printing out results of array0
  Serial.print("mux0array: ");
  for (int i=0; i<16; i++)
  {
    Serial.print(mux0array[i]);
    Serial.print("-");
  }
  Serial.println();  //line feed
 
  //The following lines are for printing out results of array1
  Serial.print("mux1array: ");
  for (int i=0; i<16; i++)
  {
    Serial.print(mux1array[i]);
    Serial.print("-");
  }
  Serial.println();
 
  //The following lines are for printing out results of array2
  Serial.print("mux2array: ");
  for (int i=0; i<16; i++)
  {
    Serial.print(mux2array[i]);
    Serial.print("-");
  }
  Serial.println();
 
}

And

Code:
void setup()
{
  //Set MUX control pins to output
  pinMode(CONTROL0, OUTPUT);
  pinMode(CONTROL1, OUTPUT);
  pinMode(CONTROL2, OUTPUT);
  pinMode(CONTROL3, OUTPUT);
}
 

void loop()
{

  //Since all 3 multiplexers have the same control pins, the one multiplexer data line we want to
  //talk to should be set to output and the other two multiplexer lines should be be 'bypassed' by
  //setting the pins to input
   
  //Turn on output to digital pin 14 (MUX 0) and turn off the other 2 multiplexer data pins
  pinMode(14, OUTPUT);
  pinMode(15, INPUT);
  pinMode(16, INPUT);
   
  //This for loop is used to scroll through the FIRST multiplexer
  for (int i=0; i<16; i++)
  {   
    //The following 4 commands set the correct logic for the control pins to select the desired input
    //See the Arduino Bitwise AND Reference: http://www.arduino.cc/en/Reference/BitwiseAnd
    //See the Aruino Bitshift Reference: http://www.arduino.cc/en/Reference/Bitshift
    digitalWrite(CONTROL0, (i&15)>>3); //S3
    digitalWrite(CONTROL1, (i&7)>>2);  //S2
    digitalWrite(CONTROL2, (i&3)>>1);  //S1
    digitalWrite(CONTROL3, (i&1));     //S0
   
    digitalWrite(14, HIGH);
    delay(100);
    digitalWrite(14, LOW);
    delay(100);
  }
 
  //Turn on output to digital pin 15 (MUX 1) and turn off the other 2 multiplexer data pins
  pinMode(14, INPUT);
  pinMode(15, OUTPUT);
  pinMode(16, INPUT);
 
  //This for loop is used to scroll through the SECOND multiplexer
  for (int i=0; i<16; i++)
  {
    digitalWrite(CONTROL0, (i&15)>>3); //S3
    digitalWrite(CONTROL1, (i&7)>>2);  //S2
    digitalWrite(CONTROL2, (i&3)>>1);  //S1
    digitalWrite(CONTROL3, (i&1));     //S0
   
    digitalWrite(15, HIGH);
    delay(100);
    digitalWrite(15, LOW);
    delay(100);
  }
 
  //Turn on output to digital pin 16 (MUX 2) and turn off the other 2 multiplexer data pins
  pinMode(14, INPUT);
  pinMode(15, INPUT);
  pinMode(16, OUTPUT);
 
  //This for loop is used to scroll through the THIRD multiplexer
  for (int i=0; i<16; i++)
  {
    digitalWrite(CONTROL0, (i&15)>>3); //S3
    digitalWrite(CONTROL1, (i&7)>>2);  //S2
    digitalWrite(CONTROL2, (i&3)>>1);  //S1
    digitalWrite(CONTROL3, (i&1));     //S0
   
    digitalWrite(16, HIGH);
    delay(100);
    digitalWrite(16, LOW);
    delay(100);
  }
}

I'm a newbie and I understand some commands but many I do not understand.
15  International / Software / Duda como usar multiplexores con arduino. on: October 07, 2012, 10:27:37 am
Hola, tengo dudas de como poder usar el multiplexor CD74HC4051, necesito usarlo para tener tanto entradas analógicas para leer sensores, como salidas digitales para mover servos y motores y ya de paso también para usar entradas digitales. He estado mirando por internet y e encontrado tres ejemplos para cada situación pero no los comprendo.
Ejemplo de entradas analogicas:
Code:
//Mux_Shield_AnalogIn_Example
//http://mayhewlabs.com/arduino-mux-shield

/*
This example shows how to read and store all 48 pins as analog inputs into arrays and print the results over serial.
Multiplexer pin inputs that do not have a voltage reading (i.e nothing connected) will have erratic values.

To simplify this code further, one might use nested for loops or function calls.
*/

//Give convenient names to the control pins
#define CONTROL0 5    
#define CONTROL1 4
#define CONTROL2 3
#define CONTROL3 2

//Create arrays for data from the the MUXs
//See the Arduino Array Reference: http://www.arduino.cc/en/Reference/Array
int mux0array[16];
int mux1array[16];
int mux2array[16];

void setup()
{
  //Set MUX control pins to output
  pinMode(CONTROL0, OUTPUT);
  pinMode(CONTROL1, OUTPUT);
  pinMode(CONTROL2, OUTPUT);
  pinMode(CONTROL3, OUTPUT);
  
  //Open the serial port at 28800 bps
  Serial.begin(28800);
}
  

void loop()
{
  //This for loop is used to scroll through and store the 16 inputs on the FIRST multiplexer
  for (int i=0; i<16; i++)
  {
    //The following 4 commands set the correct logic for the control pins to select the desired input
    //See the Arduino Bitwise AND Reference: http://www.arduino.cc/en/Reference/BitwiseAnd
    //See the Aruino Bitshift Reference: http://www.arduino.cc/en/Reference/Bitshift
    digitalWrite(CONTROL0, (i&15)>>3);
    digitalWrite(CONTROL1, (i&7)>>2);  
    digitalWrite(CONTROL2, (i&3)>>1);  
    digitalWrite(CONTROL3, (i&1));    
    
    //Read and store the input value at a location in the array
    mux0array[i] = analogRead(0);
  }
  
  //This for loop is used to scroll through the SECOND multiplexer
  for (int i=0; i<16; i++)
  {
    digitalWrite(CONTROL0, (i&15)>>3);
    digitalWrite(CONTROL1, (i&7)>>2);  
    digitalWrite(CONTROL2, (i&3)>>1);  
    digitalWrite(CONTROL3, (i&1));    
    mux1array[i] = analogRead(1);
  }
  
  //This for loop is used to scroll through the THIRD multiplexer
  for (int i=0; i<16; i++)
  {
    digitalWrite(CONTROL0, (i&15)>>3);
    digitalWrite(CONTROL1, (i&7)>>2);  
    digitalWrite(CONTROL2, (i&3)>>1);  
    digitalWrite(CONTROL3, (i&1));    
    mux2array[i] = analogRead(2);
  }    
  
  //The following lines are for printing out results of array0
  Serial.print("mux0array: ");
  for (int i=0; i<16; i++)
  {
    Serial.print(mux0array[i]);
    Serial.print("-");
  }
  Serial.println();  //line feed
  
  //The following lines are for printing out results of array1
  Serial.print("mux1array: ");
  for (int i=0; i<16; i++)
  {
    Serial.print(mux1array[i]);
    Serial.print("-");
  }
  Serial.println();
  
  //The following lines are for printing out results of array2
  Serial.print("mux2array: ");
  for (int i=0; i<16; i++)
  {
    Serial.print(mux2array[i]);
    Serial.print("-");
  }
  Serial.println();
  
}

Ejemplo salida digital:

Code:
//Mux_Shield_DigitalOut_Example
//http://mayhewlabs.com/arduino-mux-shield

/*
This example shows how to output high or low on all 48 pins.  To use the analog pins as digital, we use
pin numbers 14-16 (instead of analog numbers 0-2).

To simplify this code further, one might use nested for loops or function calls.
*/

//Give convenient names to the control pins
#define CONTROL0 5    //MUX control pin 0 (S3 is connected to Arduino pin 2)
#define CONTROL1 4
#define CONTROL2 3
#define CONTROL3 2

void setup()
{
  //Set MUX control pins to output
  pinMode(CONTROL0, OUTPUT);
  pinMode(CONTROL1, OUTPUT);
  pinMode(CONTROL2, OUTPUT);
  pinMode(CONTROL3, OUTPUT);
}
  

void loop()
{

  //Since all 3 multiplexers have the same control pins, the one multiplexer data line we want to
  //talk to should be set to output and the other two multiplexer lines should be be 'bypassed' by
  //setting the pins to input
    
  //Turn on output to digital pin 14 (MUX 0) and turn off the other 2 multiplexer data pins
  pinMode(14, OUTPUT);
  pinMode(15, INPUT);
  pinMode(16, INPUT);
    
  //This for loop is used to scroll through the FIRST multiplexer
  for (int i=0; i<16; i++)
  {    
    //The following 4 commands set the correct logic for the control pins to select the desired input
    //See the Arduino Bitwise AND Reference: http://www.arduino.cc/en/Reference/BitwiseAnd
    //See the Aruino Bitshift Reference: http://www.arduino.cc/en/Reference/Bitshift
    digitalWrite(CONTROL0, (i&15)>>3); //S3
    digitalWrite(CONTROL1, (i&7)>>2);  //S2
    digitalWrite(CONTROL2, (i&3)>>1);  //S1
    digitalWrite(CONTROL3, (i&1));     //S0
    
    digitalWrite(14, HIGH);
    delay(100);
    digitalWrite(14, LOW);
    delay(100);
  }
  
  //Turn on output to digital pin 15 (MUX 1) and turn off the other 2 multiplexer data pins
  pinMode(14, INPUT);
  pinMode(15, OUTPUT);
  pinMode(16, INPUT);
  
  //This for loop is used to scroll through the SECOND multiplexer
  for (int i=0; i<16; i++)
  {
    digitalWrite(CONTROL0, (i&15)>>3); //S3
    digitalWrite(CONTROL1, (i&7)>>2);  //S2
    digitalWrite(CONTROL2, (i&3)>>1);  //S1
    digitalWrite(CONTROL3, (i&1));     //S0
    
    digitalWrite(15, HIGH);
    delay(100);
    digitalWrite(15, LOW);
    delay(100);
  }
  
  //Turn on output to digital pin 16 (MUX 2) and turn off the other 2 multiplexer data pins
  pinMode(14, INPUT);
  pinMode(15, INPUT);
  pinMode(16, OUTPUT);
  
  //This for loop is used to scroll through the THIRD multiplexer
  for (int i=0; i<16; i++)
  {
    digitalWrite(CONTROL0, (i&15)>>3); //S3
    digitalWrite(CONTROL1, (i&7)>>2);  //S2
    digitalWrite(CONTROL2, (i&3)>>1);  //S1
    digitalWrite(CONTROL3, (i&1));     //S0
    
    digitalWrite(16, HIGH);
    delay(100);
    digitalWrite(16, LOW);
    delay(100);
  }
}

Soy novatillo y algunos comandos los entiendo pero hay muchos que no comprendo.
Pages: [1] 2 3