Sonar con ATtiny85 Digispark y HC-SR04 - Lectura extraña

Estoy haciendo un sonar con con ATtini85 Digispark y HC-SR04. Tiene un potenciómetro en el pin 5 que es análogo A0.
Comprobé la con digikeyboard la lectura de las variables por separado y distancia = tiempo / 58.2 está ok, pero cuando hago esto distancia = lapso*tiempo / 58.2 me salen unos valores raros cuando muevo el potenciómetro por ejemplo:

'35
'38
'11
'8
'44
'9
28
62
'5
'46
62
'5
'474
'181
363
379

Este es el código:

#include "DigiKeyboard.h"
#define trig  0
#define echo  1
#define buzz  2
#define potn  A0
int distancia;
int tiempo;
int lapso;
int lectura;
void setup() {
  pinMode (trig, OUTPUT);
  pinMode (buzz, OUTPUT);
  pinMode(echo, INPUT);
  pinMode(potn, INPUT);
}

void loop() {
  digitalWrite(trig, HIGH);
  delay(1);
  digitalWrite(trig, LOW);
  lectura = analogRead(potn);
  lapso = map (lectura, 0, 1023, 1, 100);
  tiempo = pulseIn(echo, HIGH);
  distancia = lapso*tiempo / 58.2;
  tone(buzz, 2093, 10);
  DigiKeyboard.println(distancia);
  delay (distancia);
}

¿Por qué aparece ese apóstrofe (') y esos valores?

Jamas vi en el cálculo de la distancia esto

 lapso = map (lectura, 0, 1023, 1, 100);

Porque haces eso?

El valor del AD debe ir a la cuenta que corresponde, sin modificar nada. Luego si quieres expresarlo en 0-100 porque tienes una distancia máxima como 100% es otro tema.

Quiero usar esto

lapso = map (lectura, 0, 1023, 1, 100);

porque la división

distancia = tiempo / 58.2;

da valores entre ~3 y 400 centímetros, entonces al multiplicarlo por un rango de 1 a 100, aumentaría el delay... pero veo que 400x100 serían 40 segundos y está mal... El asunto es que el pitido va directamente al oído entonces la diferencia de tiempo debe ser perceptible.
Será esto del mapeo que está dañando la lectura?
Voy probar otros valores y posteo.

¿A qué te refieres con el valor "AD"?

El valor del AD

El valor del conversor analogico Digital. AD.

Ok. Lee por favor el potenciometro a ver si esta siendo convertido como corresponde.
Solo muestra el valor de analgoRead().

Lo que ocurre que no has considerado que tus cuentas estan desborando y te dan valores negativos.

400x100 = 40000 y definiste distancia como entero. Un entero positivo llega hasta 2^15= 32768 y como le pides 40000 simplemente te da un valor negativo.

usa unsigned int o long para distancia.

El potenciómetro está a punto, va de 0 a 1023 casi siempre (veo que he mejorado la soldadura).

En el tema de int, tienes razón, pero mezclé tantas variables con long e int que ya no recuerdo qué era lo que mejor funcionaba.

Mañana retomo las pruebas.

Por cierto, leí que a los números en las operaciones hay que colocarle una L al primer dígito, pero no encontré teoría soble las variables. Por esto es que tengo varias dudas. Pero en realidad el error proncipal debe ser el desborde.

Gracias!

pero mezclé tantas variables con long e int que ya no recuerdo qué era lo que mejor funcionaba.

No es lo que mejor funcione, es lo que debes usar.

Int no sirve a tus fines porque la operación 400x100 desborda la capacidad entera positiva.

usa long como mínimo, pero como valores negativos nos vas a tener si no superas 400x100 entros puedes usar simple unsigned int.

Opciones unsigned int, long, unsigned long.

pero en el medio tienes esta operación

distancia = lapso*tiempo / 58.2;

que no tiene sentido en el contexto de los enterios porque 58.2 es un float, asi que divide por 58 y no 58.2.

Radar para invidientes

//#include "DigiKeyboard.h"
#define trig  0
#define echo  1
#define buzz  2
#define potn  A0
float distancia;
int tiempo;
int lapso;
int lectura;
void setup() {
  pinMode (trig, OUTPUT);
  pinMode (buzz, OUTPUT);
  pinMode(echo, INPUT);
  pinMode(potn, INPUT);
}

void loop() {
  digitalWrite(trig, HIGH);
  delay(1);
  digitalWrite(trig, LOW);
  lectura = analogRead(potn);
  lapso = float( lectura/100);
  tiempo = pulseIn(echo, HIGH);
  distancia = (tiempo / 58.2)*lapso;
  if (distancia < 10) {
    tone(buzz, 2093, 5);
      delay (10);   
  } else {

    tone(buzz, 2093, 5);
    delay (int(distancia));
  }
//DigiKeyboard.println(distancia);

}

Esquema:
(Uso otro potenciómetro para el volumen del sonido)


Espero que alguien le saque provecho a esto.
Nota: En otro pin se le puede colocar un motor de teléfono para que vibre en caso que la distancia sea menor que 20 cm..

Ahora tu potenciómetro solo irá de 0 a 10 como lapso.