-
Notifications
You must be signed in to change notification settings - Fork 0
/
manette_robot.ino
169 lines (147 loc) · 3.97 KB
/
manette_robot.ino
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#include <LiquidCrystal.h>
namespace lib {
class h_bridge {
public:
h_bridge(int s1, int s2) {
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
m_pin_1 = s1;
m_pin_2 = s2;
}
h_bridge() = default;
void forward() {
digitalWrite(m_pin_1, LOW);
digitalWrite(m_pin_2, HIGH);
}
void backward() {
digitalWrite(m_pin_1, HIGH);
digitalWrite(m_pin_2, LOW);
}
void brake() {
digitalWrite(m_pin_1, HIGH);
digitalWrite(m_pin_2, HIGH);
}
void coast() {
digitalWrite(m_pin_1, LOW);
digitalWrite(m_pin_2, LOW);
}
private:
int m_pin_1;
int m_pin_2;
};
}
//Initialisation de l'ecran
const int rs = 0, en = 1, d4 = 2, d5 = 3, d6 = 4, d7 = 5;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
//Definiton entree joystick moteurs
const int joy_motor_x = A0; // Entree analogique
const int joy_motor_y = A1; // Entree analogique
//Definition entree joystick bras
const int joy_arm_x = A2; // Entree analogique
const int joy_arm_button = A3; // Entree numerique utilisant un pin analogique
//Definition des boutons pour compter les points
const int more_five = A4; // Entree numerique utilisant un pin analogique
const int more_one = A5; // Entree numerique utilisant un pin analogique
lib::h_bridge right_bridge;
lib::h_bridge left_bridge;
lib::h_bridge arm;
lib::h_bridge claw;
//Variables diverses
int points = 0; //Nombre de points durant la partie
bool claw_opened = false; //Correspond a l'etat d'ouverture du bras
int precision = 100; //Temps en ms entre la mise en mouvemement et l'arret d'un moteur
void displayPoints(int points, int seconds) {
lcd.print("Points : " + String(points) + ", " + String(seconds) + " sec");
}
int analog2digital(int input) {
if (input > 1000) {
return 1;
}
else if (input < 50) {
return -1;
}
else {
return 0;
}
}
void setup() {
//Definition dont ont besoin les moteurs
right_bridge = lib::h_bridge(13, 12);
left_bridge = lib::h_bridge(11, 10);
//Moteurs du bras
arm = lib::h_bridge(7, 6);
claw = lib::h_bridge(9, 8);
//Initialisation de l'ecran
lcd.begin(16, 2);
lcd.print("Bienvenue");
pinMode(joy_motor_x, INPUT);
pinMode(joy_motor_y, INPUT);
pinMode(joy_arm_x, INPUT);
pinMode(joy_arm_button, INPUT);
digitalWrite(joy_arm_button, HIGH);
pinMode(more_five, INPUT);
pinMode(more_one, INPUT);
}
void loop() {
//----- Lecture des info pour les moteurs de mouvements -----
//Action de l'axe X
if (analog2digital(analogRead(joy_motor_x)) == 1) {
//Fait avancer les 2 moteurs
right_bridge.forward();
left_bridge.forward();
delay(precision);
right_bridge.brake();
left_bridge.brake();
}
else if (analog2digital(analogRead(joy_motor_x)) == -1) {
//Fait reculer les 2 moteurs
right_bridge.backward();
left_bridge.backward();
delay(precision);
right_bridge.brake();
left_bridge.brake();
}
//Action de l'axe Y
if (analog2digital(analogRead(joy_motor_y)) == 1) {
left_bridge.forward(); //Fait tourner le robot vers la droite
delay(precision);
left_bridge.brake();
}
else if (analog2digital(analogRead(joy_motor_y)) == -1) {
right_bridge.forward(); //Fait tourner le robot vers la gauche
delay(precision);
right_bridge.brake();
}
//----- Lecture des infos pour les moteurs du bras -----
if (analog2digital(analogRead(joy_arm_x)) == 1) {
arm.forward();
delay(precision);
arm.brake();
}
else if (analog2digital(analogRead(joy_arm_x)) == -1) {
arm.backward();
delay(precision);
arm.brake();
}
if (analog2digital(analogRead(joy_arm_button))) {
if (claw_opened) {
claw.forward();
delay(1000);
claw.brake();
}
else {
claw.backward();
delay(1000);
claw.brake();
}
}
//Lecture concernant les boutons
if (analog2digital(analogRead(more_five))) {
points += 5;
displayPoints(points, millis() * pow(10, -3));
}
if (analog2digital(analogRead(more_one))) {
points ++;
displayPoints(points, millis() * pow(10, -3));
}
}