]> git.piffa.net Git - rover/blob - libraries/rover/rover.cpp
58bbf2cbb082a1f3e2b2c685f8ff1e675df8e311
[rover] / libraries / rover / rover.cpp
1 /*
2   Rover
3
4 Autore: Andrea Manni
5
6 Link: http://aero.piffa.net
7 Licenza:    GPLv3
8
9 */
10
11 #include "Arduino.h"
12 #include "rover.h"
13
14 #define dEBUG
15
16 // Configurazione con OUTPUT digitali
17 // motor one
18 const int enA = 6;
19 const int in1 = 7;
20 const int in2 = 8;
21 byte speedA = 255;
22 // motor two
23 const int enB = 5;
24 const int in3 = 4;
25 const int in4 = 3;
26 byte speedB = 255;
27
28 // Servo vars
29 int pos = 0;    // variable to store the servo position
30 const byte servoPIN =9 ;
31 const byte middle = 90; // Centratura servo
32 const int spausa = 10; // Pausa movimenti servo
33 const byte sx = 10;  // Min SX
34 const byte dx = 170; // Maz DX
35 Servo myservo; // Non c'e' bisogno di extern se e' dichiarato in questo scope
36
37 ////////////////////////
38 // Funzioni:
39 //
40 void abilita() {
41 // Abilita i PINs come OUTPUTS
42     pinMode(enA, OUTPUT);
43     pinMode(in1, OUTPUT);
44     pinMode(in2, OUTPUT);
45     pinMode(enB, OUTPUT);
46     pinMode(in3, OUTPUT);
47     pinMode(in4, OUTPUT);
48
49
50     pinMode(servoPIN, OUTPUT);
51     myservo.attach(servoPIN);
52 }
53
54
55 // MotorA
56 void forwardA() {
57     // Avanzamento motore
58     digitalWrite(in1,LOW);
59     digitalWrite(in2,HIGH);
60     analogWrite(enA,speedA);
61 }
62
63 void forwardA(byte speedA) {
64     // Avanzamento motore
65     digitalWrite(in1,LOW);
66     digitalWrite(in2,HIGH);
67     analogWrite(enA,speedA);
68 }
69
70 void backwardA() {
71     // Reverse motore
72     digitalWrite(in2,LOW);
73     digitalWrite(in1,HIGH);
74     analogWrite(enA,speedA);
75 }
76
77 void backwardA(byte speedA) {
78     // Reverse motore
79     digitalWrite(in2,LOW);
80     digitalWrite(in1,HIGH);
81     analogWrite(enA,speedA);
82 }
83
84 void stopA() {
85     // Stop
86     digitalWrite(enA,LOW);
87 }
88
89 // MotorB
90 void forwardB() {
91     // Avanzamento motore
92     digitalWrite(in3,LOW);
93     digitalWrite(in4,HIGH);
94     analogWrite(enB,speedB);
95 }
96
97 void forwardB(byte speedB) {
98     // Avanzamento motore
99     digitalWrite(in3,LOW);
100     digitalWrite(in4,HIGH);
101     analogWrite(enB,speedB);
102 }
103
104 void backwardB() {
105     // Reverse motore
106     digitalWrite(in4,LOW);
107     digitalWrite(in3,HIGH);
108     analogWrite(enB,speedB);
109 }
110
111 void backwardB(byte speedB) {
112     // Reverse motore
113     digitalWrite(in4,LOW);
114     digitalWrite(in3,HIGH);
115     analogWrite(enB,speedB);
116 }
117
118 void stopB() {
119     // Stop
120     digitalWrite(enB,LOW);
121 }
122
123
124 // Entrambi i motori
125 void avanti() {
126     // Drive ahead: funzione composita
127     forwardA() ;
128     forwardB() ;
129 }
130 void indietro() {
131     // Drive backward: funzione composita
132     backwardA();
133     backwardB();
134 }
135 void giraSX() {
136     // Gira a DX
137     forwardB() ;
138     backwardA();
139 }
140 void giraDX()  {
141     // Gira a DX
142     forwardA() ;
143     backwardB();
144 }
145 void stop()  {
146     stopA();
147     stopB();
148 }
149
150
151
152 // Servo
153 void servoDX() {
154     // TurnDX
155     while (pos < dx) {
156         myservo.write(pos++);
157         delay(spausa);
158     }
159 }
160
161 void servoSX() {
162     // TurnSX
163     while (pos > sx) {
164         myservo.write(pos--);
165         delay(spausa);
166     }
167 }
168
169 void servoMiddle() {
170     // Middle
171     while (pos > middle) {
172         myservo.write(pos--);
173         delay(spausa);
174     }
175     while (pos < middle) {
176         myservo.write(pos++);
177         delay(spausa);
178     }
179 }