TODOPIC

Otros Microcontroladores / Dispositivos programables => Arduino => Mensaje iniciado por: osmangutierrez en 05 de Junio de 2023, 18:55:15

Título: Redondear a la centena
Publicado por: osmangutierrez en 05 de Junio de 2023, 18:55:15
Hola de nuevo.
Mi caso es el siguiente: Estoy utilizando un potenciometro para obtener valores numericos entre 10000 y 17000 con este codigo:
Código: [Seleccionar]
void loop() {
  sensorValue = analogRead(A0);
  sensorValue = map(sensorValue, 0, 1023, 10000, 17000);
}
con la lectura obtengo:
10506
10540
10647
10654
10747
10783 hasta llegar a a los 17000.
Ahora mi duda es si se puede redondear estos valores obtenidos a la centena?
cosa que me queden asi:
10506 -> 10600
10540 -> 10600
10647 -> 10700
10654 -> 10700
10747 -> 10800
10783 -> 10800 y asi hasta llegar a los 17000
Título: Re:Redondear a la centena
Publicado por: Robert76 en 05 de Junio de 2023, 20:57:20
Hola, la resolución de tu ADC tiene que tener 15 bits.
Prueba a ignorar los 7 bits de menor peso. Si bien de esa manera no tendrás un redondeo en particiones de 100, pero es un comienzo.
Otra opción es leer de manera individual los dígitos de la unidad y decena, y colocarles el valor de 0.
Título: Re:Redondear a la centena
Publicado por: Eduardo2 en 05 de Junio de 2023, 21:14:04
Probá esto
Código: [Seleccionar]
void loop() {
  sensorValue = analogRead(A0);
  sensorValue = map(sensorValue, 0, 1023, 10000, 17000);
  uint8_t r = sensorValue%100 ;
  if(r!=0) sensorValue += 100-r ;
}
Título: Re:Redondear a la centena
Publicado por: osmangutierrez en 06 de Junio de 2023, 17:37:15
Gracias Eduardo, me funciono:
Código: [Seleccionar]
void loop() {
  sensorValue = analogRead(A0);
  maped = map(sensorValue, 0, 1023, 10000, 17000);
  residuo = maped % 100;
  resultado = maped - residuo;
  Serial.print(String("ADC: ") + sensorValue);
  Serial.print(String("  Maped: ") + maped);
  Serial.print(String("  Residuo: ") + residuo);
  Serial.println(String("  Resultado: ") + resultado);
}
Doy por solucionada mi duda  8)