Diecimila lectura 6 analog

Hola estoy intentando leer simultaneamente 6 voltajes entre 0-5 volts de las seis entradas analogicas que tiene el diecimila , compararlas entre ellas y mostrar un 1 en la salida correspondiente de otras seis salidas digitales , osea el voltaje mayor en una entrada muestra un 1 en su salida correspondiente , las demás quedan a 0 . Agradeceria me echarais una mano ya que estoy muy verde todavia en la programación del arduino diecimila , Gracias

Hola,

veamos esto que preguntas no es complicado, pero en lugar de resolverte todo el soft, te voy a hacer un ejemplo con solo dos entradas analogicas y dos digitales y tu tendras que hacer el resto, te parece?

// definicion pines analogicos
int analPin0 = 0;
int analPin1 = 1;

// definicion pines digitales
int outPin0 = 2;
int outPin1 = 3;

void setup() {
  // declara pines digitales como salidas
  pinMode(outPin0, OUTPUT);
  pinMode(outPin0, OUTPUT);
}

void loop() {
  int val0 = analogRead(analPin0);
  int val1 = analogRead(analPin1);

  if (val0 > val1) {
    digitalWrite(outPin0, HIGH);
    digitalWrite(outPin1, LOW);
  } else {
    digitalWrite(outPin0, LOW);
    digitalWrite(outPin1, HIGH);
  }
}

Este programa hara la magia para el caso de tener 2 pines de entrada y 2 de salida, sin embargo, no creo que sea la mejor forma de hacerlo para 6 pines, si bien si que es la mas clara. Para 6 pines lo mejor es almacenar todos los datos en un array, hacer una lectura con un FOR, y asi ... la verdad ... me siento con ganas de hacerlo, asi que te lo resuelvo ... ahora bien, la primera y la ultima vez :smiley:

// DEBUG = 1, mostrara datos en el 
// monitor de puerto serie
#define DEBUG 1

// definicion numero pines a usar
// como maximo 6, minimo 1
// lo declaramos como constante
#define numPins 6

// definicion pines digitales indicando el primer
// pin, el resto vienen en incremento
int outPin0 = 2;

// valores analogicos medidos
// almacenados en un array
int val[numPins];

void setup() {
  // declara pines digitales como salidas
  for (int i = 0; i < numPins; i++)
    pinMode(outPin0 + i, OUTPUT);
    
  if (DEBUG) Serial.begin(9600);
}

void loop() {
  // lee todos los sensores de una vez
  // y almacena los valores en el array
  for (int i = 0; i < numPins; i++)
    val[i] = analogRead(i);
  
  int maxNum = 0;  
  for (int i = 0; i < numPins; i++)  
    maxNum = max(val[i], maxNum);

  for (int i = 0; i < numPins; i++)  
    if (maxNum > val[i]) val[i] = 0;
    else {
      val[i] = 1;
      maxNum = 1025;
    }

  if (DEBUG) { 
    for (int i = 0; i < numPins; i++) 
      if (val[i] != 0) Serial.print(1);
      else Serial.print(0);
    Serial.println();
    delay(100);
  }
  
  for (int i = 0; i < numPins; i++)
    if (val[i] != 0) digitalWrite(outPin0+i, HIGH);
    else digitalWrite(outPin0+i, LOW);
}

A ver si te sirve,

/d