Voor een project van school ben ik bezig om analoog signaal van de HC-SR04 (Ultrasonic sensor) om te zetten in een digitaal signaal. Alleen dit lukt mij niet helemaal vandaar hulp gezocht.
De bedoeling is dat er bijvoorbeeld als er door de HC-SR04 tussen de 2 en 40 Cm wordt aangegeven dat er dan 5v op een pin komt te staan. waardoor deze weer kan worden gebruikt voor verdere doeleinde.
Kun je aub je post bewerken, alle code selecteren en op de </> knop drukken om zogenaamde code-tags toe te voegen en vervolgens je post weer opslaan. Het maakt het gemakkelijker om te lezen, gemakkelijker om te kopieren en het voorkomt dat de forum software delen van de code als instructies ziet.
Kun je aangeven waar je vast zit? Je hebt al gebruik gemaakt van een if statement dus het zou redelijk eenvoudig moeten zijn om er een tweede in te plakken die test of de afstand tussen 2 cm en 40 cm is en dan een pin hoog te maken.
Dus de ene keer op pin 5 een 5V en de andere keer op pin 6 bij dezelfde afstand?
Of gebaseerd op afstand?
tussen 2 cm en 20 cm 5V op pin 5
tussen 20 cm en 40 cm 5V op pin 6
tussen 40 cm en 60 cm 5V op pin7
etc
PS 1
De waarde terug gegeven door pulseIn is geen float !
PS2
Dit is hoe je code eruit moet zien op het orum\
/*
HC-SR04 Basic Demonstration
HC-SR04-Basic-Demo.ino
Demonstrates functions of HC-SR04 Ultrasonic Range Finder
Displays results on Serial Monitor
DroneBot Workshop 2017
http://dronebotworkshop.com
*/
// This uses Serial Monitor to display Range Finder distance readings
// Hook up HC-SR04 with Trig to Arduino Pin 10, Echo to Arduino pin 13
#define trigPin 10
#define echoPin 13
float duration, distance;
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
// Write a pulse to the HC-SR04 Trigger Pin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Measure the response from the HC-SR04 Echo Pin
duration = pulseIn(echoPin, HIGH);
// Determine distance from duration
// Use 343 metres per second as speed of sound
distance = (duration / 2) * 0.0343;
// Send results to Serial Monitor
Serial.print("Distance = ");
if (distance >= 400 || distance <= 2) {
Serial.println("Out of range");
}
else {
Serial.print(distance);
Serial.println(" cm");
delay(100);
}
delay(100);
}
Ik zou in die else eens wat if statements bouwen die een afstand controleren (bv tussen 2 cm en 20 cm) en vervolgens een digitalWrite(xxx, HIGH) doen op een bepaalde pin xxx.
Aha oke. maar de bedoeling is gewoon dat als ik een waarde meet van 20 tot 40cm met de ultrasonisch sensor meet dat ik bijvoorbeeld op een willekeurige pin een 5 volt stroom krijg ik dan weer kan door schakelen
gebruik andere pinnen voor je sensor, dan komt pin 13 vrij en dat is een led dus digitaal.
dan met een if (distance >5 && distance < 100) bijvoorbeeld zet je digitaloutput (13,HIGH) en als dat niet is dus met else zet je de led ook weer uit. zie je eigen voorbeeld (oke dat is een stukje uit eenvoorbeeld dus even lezen wat er staat)