Servo regelen met reed schakelaar

Arduino specifieke Software
Berichten: 3065
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Servo regelen met reed schakelaar

Berichtdoor shooter » 14 Mrt 2020, 10:39

je moet onthouden wat de oude stand is en dan dus met je for loop naar een nieuwe stand gaan.
paul deelen
shooter@home.nl

Advertisement

Berichten: 17
Geregistreerd: 24 Jan 2020, 22:48

Re: Servo regelen met reed schakelaar

Berichtdoor PeterC » 14 Mrt 2020, 13:00

Shooter, bedankt voor je reactie, maar zou je mij een duwtje in de goede richting willen geven. Ik dacht met:

" if (RightbuttonState == LOW) {
for (pos = 70; pos >= 15; pos -= 1) //hier verspringt de servo iets en
// gaat dan naar eindstand(15).
{
myservo.write(pos)
delay(70)"

naar zijn laatste stand ging maar blijkbaar is mijn gedachte dus verkeerd. Het lijkt erop dat nu de stand van de vorige lus wordt gekozen.
Dit is de 2e lus, de eerste lus gaat wel helemaal goed.

PeterC

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

Re: Servo regelen met reed schakelaar

Berichtdoor shooter » 14 Mrt 2020, 15:50

Ik zie ook de bomen niet meer, maar dat komt vooral door de grote hoeveelheid if statements, en dan alle else er ook nog tussen.
Je hebt een aantal statussen zoals schakelaar standen en bewegingen die geef je allemaal een status mee

zoals knop1gedrukt is status 10
beweging van links naar rechts is status 30
etc.
dat is een heel ander programma weliswaar, maar dan leer je programmeren.
als dan een beweging klaar is dan is de situatie ook anders en dus een ander cijfer.
dat is een manier.
ook al die delays veranderen met een timer zodat de loop heel snel alles scant en als er dan een tijd gedaan is even naar een andere status wordt gesprongen.
de servo standen benoemen dus 50 is midden etc dat is handig want dan hoef je ze niet meer te zoeken wat welke is.

en jouw begin positie is schijnbaar niet juist want verspringen is van 70 naar ik vermoed 60 maar dat kan ik niet goed vinden
en nee het is 1 grote lus.
zet je programma eens netjes in de IDE en zet dan voor elke else en { een enter
en dan een Ctrl T
dan staat de structuur weer goed zichtbaar en die is compleet anders als 3 lussen.
paul deelen
shooter@home.nl

Berichten: 17
Geregistreerd: 24 Jan 2020, 22:48

Re: Servo regelen met reed schakelaar

Berichtdoor PeterC » 20 Mrt 2020, 21:45

Een wat late reactie maar de computer had even wat problemen met opstarten.
Als ik jouw reactie goed begrijp zou ik met een soort van case programma moeten gaan werken of heb ik dat verkeerd. Het is in ieder geval de bedoeling om met een standen schakelaar te gaan werken, had ik vergeten erbij te vermelden. Ik heb wel het programma netter in de IDE gezet, hopelijk is het nu wat duidelijker. En inderdaad het verspringen is naar de eerste stand bij het terug gaan. Kun/wil je mij toch nog verder helpen?
Het is mij nu duidelijk dat het 1 grote lus is.

PeterC

Code: Alles selecteren


#include <Servo.h>

const int LeftbuttonPin = 2;
const int RightbuttonPin = 4;

int KeuzePin1 = 5;
int KeuzePin2 = 6;
int KeuzePin3 = 7;
int KeuzePin1State = 0;
int KeuzePin2State = 0;
int KeuzePin3State = 0;

int LeftbuttonState = 0;
int RightbuttonState = 0;
int pos = 15; // Staat normaal op 0, dit geeft een rustiger start.

Servo myservo;

void setup() {
  Serial.begin(9600);

  myservo.attach(9);
  pinMode(KeuzePin1, INPUT);
  pinMode(KeuzePin2, INPUT);
  pinMode(KeuzePin3, INPUT);

  pinMode(LeftbuttonPin, INPUT_PULLUP);
  pinMode(RightbuttonPin, INPUT_PULLUP);
  myservo.write(pos); // Neemt de int pos positie aan.
}

void loop() {

  LeftbuttonState = digitalRead(LeftbuttonPin);
  //Serial.println(LeftbuttonState);
  RightbuttonState = digitalRead(RightbuttonPin);
  //Serial.println(RightbuttonState);
  KeuzePin1State = digitalRead(KeuzePin1);
  //Serial.println(KeuzePin1State);
  KeuzePin2State = digitalRead(KeuzePin2);
  //Serial.println(KeuzePin2State);
  KeuzePin3State = digitalRead(KeuzePin3);
  //Serial.println(KeuzePin3State);

  if ((KeuzePin1State == HIGH) && (LeftbuttonState == LOW))
  {
    for (pos = 15; pos <= 60; pos += 1) // is gelijk aan de int pos bij setup
    {
      myservo.write(pos);
      delay(100);
    }
  }
  else
  {
    if (RightbuttonState == LOW)  {
      for (pos = 60; pos >= 15; pos -= 1) //Dit gaat goed.
      {
        myservo.write(pos);
        delay(70);
      }
    }
    else
    {
      if ((KeuzePin2State == HIGH) && (LeftbuttonState == LOW)) // dit gaat ook goed
      {
        for (pos = 15; pos <= 70; pos += 1)
        {
          myservo.write(pos);
          delay(100);
        }
      }
      else
      {

        if (RightbuttonState == LOW)  {
          for (pos = 70; pos >= 15; pos -= 1) //hier verspringt de servo iets en
            // gaat dan naar eindstand(15).
          {
            myservo.write(pos);
            delay(70);
          }
        }
        else
        {

          if (KeuzePin3State == HIGH and LeftbuttonState == LOW)
            //if (LeftbuttonState == LOW)
          {
            for (pos = 15; pos <= 51; pos += 1)
            {
              myservo.write(pos);
              delay(100);
            }
          }
          else
          {

            if (RightbuttonState == LOW) // hier verspringt de servo iets en
              // gaat dan naar eindstand(15).
            {
              for (pos = 51; pos >= 15; pos -= 1)
              {
                myservo.write(pos);
                delay(70);
              }
            }
          }
        }
      }
    }
  }
}

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

Re: Servo regelen met reed schakelaar

Berichtdoor shooter » 21 Mrt 2020, 17:13

haal eerstal die ifs uit elkaar en geef elke situatie een status
paul deelen
shooter@home.nl

Vorige

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 2 gasten