rotary table
15 berichten
• Pagina 1 van 2 • 1, 2
rotary table
aansturen rotary table software probleem. Hoop dat ik niet teveel vraag....
1. Bedoeling de draaitafel een opgegeven aantal graden te laten draaien, CW (clockwise) , CCW (counter clockwise)
2. Probleem zit in het tegen de klok, CCW, aansturen. Negatieve getallen voor de hoek (angleR )
waarschijnlijk heb ik ook - steppermotorCW(); - op de verkeerde plaats staan
3. De stukken software van Bristolwatch.com en Mechatronics.
4. onderdelen Arduino uno - LCD1602 - rotory encoder/ switch - DRV8825 - stappenmotor
Het programma:
1. Bedoeling de draaitafel een opgegeven aantal graden te laten draaien, CW (clockwise) , CCW (counter clockwise)
2. Probleem zit in het tegen de klok, CCW, aansturen. Negatieve getallen voor de hoek (angleR )
waarschijnlijk heb ik ook - steppermotorCW(); - op de verkeerde plaats staan
3. De stukken software van Bristolwatch.com en Mechatronics.
4. onderdelen Arduino uno - LCD1602 - rotory encoder/ switch - DRV8825 - stappenmotor
Het programma:
- 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;
// 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
pinMode(switchR,INPUT);
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
}
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(1000);{
switchState = digitalRead(switchR); // read pin D6, not pushed =low
if (switchState != lastswitchState){
if (switchState == LOW){ // switch pressed
steppermotorCW();
}
}
}
lastswitchState = switchState;
}
void read_rotary() {
if (digitalRead(dirR)) angleR--;// angle -1 on LCD1602
else angleR++; // angle +1 on LCD1602
}
void steppermotorCW(){
digitalWrite(dirMPin,LOW); // LOW is CW rotation
steps=map(angleR,0,360,0,6400); //
for(int x = 0; x < steps; x++){ // motor x steps
digitalWrite(stepMPin,HIGH); // make 1 step
delayMicroseconds(500);
digitalWrite(stepMPin,LOW);
delayMicroseconds(500);
}
delay(500);
}
void steppermotorCCW(){
digitalWrite(dirMPin,HIGH); // HIGH is CCW rotation
steps=map(angleR,0,360,0,6400);
for (int x = 0; x < steps; x++){ // motor "x" steps
digitalWrite(stepMPin,HIGH); // make 1 step
delayMicroseconds(500);
digitalWrite(stepMPin,LOW);
delayMicroseconds(500);
}
delay(500);
}
Advertisement
Re: rotary table
adcnc schreef:
- Code: Alles selecteren
void loop(){
delayMicroseconds(1000); // totale waanzin, waarom gebruik je dit?
switchState = digitalRead(switchR);
if (switchState != lastswitchState){
if (switchState == LOW){
steppermotorCW();
}
lastswitchState = switchState;
}
}
Ik heb niets veranderd in je syntax, ik heb alleen de grammatica wat aangepast.
Zie je nu waarom je geen CCW aansturen kunt?
Re: rotary table
Hier is een breinbreker:
Veel eleganter en verdient tenminste een vermelding in de https://www.ioccc.org
(Het werkt, maar vraag me niet hoe.)
HINT:
"assignment" gaat van rechts naar links.
- Code: Alles selecteren
loop()
a = key();
static b;
If (a=!a=b) steppermotorCCW();
else steppermotorCW;
b = a;
}
Veel eleganter en verdient tenminste een vermelding in de https://www.ioccc.org
(Het werkt, maar vraag me niet hoe.)
HINT:
"assignment" gaat van rechts naar links.
Re: rotary table
ctunes, bedankt voor de genomen tijd. Zal nog wel even duren voor ik vermelding op die website krijg.
delayMicroseconds..... heb ik verwijderd. Had geen functie.
Ja, er moet een if .... else statement in.
Het lukt me nog niet om je voorstel werkend er in te krijgen.
Ga het nog verder uitzoeken.
Bij steppermotorCCW is de uitgelezen hoek (angleR ) negatief die moet postief worden voor de steps.
ik denk (ja daar gaat het fout...) dat er zoiets bij moet: angleR = abs(angleR)
delayMicroseconds..... heb ik verwijderd. Had geen functie.
Ja, er moet een if .... else statement in.
Het lukt me nog niet om je voorstel werkend er in te krijgen.
Ga het nog verder uitzoeken.
Bij steppermotorCCW is de uitgelezen hoek (angleR ) negatief die moet postief worden voor de steps.
ik denk (ja daar gaat het fout...) dat er zoiets bij moet: angleR = abs(angleR)
Re: rotary table
ctunes bedankt voor de genomen tijd.
delay 1000 microseconden verwijdert.
delay(500) bij de steppermotoren ook verwijdert.
ben nog naar de breinbreker aan het kijken.
met de if / else statement
de negatieve hoek (angleR) moet voor de steps positief worden.
bij tweakers4all kijk ik hoe dat programmeren gaat, beginners....
ik doe het rustig aan, ben 77+ en wijsheid komt met de jaren al merk ik daar niet veel van.
kom denk ik nog niet voor een vermelding op de genoemde website in aanmerking.
delay 1000 microseconden verwijdert.
delay(500) bij de steppermotoren ook verwijdert.
ben nog naar de breinbreker aan het kijken.
met de if / else statement
de negatieve hoek (angleR) moet voor de steps positief worden.
bij tweakers4all kijk ik hoe dat programmeren gaat, beginners....
ik doe het rustig aan, ben 77+ en wijsheid komt met de jaren al merk ik daar niet veel van.
kom denk ik nog niet voor een vermelding op de genoemde website in aanmerking.
Re: rotary table
wijsheid komt met jaren maar het duurt ook jaren tegenwoordig.
en wat ctunes schrijft is gewoon FOUT vergelijken doe je met == en iets hetzelfde maken doe je met 1 = en niet met twee ==.
lukt het nu een beetje met je tafel?
en wat ctunes schrijft is gewoon FOUT vergelijken doe je met == en iets hetzelfde maken doe je met 1 = en niet met twee ==.
lukt het nu een beetje met je tafel?
paul deelen
shooter@home.nl
shooter@home.nl
Re: rotary table
adcnc schreef:kom denk ik nog niet voor een vermelding op de genoemde website in aanmerking.
Soms komt de eerste prijs volkomen onverwacht.
Ik dat dat deze link je helpen.
http://www.mathertel.de/Arduino/RotaryEncoderLibrary.aspx
shooter schreef:wijsheid komt met jaren maar het duurt ook jaren tegenwoordig.
en wat ctunes schrijft is gewoon FOUT vergelijken doe je met == en iets hetzelfde maken doe je met 1 = en niet met twee ==.
- Code: Alles selecteren
a = key();
static b;
If (a=!a=b) b = false;
else b = true;
b = a;
Ik vergelijk niet, ik kijk naar de uitkomst van een assignment. "NULL" is false, en al het andere is waar.
Laatst gewijzigd door ctunes op 02 Jan 2022, 23:55, in totaal 1 keer gewijzigd.
Re: rotary table
ctunes schreef:Hier is een breinbreker:
- Code: Alles selecteren
loop()
a = key();
static b;
If (a=!a=b) steppermotorCCW();
else steppermotorCW;
b = a;
}
Veel eleganter en verdient tenminste een vermelding in de https://www.ioccc.org
(Het werkt, maar vraag me niet hoe.)
HINT:
"assignment" gaat van rechts naar links.
Heb de "volledige" code gekopieerd, niets aan gewijzigd en.... Het werkt niet. Heb geen behoefte aan reacties dus reageer niet en vraag me niets.
Laatst gewijzigd door Frits1956 op 03 Jan 2022, 00:24, in totaal 1 keer gewijzigd.
Re: rotary table
Frits1956 schreef:Heb de "volledige" code gekopieerd, niets aan gewijzigd en.... Het werkt niet.
Nee, natuurlijk niet.
Maar door uit te vinden wat waarom niet werkt, kun je begrip kweken.
"Het werkt niet": is zo'n vage indicatie van een probleem, dat het eigenlijk niet eens serieus genomen kan worden.
Ergo: dat stukje code werkt perfect, doet precies wat het moet doen.
Re: rotary table
ben nog naar de breinbreker aan het kijken.
met de if / else statement
de negatieve hoek (angleR) moet voor de steps positief worden.
Wellicht dat de procedure als volgt aangepast wel werkt.
Anders zou ik proberen om de dirpin LOW te maken want als ik het juist heb is dir HIGh clockwise en LOW counterclockwise.
void steppermotorCCW(){
digitalWrite(dirMPin,HIGH); // HIGH is CCW rotation
steps=map(angleR,0,360,0,6400);
// for (int x = 0; x < steps; x++){ // motor "x" steps
for (int x = steps; x > 0; x--){ // motor "x" steps
digitalWrite(stepMPin,HIGH); // make 1 step
delayMicroseconds(500);
digitalWrite(stepMPin,LOW);
delayMicroseconds(500);
}
delay(500);
}
15 berichten
• Pagina 1 van 2 • 1, 2
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 4 gasten