rotary table

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 5
Geregistreerd: 27 Dec 2021, 22:22

Re: rotary table

Berichtdoor adcnc » 04 Jan 2022, 23:32

bedankt voor alle hulp. Het is gelukt. :)
if .... else statement gebruikt en de negatieve hoek "angleR" positief gemaakt met abs()

Code: Alles selecteren
/*
  LiquidCrystal 1602 + Rotary encoder incl.switch + steppermotor
 *
 * The circuit:
*/

// include the library LCD code:
#include <LiquidCrystal.h>
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 10, d5 = 9, d6 = 8, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

// input rotary encoder and switch
#define stepR 2        //  interrupt 0 (=pin D2)
#define dirR 3         //  CW / CCW                 
int switchR = 6;       //switchR = switch
int switchState = 0;       
int lastswitchState = 0;
int angleR = 0; //reading angle LCD1602
int x = 0;
int y = 0;
// steppermotor
const int dirMPin = 4;   // direction Motor
const int stepMPin = 5;  // 1600 steps 1 rev. motor = 8*200
int steps = 0;       // 6400 steps 1 turn rotary-table (reduction 1 : 4)

void setup(){     
  lcd.begin(16, 2); // set up the LCD's number of columns 16 and rows 2
  pinMode(stepR, INPUT);   // encoder rotary step
  pinMode(dirR, INPUT);    // encoder rotary direction
  attachInterrupt(0, read_rotary, FALLING);  // interrupt 0 = pin D2
  lcd.print("angle= ");    // print hoek op regel 0

  pinMode(stepMPin,OUTPUT); // step steppermotor
  pinMode( dirMPin,OUTPUT); // direction steppermotor
  pinMode( switchR,INPUT);
 
Serial.begin (9600);
 
}

void loop(){

  lcd.setCursor(8,0);  // column 8 row 0
  lcd.print(angleR);  // print getal op display kolom 7 op rij 0 kolom 1
  lcd.print(" ");

  delayMicroseconds(2000);{
 
    switchState = digitalRead(switchR); // read pin D6, not pushed =low

    if (switchState != lastswitchState){ 
        if (switchState == LOW){    // switch pressed
       
        steppermotor();                // to steppermotor
           
    }
    }
     lastswitchState = switchState;
  }
}

void read_rotary() { 
 
  if (digitalRead(dirR))  angleR--;// angle -1 degree on LCD1602
      else  angleR++;                // angle +1 degree on LCD1602 
}

void steppermotor(){
   if (angleR >= 0 ){
  (digitalWrite(dirMPin,LOW)); // LOW is CW rotation
    steps=map(angleR,0,360,0,6400); //
     
   for(int x = 0; x < steps; x++){ // make x steps = 6400 = 1 rev table
 
       digitalWrite(stepMPin,HIGH); // make 1 step
       delayMicroseconds(500);
       digitalWrite(stepMPin,LOW);
       delayMicroseconds(500);
    }
 }
  else{
   
  y=(abs(angleR));

  digitalWrite(dirMPin,HIGH);     // HIGH is CCW rotation
 
    steps=map(y,0,360,0,6400); //

  for (int x = 0; x < steps; x++){ // make "x" steps = 6400 = 1 rev table

  digitalWrite(stepMPin,HIGH); // make 1 step
  delayMicroseconds(500);
  digitalWrite(stepMPin,LOW);
  delayMicroseconds(500);
  }
  }
}
 

Advertisement

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

Re: rotary table

Berichtdoor shooter » 12 Jan 2022, 22:48

ik snap niet hoe angleR werkt, want die staat volgens mij op 0
paul deelen
shooter@home.nl

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: rotary table

Berichtdoor ctunes » 04 Feb 2022, 23:35

cout >> /dev/null

(Maw, ik heb wat hier stond verwijderd)
Laatst gewijzigd door ctunes op 04 Feb 2022, 23:54, in totaal 1 keer gewijzigd.

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: rotary table

Berichtdoor ctunes » 04 Feb 2022, 23:46

http://www.mathertel.de/Arduino/RotaryE ... brary.aspx

Gebruik dit eens, en kijk of het werkt in jouw geval, bij mij loste het een hoop problemen op, zodat ik mijn aandacht van de encoderproblematiek naar de rest van de problemen kon verplaatsen.

(En bleek dat mijn manier van encoder uitlezen aan de grondslag lag van de problemen met het aansturen van de rest.)

Deze "library" is "rocksolid", en heel begrijpbaar.

Sterker nog, als je de source-code hebt bestudeerd, heeft geen enkele rotaryswitch nog geheimen voor je.

(Af en toe is het ook zo logisch allemaal, en daar doen we het voor.)

;)

PS Is het niet mooi om duits-engels te lezen zonder google-translate ertussen?

Deze persoon doet de uiterste best om op te vallen op een rare manier.

Nu ja, net als ik eigenlijk.

Maar als iemand er ook maar wat aan kan hebben, wat maakt het dan uit hoe je opvalt?


Ik zie alleen zoveel mensen hier in dezelfde valkuilen vallen waar ik ook ben geweest.

Waarom is er geen java voor arduino?

Iedereen kan in Java programmeren namelijk, het is een soort van BASIC immers.)

"Omdat real-time systemen geen timeshare kennen."?

Neen!

Het is omdat in een arduino geen java interpreter zit.

Als dat zo was, dan zouden we allemaal in java schrijven, en wordt dit forum overbodig.

"Alleen nog nodig voor experts die de code willen hacken."

Als je goed naar je mobiele telefoon kijkt, dan zie je een BIOS met een java-core.

Berichten: 287
Geregistreerd: 15 Apr 2021, 20:05

Re: rotary table

Berichtdoor ctunes » 05 Feb 2022, 00:21

In principe zou je daar alles mee mogen kunnen doen.


Hoe makkelijk is het niet om zeker te weten dat je code werkt, en je alleen aan het systeem hoeft te twijfelen?
https://arduinoforum.nl

Vorige

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Google [Bot] en 11 gasten