// Gry Maritha Hatch speed regulation MULTIPROP, Fronthatch, Rearhatch, Sidehatch, Lift (anchors would be 5 and 6ste servo) 13/9/16
#include <VarSpeedServo.h>
#define RCmax 2200 // Multipropsignaal met grenswaarden.
#define RCmid 1500 //
#define RCmin 800 //
#define TimeOut 260000 //
#define Minpos1 165 // Fronthatch
#define Maxpos1 7 // Open positie
#define Speed1 1 // Hoe hoger, hoe sneller de servo zal bewegen (tussen 1 en 255 de hoeksnelheid word bepaald dus meer toeren duurt langer)
#define Minpos2 27 // RearHatch Openpostitie
#define Maxpos2 165 //
#define Speed2 1 //
#define Minpos3 40 // Sidehatch
#define Maxpos3 130 //
#define Speed3 4 // afstellen naar 19/20sec
#define Minpos4 40 // Lift (dit moeten we even bekijken pos beneden = Minpos4 uitgeschoven = Maxpos4 en hiervoor (midden is juist voor de uitschuif)
#define Maxpos4 130 //
#define Speed4 10 // deze snelheid moet snel genoeg zijn zodat de sidehatch niet botst.
#define Minpos5 40 // AnchorLeft
#define Maxpos5 130 //
#define Speeddown5 255 // vallen
#define Speedup5 1 // ophalen
#define Minpos6 40 // AnchorRight
#define Maxpos6 130 //
#define Speeddown6 255 //
#define Speedup6 1 //
#define RCport1 2 // FRONTHATCH Pin 4 van de MULTIPROP naar digitale pin 2 van de Arduino
#define RCport2 3 // REARHATCH 5MP naar D3
#define RCport3 4 // SIDEHATCH
#define RCport4 5 // misschien de lift nu deze moet gewoon proportioneel werken dus eerst testen.
#define RCport5 6 // ANCHOR LEFT
#define RCport6 7 // ANCHOR RIGHT
#define SNDoutput1 14 // FRONTHATCH (analoog A0 = Diditaal D14 )=sound naar USM ext 1
#define SNDoutput2 15 // REARRHATCH (A1 = D14) sound naar USM ext 2
#define SNDoutput3 16 // SIDEHATCH sound naar USM ext 3
//#define SNDoutput4 17 // ankergeluid of verhoogde pitch van de hydraulische pomp dit kan dienen voor de Palfinger en de Heila kraan voor alle slagen.
VarSpeedServo Fronthatch; //servo om de voorluiken te laten bewegen
VarSpeedServo Rearhatch; //servo om de achterluiken te laten bewegen
VarSpeedServo Sidehatch; //servo om het zijluik te laten bewegen
VarSpeedServo Lift; //servo om de lift te laten bewegen
VarSpeedServo Anchorleft; //servo om de linker anker te laten bewegen
VarSpeedServo Anchorright; //servo om de rechter anker te laten bewegen
int RCpulse1; // dit geeft de variable RCpulse1 een integerwaarde (een geheel getal tussen 0 en ...) deze waarden kan vervolgens worden veranderds naar believe
int RCpulse2;
int RCpulse3;
int RCpulse4;
int RCpulse5;
int RCpulse6;
int pos1;
int pos2;
int pos3;
int pos4;
int pos5;
int pos6;
int Speed5;
int Speed6;
int pos5hold; // dit om de verwerking te kunnen maken in de loop
int pos6hold;
void setup()
{
Fronthatch.attach (8); //plaats de servo op pin 8
Rearhatch.attach (9); //plaats de servo op pin 9...
Sidehatch.attach (10);
Lift.attach (11);
Anchorleft.attach (12);
Anchorright.attach (13);
pos1 = Minpos1; // Start waarde voor servo positie FrontHatch (dicht)
pos2 = Maxpos2; // Start waarde voor servo positie Rearhatch (dicht)
pos3 = Maxpos3; // Start waarde voor servo positie Sidehatch (dicht)
pos4 = Maxpos4; // Start waarde voor servo positie Lift (onder)
pos5 = Maxpos5; // Start waarde voor servo positie AnchorLeft (op)
pos6 = Maxpos6; // Start waarde voor servo positie AnchorRight (op)
Speed5 = Speeddown5; // De ankersnelheid
Speed6 = Speeddown6; // Idem
}
void RCread(){ // hier worden de RC inputs ingelezen
RCpulse1 = pulseIn(RCport1, HIGH, TimeOut); // Leest de ogenblikkelijke puls van de ontvanger of multiprop
RCpulse2 = pulseIn(RCport2, HIGH, TimeOut);
RCpulse3 = pulseIn(RCport3, HIGH, TimeOut);
RCpulse4 = pulseIn(RCport4, HIGH, TimeOut);
RCpulse5 = pulseIn(RCport5, HIGH, TimeOut);
RCpulse6 = pulseIn(RCport6, HIGH, TimeOut);
// Serial.print("RCpulse1 = "); // hiermee kan je de pulses meten en tonen als het bord is aangesloten op de seriele monitor.
// Serial.println(RCpulse1);
}
void loop()
{
RCread(); // Ga naar RCread, om de RC inputs in te lezen.
if(RCpulse1 > RCmin && RCpulse1 < RCmax){ // Zijn ze binnen een veilige zone, dan voer onderstaande uit:
if(RCpulse1 > RCmid + 200){pos1 = Maxpos1; analogWrite(SNDoutput1, 0);} // FRONTHATCH +sound (analogWrite 0 is de neutraal die wordt gezonden 255 is de maximale voltage 5v)
else if(RCpulse1 < RCmid - 200){pos1 = Minpos1; analogWrite(SNDoutput1, 0);}
else {analogWrite(SNDoutput1, 255);}
if(RCpulse2 > RCmid + 200){pos2 = Maxpos2; analogWrite(SNDoutput2, 0);} // REARHATCH
else if(RCpulse2 < RCmid - 200){pos2 = Minpos2;analogWrite(SNDoutput2, 0);}
else {analogWrite(SNDoutput2, 255);}
if(RCpulse3 > RCmid + 200){pos3 = Maxpos3;analogWrite(SNDoutput3, 0);} // SIDEHATCH
else if(RCpulse3 < RCmid - 200){pos3 = Minpos3;analogWrite(SNDoutput3, 0);}
else {analogWrite(SNDoutput3, 255);}
if(pos3 >= Maxpos3){pos4 = map(RCpulse4, 2000, 1000, Maxpos4, Minpos4);} else{pos4 = Minpos4;} // als de hatch niet boven is werkt de lift niet of gaan naar beneden
// Ankers ONDERSTAANDE WERKT MAAR DIT ZIJN 2 VASTE POSITIES DIT IS MAKKELIJK VOOR DE USM MAAR VARABLE ZOU WENSELIJK ZIJN
if(RCpulse5 > RCmid + 200){pos5 = Maxpos5;Speed5 = Speedup5;} // 1 ANCHOR LEFT (analogWrite(SNDoutput4, 0);}) moet er misschien nog in...
if(RCpulse5 < RCmid - 200){pos5 = Minpos5;Speed5 = Speeddown5;} //255
// Optie 1 Variabel
// (ifRCpuls5 > RCpuls5Hold{Speed5 = Speedup5; pos5 = map(RCpulse5, 2000, 1000, Maxpos5, Minpos5);RCpuls5 = RCpuls5hold;}
// else {Speed5 = Speeddown5; pos5 = map(RCpulse5, 2000, 1000, Maxpos5, Minpos5)
// Optie 2 Variabel DEZE HEEFT DE VOORKEUR
// if(pos5 > pos5hold){Speed5 = Speedup5; pos5 = map(RCpulse5, 2000, 1000, Maxpos5, Minpos5);pos5hold = pos5;}
// else {Speed5 = Speeddown5; pos5 = map(RCpulse5, 2000, 1000, Maxpos5, Minpos5); pos5hold = pos5;}
if(RCpulse6 > RCmid + 200){pos6 = Maxpos6;Speed6 = Speedup6;} // ANCHOR RIGHT
if(RCpulse6 < RCmid - 200){pos6 = Minpos6;Speed6 = Speedup6;}
}
Fronthatch.write(pos1,Speed1,false); // laat de servo naar de variabele 'pos1' gaan
Rearhatch.write(pos2,Speed2,false); // laat de servo naar de variabele 'pos2' gaan
Sidehatch.write(pos3,Speed3,false);
Lift.write(pos4,Speed4,false);
Anchorleft.write(pos5,Speed5,false);
Anchorright.write(pos6,Speed6,false);
}