servo verder dan "val" bewegen

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 37
Geregistreerd: 16 Jun 2016, 21:23

servo verder dan "val" bewegen

Berichtdoor john33 » 27 Jul 2016, 21:24

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.

Advertisement

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

Re: servo verder dan "val" bewegen

Berichtdoor shooter » 28 Jul 2016, 10:53

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)
paul deelen
shooter@home.nl

Berichten: 37
Geregistreerd: 16 Jun 2016, 21:23

Re: servo verder dan "val" bewegen

Berichtdoor john33 » 28 Jul 2016, 19:19

Dank voor het antwoord,

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 ?

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: servo verder dan "val" bewegen

Berichtdoor Gij Kieken » 28 Jul 2016, 19:46

#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);
}
}

Berichten: 37
Geregistreerd: 16 Jun 2016, 21:23

Re: servo verder dan "val" bewegen

Berichtdoor john33 » 28 Jul 2016, 20:13

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 !!!

Berichten: 37
Geregistreerd: 16 Jun 2016, 21:23

Re: servo verder dan "val" bewegen

Berichtdoor john33 » 04 Aug 2016, 15:27

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:
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...

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

Re: servo verder dan "val" bewegen

Berichtdoor shooter » 04 Aug 2016, 16:52

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.
paul deelen
shooter@home.nl

Berichten: 37
Geregistreerd: 16 Jun 2016, 21:23

Re: servo verder dan "val" bewegen

Berichtdoor john33 » 04 Aug 2016, 17:57

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.

Gebruikers-avatar
Berichten: 631
Geregistreerd: 15 Nov 2015, 11:54

Re: servo verder dan "val" bewegen

Berichtdoor Gij Kieken » 04 Aug 2016, 19:01

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.

Berichten: 37
Geregistreerd: 16 Jun 2016, 21:23

Re: servo verder dan "val" bewegen

Berichtdoor john33 » 04 Aug 2016, 19:19

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.

Volgende

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 39 gasten