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