servo verder dan "val" bewegen
19 berichten
• Pagina 1 van 2 • 1, 2
servo verder dan "val" bewegen
Geachte Arduino forum,
Ik zit met een klein probleem.
Ik heb een servo die ik met een potmeter kan bewegen, maar ik wil graag de servo verder bewegen dan de actuele stand van de potmeter met 2 drukknoppen.
dus dit:
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
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(15); // waits for the servo to get there
}
plus dit:
#include <Servo.h>
Servo myservo;
#define leftPin 2
#define rightPin 3
int pos = 90;
int delayPeriod = 50; // increasing this slows down the servo movement
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
myservo.write(pos); // center the servo
pinMode(leftPin, HIGH); // turn on pullup resistors
pinMode(rightPin, HIGH);
}
void loop()
{
if(digitalRead(leftPin) == LOW)
{
// in steps of 1 degree
if( pos < 180)
++pos;
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(10);
}
if(digitalRead(rightPin) == LOW)
{
if( pos > 0)
--pos;
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(10);
}
}
Waarbij de waarde VAL dus de startwaarde is.
De servo moet blijven staan als de knop wordt losgelaten, en weer verder of terug de andere kant op gaan bij de bediening van de knoppen.
Als de potmeter wordt verdraait moet de servo overeenkomstig mee draaien vanaf de positie waarin deze met de knoppen is gezet.
Ik zit met een klein probleem.
Ik heb een servo die ik met een potmeter kan bewegen, maar ik wil graag de servo verder bewegen dan de actuele stand van de potmeter met 2 drukknoppen.
dus dit:
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
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(15); // waits for the servo to get there
}
plus dit:
#include <Servo.h>
Servo myservo;
#define leftPin 2
#define rightPin 3
int pos = 90;
int delayPeriod = 50; // increasing this slows down the servo movement
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
myservo.write(pos); // center the servo
pinMode(leftPin, HIGH); // turn on pullup resistors
pinMode(rightPin, HIGH);
}
void loop()
{
if(digitalRead(leftPin) == LOW)
{
// in steps of 1 degree
if( pos < 180)
++pos;
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(10);
}
if(digitalRead(rightPin) == LOW)
{
if( pos > 0)
--pos;
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(10);
}
}
Waarbij de waarde VAL dus de startwaarde is.
De servo moet blijven staan als de knop wordt losgelaten, en weer verder of terug de andere kant op gaan bij de bediening van de knoppen.
Als de potmeter wordt verdraait moet de servo overeenkomstig mee draaien vanaf de positie waarin deze met de knoppen is gezet.
Advertisement
Re: servo verder dan "val" bewegen
dus je hebt een val en een pos
tel ze gewoon bij elkaar.
en natuurlijk kun je maar 1 setup en 1 loop in je programma hebben.
met delay(10) betekent het wel 100 stappen per seconde dus erg snel.
dus if leftpin LOW && val+pos <180 dan pos++
myservo.write(val+pos)
tel ze gewoon bij elkaar.
en natuurlijk kun je maar 1 setup en 1 loop in je programma hebben.
met delay(10) betekent het wel 100 stappen per seconde dus erg snel.
dus if leftpin LOW && val+pos <180 dan pos++
myservo.write(val+pos)
paul deelen
shooter@home.nl
shooter@home.nl
Re: servo verder dan "val" bewegen
Dank voor het antwoord,
ik heb geprobeerd de aangedragen code lijnen in mijn code te verwerken maar ik doe iets niet goed:
Maar ik doe iets verkeerd...
ik krijg een:
exit status 1
expected identifier before '(' token
dit is in de regel waar de && tekens staan.
Wat doe ik verkeerd ?
ik heb geprobeerd de aangedragen code lijnen in mijn code te verwerken maar ik doe iets niet goed:
- Code: Alles selecteren
#include <Servo.h>
Servo myservo;
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
#define leftPin 2
#define rightPin 3
int pos = 90;
int delayPeriod = 50; // increasing this slows down the servo movement
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 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
delayPeriod();
if (digitalRead(leftPin) == HIGH)
{
&& (val+pos < 180)
++pos;
myservo.write(val+pos);
if (digitalRead(rightPin HIGH)
{
&& (val+pos > 0)
--pos;
myservo.write(val+pos);
delayPeriod();
}
}
Maar ik doe iets verkeerd...
ik krijg een:
exit status 1
expected identifier before '(' token
dit is in de regel waar de && tekens staan.
Wat doe ik verkeerd ?
- Gij Kieken
- Berichten: 631
- Geregistreerd: 15 Nov 2015, 11:54
Re: servo verder dan "val" bewegen
#include <Servo.h>
Servo myservo;
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
#define leftPin 2
#define rightPin 3
int pos = 90;
int delayPeriod = 50; // increasing this slows down the servo movement
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 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);
}
}
Servo myservo;
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
#define leftPin 2
#define rightPin 3
int pos = 90;
int delayPeriod = 50; // increasing this slows down the servo movement
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 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
aha, op die manier.
Ik heb nog veel te leren maar hiermee ga ik morgen testen.
Bestaat er een soort Arduino handboek waarbij de code in Jip en Janneke taal wordt uitgelegd ?
Hier was ik zelf nooit achter gekomen, maar dit is wel weer een leerzaam moment.
Weer een stapje verder, hartelijk dank !!!
Ik heb nog veel te leren maar hiermee ga ik morgen testen.
Bestaat er een soort Arduino handboek waarbij de code in Jip en Janneke taal wordt uitgelegd ?
Hier was ik zelf nooit achter gekomen, maar dit is wel weer een leerzaam moment.
Weer een stapje verder, hartelijk dank !!!
Re: servo verder dan "val" bewegen
Helaas helaas, de sketch werk niet goed.
ik heb in Arduino geschoten en de servo en knoppen aangekoppeld.
De servo beweegt keurig met de potmeter mee, maar als ik 1 van de 2 knoppen indruk begint de servo enorm te jutteren, de andere knop doet helemaal niets.
Ergens zit er dus nog een fout...
deze code heb ik tot nu toe ook geschreven, maar ook daar werken de stuur knoppen niet:
Ik loop tegen het einde van mijn kennis aan, en zit op hete kolen..... volgende week MOET het werken.
Help aub...
ik heb in Arduino geschoten en de servo en knoppen aangekoppeld.
De servo beweegt keurig met de potmeter mee, maar als ik 1 van de 2 knoppen indruk begint de servo enorm te jutteren, de andere knop doet helemaal niets.
Ergens zit er dus nog een fout...
deze code heb ik tot nu toe ook geschreven, maar ook daar werken de stuur knoppen niet:
- Code: Alles selecteren
#include <VarSpeedServo.h>
VarSpeedServo stuur_truck; //servo om truck te laten sturen
VarSpeedServo truck_sturen; //servo om voorwielen mee te laten sturen
VarSpeedServo stuur_trailer; //servo om trailer wielen te laten sturen
VarSpeedServo trailer_op_neer; //servo om trailer omhoog/omlaag te laten gaan
VarSpeedServo trailer_as; //servo om 1 as omhoog/omlaag te laten bewegen
VarSpeedServo ramps; //servo om ramps te laten bewegen
VarSpeedServo Actuator; //servo actuator
VarSpeedServo sensor2; //servo die 2de sensor bediend
int potpin1 = 0; //leest waarde van de potmeter aangesloten op analog pin 0, stand van truck tov trailer
int val1; //variabele om de waarde van de analoge pin te meten.
#define leftPin 22 //stuur trailer: signaal op pin 22 voor links
#define rightPin 23 //stuur trailer: signaal op pin 23 voor rechts
int pos1 = val1; //waarde van val1 is uitgangspunt om servo handmatig te bedienen
int delayPeriod1 = 20; // verhogen van deze waarde laat de servo langzamer bewegen
#define lleftPin 24 //trailer op neer: signaal op pin 24 voor omhoog
#define rrightPin 25 //trailer op neer: signaal op pin 25 voor omlaag
int pos2 = 90; // initiele positie voor servo is de middenstand
int delayPeriod2 = 10; // verhogen van deze waarde laat de servo langzamer bewegen
#define llleftPin 26 //trailer as: signaal op pin 26 voor omhoog
int pos3 = 90; // initiele positie voor servo is de middenstand
int delayPeriod3 = 60; // verhogen van deze waarde laat de servo langzamer bewegen
#define lllleftPin 28 //Ramps signaal op pin 10 voor omhoog
#define rrrrightPin 29 //Ramps trailer signaal op pin 11 voor omlaag
int pos4 = 90; //initiele positie voor servo is de LINKSOM, RAMPS OMHOOG
int delayPeriod4 = 10; //verhogen van deze waarde laat de servo langzamer bewegen
void setup()
{
stuur_truck.attach(3); //plaats de servo op pin 3 deze servo laat de truck rond de kingpin draaien
stuur_trailer.attach(4); //plaats de servo op pin 4 deze servo stuurt de trailer wielen
trailer_op_neer.attach(5); //plaats de servo op pin 5 deze servo laat de trailer omhoog-omlaag gaan
trailer_as.attach(6); //plaats de servo op pin 6 deze servo laat de 1ste as omhoog/omlaag gaan
ramps.attach(7); //plaats de servo op pin 7 deze servo schakelt de motor in-om om ramps omhoog omlaag te laten gaan
truck_sturen.attach(8); //plaats de servo op pin 8 deze servo bediend de voorwielen van de model truck
Actuator.attach(9); //plaats de servo op pin 9 deze servo is de "locking" voor de trailer bij het heffen of dalen van de trailer
sensor2.attach(10); //plaats de servo op pin 10 deze servo bediend de trailer stuur sensor positie
}
void loop()
{
// programma om servos te laten bewegen:
val1 = analogRead(potpin1); // leest de waarde van de potmeter (waarde tussen 0 en 1023)
val1 = map(val1, 0, 1023, 45, 120); // zet om in waarde voor servo (verstelweg tussen 45 en 120 graden)
stuur_truck.slowmove(val1, 10); // plaatst de servo naar de positie naarde de geschaalde waarde
truck_sturen.slowmove(val1, 10); //laat de voorwielen meesturen
sensor2.slowmove(val1, 10); //laat de trailer positie sensor mee draaien
//Trailerassen laten sturen incl handbediening:
if ((digitalRead(leftPin) == HIGH)&&(val1 + pos1 < 180)) //
{
++pos1; // zolang de pin HOOG is laat de servo bewegen
stuur_trailer.write(val1 + pos1); // laat de servo naar de variabele 'pos' gaan
}
else if ((digitalRead(rightPin) == HIGH)&&(val1 +pos1 > 0))
{
--pos1; // zolang de pin HOOG is laat de servo bewegen
stuur_trailer.write(val1+pos1); // laat de servo naar de variabele 'pos' gaan
delay(delayPeriod1); // kijk naar de "delay" waarde = snelheid van de servo
}
//Rijhoogte van trailer aanapassen
if (digitalRead (lleftPin) == HIGH) { // in stapjes van 1 graad bewegen
if ( pos2 > 45) --pos2; // zolang de pin HOOG is laat de servo bewegen, rij hoogte wordt naar boven aangepast
trailer_op_neer.write(pos2); // laat de servo naar de variabele 'pos' gaan
Actuator.write(pos2);
delay(delayPeriod2); // kijk naar de "delay" waarde = snelheid van de servo
}
if (digitalRead (rrightPin) == HIGH) { // in stapjes van 1 graad bewegen
if ( pos2 < 135) ++pos2; // zolang de pin HOOG is laat de servo bewegen, rij hoogte wordt naar beneden aangepast
trailer_op_neer.write(pos2); // laat de servo naar de variabele 'pos' gaan
Actuator.write(pos2);
delay(delayPeriod2); // kijk naar de "delay" waarde = snelheid van de servo
}
//trailer as omhoog bewegen, standaard is de as in de LAAG positie
if (digitalRead (llleftPin) == HIGH) { // in stapjes van 1 graad bewegen
if ( pos3 > 45) --pos3; // zolang de pin HOOG is laat de servo bewegen
trailer_as.write(pos3); // laat de servo naar de variabele 'pos' gaan
delay(delayPeriod3); // kijk naar de "delay" waarde = snelheid van de servo
}
if (digitalRead (llleftPin) == LOW) { // in stapjes van 1 graad bewegen
if ( pos3 < 135) ++pos3; // zolang de pin HOOG is laat de servo bewegen
trailer_as.write(pos3); // laat de servo naar de variabele 'pos' gaan
delay(delayPeriod3); // kijk naar de "delay" waarde = snelheid van de servo
}
//OPRIJPLATEN BEDIENEN, SERVO DRUK EEN WISSELSCHAKELAAR OM, EEN APARTE MOTOR GAAN AN LINKSOM, OF RECHTSOM DRAAIEN.
if (digitalRead (lllleftPin) == HIGH)
{ // in stapjes van 1 graad bewegen
if ( pos4 > 45)
--pos4; // zoalng de pin HOOG is laat de servo bewegen
ramps.write(pos4); // laat de servo naar de variabele 'pos' gaan
delay(delayPeriod4); // kijk naar de "delay" waarde = snelheid van de servo
}
if (digitalRead(rrrrightPin) == HIGH) { // in stapjes van 1 graad bewegen
if (pos4 < 135) ++pos4; // zolang de pin HOOG is laat de servo bewegen
ramps.write(pos4); // laat de servo naar de variabele 'pos' gaan
delay(delayPeriod4); // kijk naar de "delay" waarde = snelheid van de servo
}
}
Ik loop tegen het einde van mijn kennis aan, en zit op hete kolen..... volgende week MOET het werken.
Help aub...
Re: servo verder dan "val" bewegen
val1+pos <180 mag niet daar moeten haakjes omheen dus ((val+pos) < 180)
en ik mis daar een delay
verder mis ik nog veel {} bij de IF
en doe een keer CTRL T dat maakt het allemaal leesbaar.
en nogmaals gebruik een variabele voor 1 waarde, dan kun je zien wat het is, dus valpot en valmap bijvoorbeeld.
en ik mis daar een delay
verder mis ik nog veel {} bij de IF
en doe een keer CTRL T dat maakt het allemaal leesbaar.
en nogmaals gebruik een variabele voor 1 waarde, dan kun je zien wat het is, dus valpot en valmap bijvoorbeeld.
paul deelen
shooter@home.nl
shooter@home.nl
Re: servo verder dan "val" bewegen
Oke,
even een stap terug, naar de code die gij kieken gaf:
deze werk al niet goed, maar daar zitten dus nog wat haken en ogen aan blijkbaar.
De sketch komt goed door de compiler heen maar werkt niet zoals het moet.
De arduino valt ook telkens uit bij bediening van 1 van de knoppen, de micro servo beweegt een heel klein beetje en dan valt arduino even uit.
Ik zie alleen nog niet in wat er precies fout zit....
Met name de {} die eventueel zouden missen.
even een stap terug, naar de code die gij kieken gaf:
- Code: Alles selecteren
#include <Servo.h>
Servo myservo;
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
#define leftPin 2
#define rightPin 3
int pos = 90;
int delayPeriod = 50; // increasing this slows down the servo movement
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 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);
}
}
deze werk al niet goed, maar daar zitten dus nog wat haken en ogen aan blijkbaar.
De sketch komt goed door de compiler heen maar werkt niet zoals het moet.
De arduino valt ook telkens uit bij bediening van 1 van de knoppen, de micro servo beweegt een heel klein beetje en dan valt arduino even uit.
Ik zie alleen nog niet in wat er precies fout zit....
Met name de {} die eventueel zouden missen.
- Gij Kieken
- Berichten: 631
- Geregistreerd: 15 Nov 2015, 11:54
Re: servo verder dan "val" bewegen
john33 schreef:Oke,
even een stap terug, naar de code die gij kieken gaf:
- Code: Alles selecteren
#include <Servo.h>
Servo myservo;
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
#define leftPin 2
#define rightPin 3
int pos = 90;
int delayPeriod = 50; // increasing this slows down the servo movement
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 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);
}
}
deze werk al niet goed, maar daar zitten dus nog wat haken en ogen aan blijkbaar.
De sketch komt goed door de compiler heen maar werkt niet zoals het moet.
De arduino valt ook telkens uit bij bediening van 1 van de knoppen, de micro servo beweegt een heel klein beetje en dan valt arduino even uit.
Ik zie alleen nog niet in wat er precies fout zit....
Met name de {} die eventueel zouden missen.
Naar de werking toe had ik niet echt gekeken omdat ik ook niet helemaal weet wat uw verwachtingen waren , wel naar het plaatsen van haakjes , == enz...
In uw geval wilde het niet compileren.
Re: servo verder dan "val" bewegen
Beste Gij Kieken,
in ieder geval al vast bedankt voor de hulp tot zo ver, maar inderdaad, het werkt nog niet zoals het moet.
En mijn kennis van Arduino programmeren staat nog in de kinderschoenen...
Maar goed, uitgangspunt is een servo gekoppeld aan een potmeter.
Maar de servo moet met 2 drukknoppen vanaf waarde val meer linksom of meer rechtsom worden gezet.
De servo moet na het loslaten van 1 van de knoppen op die positie blijven staan.
Als de potmeter wordt verdraaid, ofwel val veranderd moet de servo vanaf de laatste ingestelde positie van de knoppen weer bewegen.
Ik geloof er in dat val+pos een mogelijke oplossing is, maar mis de kennis om dit juist te programmeren.
Elke hulp is welkom.
in ieder geval al vast bedankt voor de hulp tot zo ver, maar inderdaad, het werkt nog niet zoals het moet.
En mijn kennis van Arduino programmeren staat nog in de kinderschoenen...
Maar goed, uitgangspunt is een servo gekoppeld aan een potmeter.
Maar de servo moet met 2 drukknoppen vanaf waarde val meer linksom of meer rechtsom worden gezet.
De servo moet na het loslaten van 1 van de knoppen op die positie blijven staan.
Als de potmeter wordt verdraaid, ofwel val veranderd moet de servo vanaf de laatste ingestelde positie van de knoppen weer bewegen.
Ik geloof er in dat val+pos een mogelijke oplossing is, maar mis de kennis om dit juist te programmeren.
Elke hulp is welkom.
19 berichten
• Pagina 1 van 2 • 1, 2
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 39 gasten