Servo regelen met reed schakelaar

Arduino specifieke Software
Berichten: 25
Geregistreerd: 24 Jan 2020, 22:48

Servo regelen met reed schakelaar

Berichtdoor PeterC » 25 Jan 2020, 14:48

Geachte lezers,

mijn naam is Peter ben 71 jaar en ik ben nieuw op dit forum. Ik had een programmaatje gemaakt om een servo aan te sturen middels een reed contact. Op voor mij onverklaarbare wijze kan ik het programma niet meer terug vinden op mijn computer. Ik moet n.l. de standen van de servo aan passen en het lukt mij niet om de Arduino uit te lezen. Ik weet echter ook niet meer hoe ik het indertijd gedaan heb, ong. 1 jaar geleden. Ik heb dus een nieuw programmaatje gemaakt, van internet geplukt, echter dit werkt maar voor de helft, alleen op het eerste gedeelte reageert de servo, op het tweede gedeelte niet. Het is de bedoeling dat de servo een potmeter van een geluidsinstallatie gaat bedienen om het geluid harder c.q. zachter te laten klinken. Ik kijk regelmatig op dit forum.(als gast). PeterC

[code]


#include <Servo.h>

const int LeftbuttonPin = 2;
const int RightbuttonPin = 3;

int LeftbuttonState = 0;
int RightbuttonState = 0;
int pos = 0;

Servo myservo;

void setup() {

myservo.attach(9);

pinMode(LeftbuttonPin, INPUT);
pinMode(RightbuttonPin, INPUT);

pinMode(LeftbuttonPin, INPUT_PULLUP);
pinMode(RightbuttonPin, INPUT_PULLUP);
}

void loop() {
LeftbuttonState = digitalRead(LeftbuttonPin);
RightbuttonState = digitalRead(RightbuttonPin);
if (LeftbuttonState == LOW) {

for (pos = 0; pos <= 150; pos += 1)
{
myservo.write(pos);
delay(15);
}
} else {
myservo.write(pos);

if (RightbuttonState == LOW) {
for (pos = 150; pos >= 0; pos -= 1)

myservo.write(pos);
delay(15);
}
}
}

Advertisement

Gebruikers-avatar
Berichten: 7
Geregistreerd: 02 Sep 2016, 20:17

Re: Servo regelen met reed schakelaar

Berichtdoor Adam69 » 25 Jan 2020, 23:51

Wellicht kan je onderstaande code gebruiken.
Ik heb de code wat aangepast, naar wat ik denk dat je bedoelde.

De poorten 2 en 3 heb ik aangepast naar 4 en 5, omdat pin 2 ook voor de seriële poort is, en dan niet altijd handig.

Code: Alles selecteren
#include <Servo.h>

const int LeftbuttonPin= 4;
const int RightbuttonPin= 5;
int LeftbuttonState= 0;
int RightbuttonState= 0;
int pos= 0;

Servo myservo;

void setup() {
  myservo.attach(9);
 
  pinMode(LeftbuttonPin, INPUT);
  pinMode(LeftbuttonPin, INPUT_PULLUP);

  pinMode(RightbuttonPin, INPUT);
  pinMode(RightbuttonPin, INPUT_PULLUP);

  myservo.write(pos);
  Serial.begin(9600);
}

void loop() {
  LeftbuttonState = digitalRead(LeftbuttonPin);
  if (LeftbuttonState== LOW) {
    if (pos< 150) {
    pos+= 1;
    }
  myservo.write(pos);
  delay(15);
  }
 
  RightbuttonState = digitalRead(RightbuttonPin);
  if (RightbuttonState== LOW) {
    if (pos> 0) {
    pos-= 1;
    }
  myservo.write(pos);
  delay(15);
  }
}

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

Re: Servo regelen met reed schakelaar

Berichtdoor PeterC » 26 Jan 2020, 14:44

Hallo Adam69,

Bedankt voor je reactie, echter dit is niet helemaal wat ik bedoelde. Het is de bedoeling dat door een puls van het reed contact de servo naar een hoek gaat, nu moet de pin het contact met de ground vast blijven houden om de eindstand te bereiken. Met een reed schakelaar wordt dus maar heel even een verbinding gemaakt. Het gaat hier om een modeltrein die dus al rijdend maar heel even het contact(reed schakelaar) inschakelt.
Hopelijk is het nu duidelijker wat ik bedoel.

PeterC

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

Re: Servo regelen met reed schakelaar

Berichtdoor shooter » 26 Jan 2020, 17:00

dan schrijf je toch gewoon servo.write (150) neer of elk ander getal ipv die for loop
paul deelen
shooter@home.nl

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

Re: Servo regelen met reed schakelaar

Berichtdoor PeterC » 27 Jan 2020, 16:33

Heren bedankt voor jullie reacties. Het heeft mij toch geholpen om nog eens wat verder te kijken en het is me gelukt om het werkend te krijgen zoals ik het graag zou willen. Ik zat gewoon op een dood spoor vandaar dat ik hier even hulp vroeg en heb deze ook gekregen. Nogmaals mijn dank.

PeterC

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

Re: Servo regelen met reed schakelaar

Berichtdoor shooter » 27 Jan 2020, 19:29

adam poorten voor seriele monitor zijn 0 en 1
dus was geen probleem.
Je zou wel kunnen kijken naar welke timers gebruikt worden door de pinnen want bij servo wordt een timer gebruikt
paul deelen
shooter@home.nl

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

Re: Servo regelen met reed schakelaar

Berichtdoor PeterC » 10 Feb 2020, 21:36

Heren,
Het programma werkte bij mij thuis goed, echter heb ik deze nu geprobeerd op een digitale treinbaan maar nu blijft de servo heen en weer draaien, hij luistert dus niet naar de reed schakelaars. Omdat ik het niet goed kreeg heb ik het programma op een andere Uno geïnstalleerd maar ook daarmee bleef de servo heen en weer draaien. Ook een andere servo gaf geen verbetering. Ik heb de Uno nu weer hier thuis staan maar de servo blijft heen en weer draaien. Ook het herinstalleren van het programma geeft geen verbetering.
Kan iemand mij vertellen wat ik nu nog kan doen om het weer goed werkend te krijgen?

PeterC

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

Re: Servo regelen met reed schakelaar

Berichtdoor Gij Kieken » 10 Feb 2020, 22:13

Nog eens je meest recente code posten die je gebruikt.

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

Re: Servo regelen met reed schakelaar

Berichtdoor PeterC » 10 Feb 2020, 22:51

Bedankt voor je reactie, natuurlijk, daar had ik even niet bij stil gestaan, bij deze.

[code]


#include <Servo.h>

const int LeftbuttonPin = 3;
const int RightbuttonPin = 4;


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

Servo myservo;

void setup() {

myservo.attach(9);

pinMode(LeftbuttonPin, INPUT);
pinMode(RightbuttonPin, INPUT);

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

void loop() {
LeftbuttonState = digitalRead(LeftbuttonPin);
RightbuttonState = digitalRead(RightbuttonPin);
if (LeftbuttonState == LOW) {

for (pos = 15; pos <= 120; pos += 1) // is gelijk aan de int pos bij setup
{
myservo.write(pos);
delay(40);
}
} else {
// myservo.write(pos);

if (RightbuttonState == LOW) {
for (pos = 120; pos >=15; pos -=1) //is nu gelijk aan setup
{
myservo.write(pos);
delay(70);
}
}
}
}

PeterC

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

Re: Servo regelen met reed schakelaar

Berichtdoor Gij Kieken » 11 Feb 2020, 20:19

Bij gebrek aan een servo motor,hier een voorbeeldje hoe je een Led kan laten Faden.
Misschien kun je er wat mee.

Code: Alles selecteren
/*
   Date:    11/02/2020
   Purpose: Led laten UP & Down faden door twee Reed switchen.
            Dit door gebrek aan een servo motor.
            Ik heb alles met betrekking tot Servo gecomentarieert
            want te samen werkt het niet.
            Dit door het gebruik van bepaalde Timers in Servo library.
*/

//#include <Servo.h>

const int LeftbuttonPin = 2;
const int RightbuttonPin = 3;
const int pwmPin = 10;  // LED in serie met 470 ohm weerstand op pin 10

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(LeftbuttonPin, INPUT_PULLUP);
  pinMode(RightbuttonPin, INPUT_PULLUP);
  pinMode(pwmPin, OUTPUT);
  //myservo.write(pos); // Neemt de int pos positie aan.
}

void loop() {
  LeftbuttonState = digitalRead(LeftbuttonPin);
  Serial.print("LeftbuttonState = ");
  Serial.println(LeftbuttonState);
  RightbuttonState = digitalRead(RightbuttonPin);
  Serial.print("RightbuttonState = ");
  Serial.println(RightbuttonState);
  if (LeftbuttonState == LOW) { //Het eerste reed contact heeft even geschakeld
    Serial.println("We zitten in de Fade Up ");
    for (int i = 0; i <= 255; i++) { //Hier wordt de code blocking door de delay's
      //Nogmaals het ene of het andere reed contact schakelen heeft geen effect
      Serial.println(i);
      analogWrite(pwmPin, i);
      delay(100);
    }
    //for (pos = 15; pos <= 120; pos++) {
    //myservo.write(pos);
    //delay(40);
    //}
  }
  if (RightbuttonState == LOW) { //Het tweede reed contact heeft geschakeld
    Serial.println("We zitten in de Fade Down ");
    for (int i = 255; i >= 0; i--) { //Hier wordt de code blocking door de delay's
      //Nogmaals het ene of het andere reed contact schakelen heeft geen effect
      Serial.println(i);
      analogWrite(pwmPin, i);
      delay(100);
    }
    //for (pos = 120; pos >= 15; pos--) {
    //myservo.write(pos);
    //delay(70);
    //}
  }
  delay(100);
}

Volgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 17 gasten