Ten eerste super bedankt voor jullie reacties!
Ik snap inderdaad dat de code niet zo netjes was qua comments.
Ik ben echt nog een beginner, waardoor de verschillende pin numbers voor mij een beetje onduidelijk zijn en ik lastig kan onderscheiden welke voorbeelden wel in orde zijn en welke niet.
MAS3:
Tipje:
Verander de betreffende regel in je code als onderstaand, en voeg direct daarna de andere regels toe.
Serial.print(" cm");
Serial.print(" ");
Serial.print("Meetresultaat:");
Serial.print(duration);
Serial.println("micro seconden");
Dit toont dus niet alleen de centimeters, maar daar achter ook het de waarde die de sensor gemeten heeft in micro seconden.
Dat dient dan als debug hulpmiddel zodat je kunt zien of de waardes zich verhouden tot elkaar en de werkelijke afstand.
Beweeg je object daarvoor langs een liniaal die begint bij je sensor.
PulseIn heeft een bepaalde range, en die start bij 10 micro seconden.
Dat betekent dat je ook een bepaalde minimum afstand hebt die gemeten kan worden.
Met jouw formule kun je ongetwijfeld uitrekenen hoe groot de minimale afstand dus is.
Overigens zijn de 2 formules die in die code staan, volgens mij gelijk.
Ik heb dit gevolgd en het aantal microseconden wordt hoger naarmate een object dichterbij komt. En wordt lager naarmate het object weer naar achteren gaat.
Dit is ookal vreemd, want hoe dichterbij een object, hoe minder microseconden er tussen een pulse zouden moeten zijn.
In dit voorbeeld staat namelijk dat 11=D11 en 12=D12, maar hier staat weer dat 14=D11 en 15=D12.
Als ik uit ga van:
#define ULTRASONIC_TRIG_PIN 11 // pin trig zit in D11
#define ULTRASONIC_ECHO_PIN 12 // pin echo zit in D12
Krijg ik dit als resultaat:

Dus dat lijkt me al helemaal niet te kloppen.
Als ik uit ga van:
#define ULTRASONIC_TRIG_PIN 14 // pin trig zit in D11
#define ULTRASONIC_ECHO_PIN 15 // pin echo zit in D12
Krijg ik dit als resultaat:

Maar als ik als code dit doe:
#define ULTRASONIC_TRIG_PIN 12 // pin trig zit in D11
#define ULTRASONIC_ECHO_PIN 11 // pin echo zit in D12
Krijg ik als resultaat:

Maar dit lijkt me dus heel gek, want waarom doen de 2 laatste voorbeelden het allebei terwijl het andere nummers zijn?
Erik_Baas:
Wat voor waardes krijg je van pulseIn()? En is een long dan wel het juiste datatype voor duration? En zo ja, moet dat dan geen unsigned long zijn?
Ik zie in eigenlijk alle voorbeelden dat ze long gebruiken, maar als ik bijvoorbeeld int gebruik zie ik geen verschil. Unsigned geeft ook geen ander resultaat.
Erik_Baas:
Nog iets: uit voorbeelden begrijp ik dat interrupts de meting kunnen beïnvloeden; om dat te voorkomen kun je die tijdelijk (!) uitschakelen:
noInterrupts();
... pulseIn(...);
interrupts();
Dit geeft ook geen ander resultaat.
Dit is op dit moment mijn code:
#define ULTRASONIC_TRIG_PIN 14 // pin trig is D11
#define ULTRASONIC_ECHO_PIN 15 // pin echo is D12
long duration;
float distance;
void setup() {
pinMode(ULTRASONIC_TRIG_PIN, OUTPUT);
pinMode(ULTRASONIC_ECHO_PIN, INPUT);
Serial.begin(9600);
delay(1500);
}
void loop() {
digitalWrite(ULTRASONIC_TRIG_PIN, LOW); // geen puls geven
delayMicroseconds(2); // tijd tussen pulsen
digitalWrite(ULTRASONIC_TRIG_PIN, HIGH); // wel een puls
delayMicroseconds(10); // tijd tussen pulsen
digitalWrite(ULTRASONIC_TRIG_PIN, LOW); // geen puls geven
duration = pulseIn(ULTRASONIC_ECHO_PIN, HIGH);
//distance = duration * 0.034 / 2; // Manier 1 om de afstand te berekenen
distance = (duration/2) / 29.1; // Manier 2 om de afstand te berekenen
Serial.print("Afstand: ");
Serial.print(distance);
Serial.println(" cm");
Serial.print("Meetresultaat: ");
Serial.print(duration);
Serial.println(" micro seconden");
delay(100);
}