#include <VarSpeedServo.h>
VarSpeedServo BASSERVO; // base servo dreje
VarSpeedServo SHLSERVO; // skuldlerled med 2 servoer
VarSpeedServo ELBSERVO; // albueled
VarSpeedServo WRISERVO; // håndled op ned
VarSpeedServo WROSERVO; // håndled roter
VarSpeedServo GRISERVO; // griber
VarSpeedServo ELB2SERVO; // albueled roter
const int startpin = 53;
int start=0;
const int stopknappin = 51;
int stopknap=0;
const int start2pin = 49;
int start2=0;
// ingen servoer bliver attached i setup, for ikke at skabe pludselige bevægelser.
void setup()
{
pinMode (startpin,INPUT);
pinMode (start2pin,INPUT);
pinMode (stopknappin,INPUT);
attachInterrupt(2, jaja, LOW);
//BASSERVO.attach(3, 0,180);
//SHLSERVO.attach(4, 540,1440);// 1400 er midt og 650 er bunden
//ELBSERVO.attach(5, 540,1440);//min 980 1600 er midt
//WRISERVO.attach(6, 540,1440);//2000 - 1600 - 680
//WROSERVO.attach(7, 540,1440); // 1400 er midt
//GRISERVO.attach(8, 0,180);
//ELB2SERVO.attach(10, 540,1440); // 1550 er midt
}
void jaja(){
jaja();
}
// her ses på om nødstop er trukket. er det ikke trukket går programmet til et ventetrin.
void stoppet(){
stopknap = digitalRead(stopknappin);
if (stopknap==HIGH){
inite();
}
else
if (stopknap==LOW){
stoppet();
}
}
// Er begge startsignaler høje vil armen gå i venteposition.
void inite()
{
start = digitalRead(startpin);
start2 = digitalRead(start2pin);
if (start==HIGH & start2==HIGH){
reset();
}
}
void reset()
{
BASSERVO.write(140); // de første linjer her skriver hvilken position servoerne skal starte i, så de ikke flyver ud og starter i midterpositionen. Heref
er tildeles de en pin med et signal.
SHLSERVO.write(650);
ELBSERVO.write(980);
WRISERVO.write(1600);
WROSERVO.write(1400);
GRISERVO.write(90);
ELB2SERVO.write(1550);
BASSERVO.attach(3, 0,180);
SHLSERVO.attach(4, 540,1440);
ELBSERVO.attach(5, 540,1440);
WRISERVO.attach(6, 540,1440);
WROSERVO.attach(7, 540,1440);
GRISERVO.attach(8, 0,180);
ELB2SERVO.attach(10, 540,1440);
delay(2000);
vente();
}
//ventetrin
void vente(){
BASSERVO.slowmove(140,40);
SHLSERVO.slowmove(650,40);
ELBSERVO.slowmove(980,40);
WRISERVO.slowmove(1600,40);
WROSERVO.slowmove(1400,40);
GRISERVO.slowmove(90,100);
ELB2SERVO.slowmove(1550,40);
delay(1500);
BASSERVO.detach();
SHLSERVO.detach();
ELBSERVO.detach();
WRISERVO.detach();
WROSERVO.detach();
GRISERVO.detach();
ELB2SERVO.detach();
delay(500);
vente2();
}
void vente2(){ // her ses der på hvilket startsignal der kommer.
start = digitalRead(startpin);
start2 = digitalRead(start2pin);
if (start==HIGH & start2==LOW){
sekvens();
}
else
if (start2==HIGH & start==LOW){
sekvens2();
}
else
if (start2==LOW & start==LOW){
vente2();
}
}
// selve sekvensen hvor servoerne køres til de forskellige positioner i et givet tempo og med delay mellem hvert punkt armen rammer.
void sekvens() // Sekvens
{
BASSERVO.attach(3, 0,180);
SHLSERVO.attach(4, 540,1440);
ELBSERVO.attach(5, 540,1440);
WRISERVO.attach(6, 540,1440);
WROSERVO.attach(7, 540,1440);
GRISERVO.attach(8, 0,180);
ELB2SERVO.attach(10, 540,1440);
// stopknap = digitalRead(stopknappin);
// if (stopknap==LOW){stoppet();}
SHLSERVO.slowmove(1250,30);
ELBSERVO.slowmove(1400,40);
WRISERVO.slowmove(680,100);
//stopknap = digitalRead(stopknappin); // hvis nødstop aktiveres går armen i venteposition og starter ikke før nødstop er resat og de
får startsignal igen.
//if (stopknap==LOW){stoppet();}
delay(900);
GRISERVO.slowmove(20,50);
delay(1000);
ELBSERVO.slowmove(1800,40);
SHLSERVO.slowmove(1400,20);
// stopknap = digitalRead(stopknappin);
//if (stopknap==LOW){stoppet();}
delay(800);
BASSERVO.slowmove(10,40);
// stopknap = digitalRead(stopknappin);
//if (stopknap==LOW){stoppet();}
delay(800);
SHLSERVO.slowmove(1600,20);
ELBSERVO.slowmove(1750,15);
// stopknap = digitalRead(stopknappin);
//if (stopknap==LOW){stoppet();}
delay(800);
GRISERVO.slowmove(90,50);
delay(600);
SHLSERVO.slowmove(1400,35);
ELBSERVO.slowmove(1950,35);
// stopknap = digitalRead(stopknappin);
//if (stopknap==LOW){stoppet();}
delay(600);
vente();
}
void sekvens2() // Sekvens2 kasserede emner
{
BASSERVO.attach(3, 0,180);
SHLSERVO.attach(4, 540,1440);
ELBSERVO.attach(5, 540,1440);
WRISERVO.attach(6, 540,1440);
WROSERVO.attach(7, 540,1440);
GRISERVO.attach(8, 0,180);
ELB2SERVO.attach(10, 540,1440);
stopknap = digitalRead(stopknappin);
if (stopknap==LOW){
stoppet();
}
SHLSERVO.slowmove(1250,30);
ELBSERVO.slowmove(1400,40);
WRISERVO.slowmove(680,100);
stopknap = digitalRead(stopknappin); // hvis nødstop aktiveres går armen i venteposition og starter ikke før nødstop er resat og den får startsignal igen.
if (stopknap==LOW){
stoppet();
}
delay(900);
GRISERVO.slowmove(20,50);
delay(1000);
ELBSERVO.slowmove(1800,40);
SHLSERVO.slowmove(1400,20);
stopknap = digitalRead(stopknappin);
if (stopknap==LOW){
stoppet();
}
delay(800);
BASSERVO.slowmove(180,40);
stopknap = digitalRead(stopknappin);
if (stopknap==LOW){
stoppet();
}
delay(800);
GRISERVO.slowmove(90,50);
delay(600);
vente();
}
//
void loop(){
inite();
}
The thing that i call "stoppet" was my first attempt to do emergency stop with a normal input... in sekvens2 i have not disabled this, but i am only testing in sekvens.
Regards NIC