miércoles, 25 de diciembre de 2013

Visualizador binario de tensión hecho con Arduino (incluye código)


A partir del voltaje en un determinado pin, se encienden unos leds indicando el voltaje correspondiente. Los leds verdes representan la parte entera y los amarillos la decimal.


Código:

int parteEntera;
double parteDecimal;

void setup(){
  Serial.begin(9600);
  pinMode(0,OUTPUT);
  pinMode(1,OUTPUT);
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(A5,INPUT);
}

void loop (){
  int tension = analogRead(A5);
  parteEntera = tension / 204.8;
  escribeEntera(parteEntera, 2);
  parteDecimal = (tension / 204.8) - parteEntera;
  escribeDecimal(parteDecimal,3, 5);
  double total = tension / 204.8;
  Serial.println(total);
  /*Serial.println(parteEntera);
   Serial.println(parteDecimal,5);*/
  delay(1000);
}

void escribeEntera(int n, int pin) {
  //la primera llamada de pin debe corresponde con el bit de la posicion mas baja)
  if((n <= 4) && (n >= 1)){
    if(n % 2 == 1){
      digitalWrite(pin,HIGH);    
    }
    else{
      digitalWrite(pin,LOW);
    }
    escribeEntera(n / 2, pin - 1);
  }
  else{
    while(pin >= 0){
      digitalWrite(pin,LOW);
      pin = pin - 1; 
    }
  }
}

void escribeDecimal(double n,int pin, int precision){
  //la primera llamada de pin debe corresponde con el bit de la posicion mas alta)
  //precision se refiere al numero de decimales binarios que se utilizaran
  if(precision > 0){
    //Serial.println(precision);
    if((n * 2.0) >= 1){
      digitalWrite(pin,HIGH);
      /*Serial.println("escribe uno en");
      Serial.println(pin);*/
      escribeDecimal (n * 2.0 - 1,pin + 1, precision - 1);
    }
    else{
      digitalWrite(pin,LOW);
      /*Serial.println("exribe 0 en");
      Serial.println(pin);*/
      escribeDecimal (n * 2.0, pin + 1, precision - 1);
    }
  }
}

No hay comentarios:

Publicar un comentario