servo verder dan "val" bewegen
19 berichten
• Pagina 2 van 2 • 1, 2
Re: servo verder dan "val" bewegen
kan het zelf niet testen, maar zoals shooter reeds aangaf plaats haakjes rond val+pos<180 dit wordt dan (val+pos)<180 en doe hetzelfde met die andere if.
Advertisement
Re: servo verder dan "val" bewegen
Helaas, ook na het aanpassen van de code werkt het nog niet goed.
De servo verplaatst zich na het het drukken op de knop op pin 9.
Maar bij loslaten draait de servo weer terug naar de waarde val van de potmeter.
Druk ik op de knop op pin 8 dan gebeurt er helemaal niets...
code:
De servo verplaatst zich na het het drukken op de knop op pin 9.
Maar bij loslaten draait de servo weer terug naar de waarde val van de potmeter.
Druk ik op de knop op pin 8 dan gebeurt er helemaal niets...
code:
- Code: Alles selecteren
#include <Servo.h>
Servo myservo;
int potpin = 3; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
#define leftPin 8
#define rightPin 9
int pos = 90;
int delayPeriod = 10; // increasing this slows down the servo movement
void setup()
{
myservo.attach(4); // attaches the servo on pin 4 to the servo object
myservo.write(pos); // center the servo
pinMode(leftPin, LOW);
pinMode(rightPin, LOW);
}
void loop()
{
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(delayPeriod);
if ((digitalRead(leftPin) == HIGH)&& ((val+pos) < 180))
{
++pos;
myservo.write(val+pos);
}
else if ((digitalRead(rightPin) == HIGH) && ((val+pos) > 0))
{
--pos;
myservo.write(val+pos);
delay(delayPeriod);
}
}
Re: servo verder dan "val" bewegen
haal die else eens weg want daar staan geen {} bij.
en ik mis een delay bij leftpin
en erboven staat nog een myservowrite teveel.
er mag maar een write in het hele prog staan.
en ik mis een delay bij leftpin
en erboven staat nog een myservowrite teveel.
er mag maar een write in het hele prog staan.
paul deelen
shooter@home.nl
shooter@home.nl
Re: servo verder dan "val" bewegen
Met wat hulp van het Amerikaanse Arduino platform is het opgelost:
Ik heb de setup etc even weg gelaten, en alleen de loop geplaatst maar,
zo werkt het:
hiermee kun je de servo met de potmeter bewegen, maar met de drukknoppen beweegt de servo ook vanaf het punt waar je met de potmeter bent gestopt, en vanaf het punt waar je met de knop bent gestopt komt de potmeter weer in.
Voor mijn project werkt dit, het is geslaagd !!!!
Ik heb de setup etc even weg gelaten, en alleen de loop geplaatst maar,
zo werkt het:
- Code: Alles selecteren
void loop()
{
if ((digitalRead(leftPin) == HIGH)
{
++pos;
}
else if ((digitalRead(rightPin) == HIGH)
{
--pos;
}
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
int servoMove = val + pos;
if (servoMove > 180) {
servoMove = 180;
}
if (servoMove < 0) {
servoMove = 0;
}
myservo.write(servoMove); // sets the servo position according to the scaled value
delay(delayPeriod);
}
hiermee kun je de servo met de potmeter bewegen, maar met de drukknoppen beweegt de servo ook vanaf het punt waar je met de potmeter bent gestopt, en vanaf het punt waar je met de knop bent gestopt komt de potmeter weer in.
Voor mijn project werkt dit, het is geslaagd !!!!
Re: servo verder dan "val" bewegen
Helaas, nog net niet helemaal opgelost....
Het werkt, dat wel.
Maar, en er is heel vaak een maar:
Ik heb in de code de maximale servo standen aangegeven, 35 en 140 graden, dus niet zoals in de laatste posting van mij 0 tot 180 graden.
Dit gaat ook goed, de servo stopt op het juiste moment.
Waarom dan toch nog een probleem, wel het volgende kwam boven water:
Bij het inhouden van de knop links of rechtsom draaien stopt de servo op de aangeven positie, maar als je de knop dan IN blijft vasthouden, zeg 5 seconden nadat de servo de eindpositie (35 of 140 graden) heeft bereikt dan duurt het ook weer circa 5 seconden voordat de servo weer gaat bewegen.
En dat is een minder fijne bijkomstigheid.
dus kort gezegd: knop links IN, servo draait naar positie links, stopt op 35 graden, ik houd de knop nog 5 seconden langer vast.
Nu druk ik de knop Rechts in, het duurt circa 5 seconden voordat de servo gaat bewegen en dan beweegt deze naar het andere software matige eindpunt, 140 graden.
Ik houd de knop daarna nog 10 seconden langer in, bij het linksom bewegen moet ik dan weer circa 10 seconden wachten en dan gaat de servo weer bewegen.
Het is net alsof de Arduino intern "door telt" als de knoppen langer worden ingedrukt dan nodig is.
Enig idee hoe dit eventueel aan te pakken is ?
Het werkt, dat wel.
Maar, en er is heel vaak een maar:
Ik heb in de code de maximale servo standen aangegeven, 35 en 140 graden, dus niet zoals in de laatste posting van mij 0 tot 180 graden.
Dit gaat ook goed, de servo stopt op het juiste moment.
Waarom dan toch nog een probleem, wel het volgende kwam boven water:
Bij het inhouden van de knop links of rechtsom draaien stopt de servo op de aangeven positie, maar als je de knop dan IN blijft vasthouden, zeg 5 seconden nadat de servo de eindpositie (35 of 140 graden) heeft bereikt dan duurt het ook weer circa 5 seconden voordat de servo weer gaat bewegen.
En dat is een minder fijne bijkomstigheid.
dus kort gezegd: knop links IN, servo draait naar positie links, stopt op 35 graden, ik houd de knop nog 5 seconden langer vast.
Nu druk ik de knop Rechts in, het duurt circa 5 seconden voordat de servo gaat bewegen en dan beweegt deze naar het andere software matige eindpunt, 140 graden.
Ik houd de knop daarna nog 10 seconden langer in, bij het linksom bewegen moet ik dan weer circa 10 seconden wachten en dan gaat de servo weer bewegen.
Het is net alsof de Arduino intern "door telt" als de knoppen langer worden ingedrukt dan nodig is.
Enig idee hoe dit eventueel aan te pakken is ?
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: servo verder dan "val" bewegen
klopt.pos krijgt een hele grote waarde die je eigenlijk gelijk op nul moet zetten als je buitenhet bereik ben.
Re: servo verder dan "val" bewegen
Oké Nico, dat is weer een Weetje er bij.
Maar dan de volgende vraag, hoe verwerk je dit in de code?
Maar dan de volgende vraag, hoe verwerk je dit in de code?
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: servo verder dan "val" bewegen
John,
Dit
cpp code
Wordt:
cpp code
Wat je doet is dat op het moment dat je buiten het bereik dreigt te komen van de servo, die knoppen eigenlijk geen functie meer hebben. Dus zet je ze iedere keer op het verschil tot het uiterste. Binnen het gebied blijf je gewoon goed gaan.
Dit
cpp code
if (servoMove > 180) {
servoMove = 180;
}
if (servoMove < 0) {
servoMove = 0;
}
Wordt:
cpp code
if (servoMove > 180) {
servoMove = 180;
pos = 180 - val; // mocht je bijv op 178 zitten dan wordt pos 2
}
if (servoMove < 0) {
servoMove = 0;
pos = 0 - val;
}
Wat je doet is dat op het moment dat je buiten het bereik dreigt te komen van de servo, die knoppen eigenlijk geen functie meer hebben. Dus zet je ze iedere keer op het verschil tot het uiterste. Binnen het gebied blijf je gewoon goed gaan.
19 berichten
• Pagina 2 van 2 • 1, 2
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 16 gasten