eerste projectje poging tot kleiner/netter schrijven

Toon hier Uw afgeronde projecten aan anderen.
Berichten: 1
Geregistreerd: 21 Okt 2017, 17:57

eerste projectje poging tot kleiner/netter schrijven

Berichtdoor Kiki.Kate » 21 Okt 2017, 18:03

Hoi Hoi,

Dit is nu de eerste keer dat ik met arduino iets doe.
Ik vind m'n code er alleen wat onoverzichtelijk uitzien en nu heb ik geprobeerd om dit met een for loop te verbeteren. maar dit wilde mij niet lukken.
Heeft iemand misschien een idee hoe ik dit kan aanpakken? :? :?

Dit is de code die ik gebruik:

#include <Servo.h>

int trigPin = 13;
int echoPin = 12;
int led = 11 ;
int led2 = 10;
int led3 = 9;
int led4 = 8;
int led5 = 7;

int servo = 0;
int val;

Servo myservo;

void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(led, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
myservo.attach(3);
myservo.write(0);
}

void loop() {
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(20);
digitalWrite(trigPin, HIGH);
delayMicroseconds(100);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;

val = analogRead(servo);
val = map(val, 0, 1023, 0, 180);

if (distance <= 50) {
digitalWrite(led, HIGH);
myservo.write(36);
}
else {
digitalWrite(led,LOW);
}
if (distance < 40) {
digitalWrite(led2, HIGH);
myservo.write(72);
}
else {
digitalWrite(led2, LOW);
}
if (distance < 30) {
digitalWrite(led3, HIGH);
myservo.write(108);
}
else {
digitalWrite(led3, LOW);
}
if (distance < 20) {
digitalWrite(led4, HIGH);
myservo.write(144);
}
else {
digitalWrite(led4,LOW);
}
if (distance < 10) {
digitalWrite(led5, HIGH);
myservo.write(180);
}
else {
digitalWrite(led5,LOW);
}
if (distance > 50 || distance <= 0){
Serial.println("Buiten berijk");
}
else {
Serial.print(distance);
Serial.println(" cm");
}

delay(500);
}

Advertisement

Gebruikers-avatar
Berichten: 1768
Geregistreerd: 06 Aug 2016, 01:03

Re: eerste projectje poging tot kleiner/netter schrijven

Berichtdoor Koepel » 21 Okt 2017, 20:03

Hallo, welkom op dit forum.

Wil je één led aanzetten die de afstand aangeeft, of vanaf de eerste led tot aan de juiste led ?
Zou de eerste led ook bij een afstand van 0 tot 10 mogen horen ? Dus dan zit de eerste led op pin 7.

Waarom lees je met een analoge poort het servo signaal ? Heb je zo'n super fancy feedback servo van Adafruit ?
Een analog pin kun je 'A0' noemen, dat voorkomt verwarring met de digitale pin '0'.
cpp code
const int servoFeedbackPin = A0;


En ook nog de pin voor het servo signaal:
cpp code
const int servoPin = 3;


Je zou de pin-nummers en de afstanden in een array kunnen plaatsen. Dan kun je de afstanden later eenvoudig wijzigen.

cpp code
#define NUMBER_OF_LEDS 5

const int ledPin[NUMBER_OF_LEDS] = {7, 8, 9, 10, 11};
const int dist[NUMBER_OF_LEDS] = { 10, 20, 30, 40, 50};


Die 'const' is niet echt nodig. Het geeft aan de compiler door dat het constante getallen zijn, die niet meer wijzigen.

Op die manier kun je al meteen een for-loop gebruiken om de pinMode te zetten:
cpp code
for( int i=0; i<NUMBER_OF_LEDS; i++)
{
pinMode( ledPin[i], OUTPUT);
}


Vervolgens zijn er een stuk of vijf goede oplossingen.
Ik kies er voor om stuk voor stuk de leds af te gaan, en dan kijken of die led aan of uit moet.

cpp code
for( int i=0; i<NUMBER_OF_LEDS; i++)
{
if( distance < dist[i])
{
digitalWrite( pinLed[i], HIGH);
}
else
{
digitalWrite( pinLed[i], LOW);
}
}

Berichten: 2389
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: eerste projectje poging tot kleiner/netter schrijven

Berichtdoor shooter » 24 Okt 2017, 14:14

er is wel een probleem met je software want stel dat de distance 28 is als voorbeeld dan gaat de servo eerst naar 36 dan direct door naar 72 en dan naar 108 dan 0.5 seconde niks doen en dan weer opnieuw,
je moet onderscheid maken in de posities en alleen die positie doen die nodig is, dat kan betekenen dat je wel een hoop leds uit moet zetten, maar ach.
je kunt dit ook oplossen met Case (en break) dat maakt je programma kleiner en beter leesbaar.
de onderste oplossing van koepel voor de ledjes is simpel en goed.
paul deelen
shooter@home.nl

Terug naar Afgeronde projecten

Wie is er online?

Gebruikers in dit forum: Bing [Bot] en 1 gast