VizBlocks
ServoBehaviours.h
Go to the documentation of this file.
1 #ifndef SERVO_BEHAVIOUR_h
2 #define SERVO_BEHAVIOUR_h
3 #include "Arduino.h"
4 #include "Behaviours.h"
5 
6 #include <Servo.h>
7 
8 class ServoGoto : public Behaviour {
9  Servo _servo;
10 
11 public:
12  ServoGoto(Servo servo, String name = "ServoGoto") : Behaviour(name), _servo(servo){ }
13  //ServoMove(Servo servo, String name) : Behaviour(name), _servo(servo) {}
14 
15  char* args() {return "<int angle>"; };
16  String start(String args) {
17  Serial.println("Goto: '"+args+"'");
18  int val = args.toInt();
19  _servo.write(val);
20  return "";
21  }
22 
23 };
24 
25 class ServoWiggle : public Behaviour {
26  Servo _servo;
27  int _start_time = 0;
28  int _wiggle_time = 300;
29  int _num_wiggles = 5;
30  int _wiggles = 0;
31  int _wiggle_angle = 0;
32  //Calculate wiggle time by multiplying the angle by this...
33  int _wiggle_factor = 5;
34 
35 public:
36  ServoWiggle(Servo servo, String name = "ServoWiggle", int slowness=3) : Behaviour(name), _servo(servo),_wiggle_factor(slowness) {}
37  char* args() {return "<int wiggle_angle>"; };
38  String start(String args) {
39  _wiggle_angle = args.toInt();
40  _wiggles = 0;
41  _running = true;
42  _wiggle_time = _wiggle_factor * _wiggle_angle;
43  return "Wiggling " + String(_num_wiggles) + " times";
44  }
45 
46  void update() {
47  int time_since = millis() - _start_time;
48  if( time_since > _wiggle_time ) {
49  _wiggles++;
50  _start_time = millis();
51  int angle = ( _wiggles % 2 ) ? (90+_wiggle_angle) : (90-_wiggle_angle);
52  if( _wiggles > _num_wiggles ) {
53  angle = 90;
54  _running = false;
55  }
56  Serial.println("Wiggling to: " + String(angle));
57  _servo.write(angle);
58  }
59  }
60 
61 };
62 
63 class ServoRotateReturn : public Behaviour {
64  Servo _servo;
65  int _start_angle = 0;
66  int _end_angle = 180;
67  int _delay = 30;
68  int _num_rotations = 1;
69  int _rotations = 0;
70  int _pause = 500;
71 
72 public:
73  ServoRotateReturn(Servo servo, String name="ServoRotateReturn", int delay=30, int pause=500, int start_angle = 2, int end_angle=178 ) :
74  Behaviour(name), _servo(servo),_delay(delay), _pause(pause), _start_angle(start_angle), _end_angle(end_angle) {}
75  char* args() {return "<int number_of_cycles>"; };
76  String start(String args) {
77  _num_rotations = args.toInt();
78  _rotations = 0;
79  _running = true;
80  }
81 
82  void update() {
83  _servo.write(_start_angle);
84  delay(_pause);
85  for(int i = 0; i < _end_angle; i++) {
86  _servo.write(i);
87  delay(_delay);
88  }
89  _servo.write(_end_angle);
90  delay(_pause);
91  for(int i = 180; i >= _start_angle; i--) {
92  _servo.write(i);
93  delay(_delay/2);
94  }
95  _servo.write(_start_angle);
96  _rotations++;
97  if( _rotations >= _num_rotations ) {
98  _running = false;
99  }
100  }
101 
102 };
103 
104 #endif
ServoRotateReturn::ServoRotateReturn
ServoRotateReturn(Servo servo, String name="ServoRotateReturn", int delay=30, int pause=500, int start_angle=2, int end_angle=178)
Definition: ServoBehaviours.h:73
Behaviour::name
virtual String name()
Definition: Behaviours.h:28
ServoWiggle::update
void update()
Definition: ServoBehaviours.h:46
ServoRotateReturn
Definition: ServoBehaviours.h:63
ServoWiggle::start
String start(String args)
Definition: ServoBehaviours.h:38
ServoRotateReturn::args
char * args()
Definition: ServoBehaviours.h:75
Behaviour
Definition: Behaviours.h:4
ServoWiggle::ServoWiggle
ServoWiggle(Servo servo, String name="ServoWiggle", int slowness=3)
Definition: ServoBehaviours.h:36
ServoRotateReturn::update
void update()
Definition: ServoBehaviours.h:82
ServoGoto
Definition: ServoBehaviours.h:8
ServoWiggle::args
char * args()
Definition: ServoBehaviours.h:37
ServoGoto::ServoGoto
ServoGoto(Servo servo, String name="ServoGoto")
Definition: ServoBehaviours.h:12
ServoWiggle
Definition: ServoBehaviours.h:25
Behaviours.h
Behaviour::_running
boolean _running
Definition: Behaviours.h:9
ServoRotateReturn::start
String start(String args)
Definition: ServoBehaviours.h:76
ServoGoto::start
String start(String args)
Definition: ServoBehaviours.h:16
ServoGoto::args
char * args()
Definition: ServoBehaviours.h:15