eerste projectje poging tot kleiner/netter schrijven
3 berichten
• Pagina 1 van 1
eerste projectje poging tot kleiner/netter schrijven
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);
}
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
Re: eerste projectje poging tot kleiner/netter schrijven
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
En ook nog de pin voor het servo signaal:
cpp code
Je zou de pin-nummers en de afstanden in een array kunnen plaatsen. Dan kun je de afstanden later eenvoudig wijzigen.
cpp code
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
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
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);
}
}
Re: eerste projectje poging tot kleiner/netter schrijven
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.
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
shooter@home.nl
3 berichten
• Pagina 1 van 1
Terug naar Afgeronde projecten
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 14 gasten