forked from OttoDIY/OttoDIYLib
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathOttoHumanoid.h
122 lines (98 loc) · 3.47 KB
/
OttoHumanoid.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
//-- Otto Humanoid V10
#ifndef OttoHumanoid_h
#define OttoHumanoid_h
#ifdef ARDUINO_ARCH_ESP32
#include <ESP32Servo.h>
#else
#include <Servo.h>
#endif
#include <Oscillator.h>
#include <EEPROM.h>
#include <US.h>
#include "Otto_matrix.h"
#include "Otto_mouths.h"
#include "Otto_sounds.h"
#include "Otto_gestures.h"
//-- Constants
#define FORWARD 1
#define BACKWARD -1
#define LEFT 1
#define RIGHT -1
#define SMALL 5
#define MEDIUM 15
#define BIG 30
class OttoHumanoid
{
public:
//-- Otto initialization
void initHUMANOID(int YL, int YR, int RL, int RR,int LA, int RA, bool load_calibration, int NoiseSensor, int Buzzer, int USTrigger, int USEcho);
void initDC(int NoiseSensor, int Buzzer, int USTrigger, int USEcho);
//-- Attach & detach functions
void attachServos();
void detachServos();
//-- Oscillator Trims
void setTrims(int YL, int YR, int RL, int RR,int LA, int RA);
void saveTrimsOnEEPROM();
//-- Predetermined Motion Functions
void _moveServos(int time, int servo_target[]);
void oscillateServos(int A[6], int O[6], int T, double phase_diff[6], float cycle);
//-- HOME = Otto at rest position
void home();
bool getRestState();
void setRestState(bool state);
//-- Predetermined Motion Functions
void jump(float steps=1, int T = 2000);
void walk(float steps=4, int T=1000, int dir = FORWARD);
void turn(float steps=4, int T=2000, int dir = LEFT);
void bend (int steps=1, int T=1400, int dir=LEFT);
void shakeLeg (int steps=1, int T = 2000, int dir=RIGHT);
void updown(float steps=1, int T=1000, int h = 20);
void swing(float steps=1, int T=1000, int h=20);
void tiptoeSwing(float steps=1, int T=900, int h=20);
void jitter(float steps=1, int T=500, int h=20);
void ascendingTurn(float steps=1, int T=900, int h=20);
void moonwalker(float steps=1, int T=900, int h=20, int dir=LEFT);
void crusaito(float steps=1, int T=900, int h=20, int dir=FORWARD);
void flapping(float steps=1, int T=1000, int h=20, int dir=FORWARD);
void armsup();
void armsdown();
void armwave(int dir =RIGHT);
//-- Sensors functions
float getDistance(); //US sensor
int getNoise(); //Noise Sensor
//-- Mouth & Animations
void putMouth(unsigned long int mouth, bool predefined = true);
void putAnimationMouth(unsigned long int anim, int index);
void clearMouth();
//-- Sounds
void _tone (float noteFrequency, long noteDuration, int silentDuration);
void bendTones (float initFrequency, float finalFrequency, float prop, long noteDuration, int silentDuration);
void sing(int songName);
//-- Gestures
void playGesture(int gesture);
void initMATRIX(int DIN, int CS, int CLK, int rotate);
void matrixIntensity(int intensity);
void setLed(byte X, byte Y, byte value);
void writeText (const char * s, byte scrollspeed);
private:
Oscillator servo[6];
US us;
Otto_Matrix ledmatrix;
int servo_pins[6];
int servo_trim[6];
int servo_position[6];
int set_A[6];
int set_O[6];
double set_phase_diff[6];
int pinBuzzer;
int pinNoiseSensor;
unsigned long final_time;
unsigned long partial_time;
float increment[6];
bool isOttoResting;
bool isHUMANOID;
unsigned long int getMouthShape(int number);
unsigned long int getAnimShape(int anim, int index);
void _execute(int A[6], int O[6], int T, double phase_diff[6], float steps);
};
#endif