#include <Timer.h>
int A = 8;
int B = 9;
int C = 11;
int D = 10;
long del;
static int pinDirezioneMarcia = A1;
bool stopped;
unsigned long currentmillis = millis();
unsigned long previousstop;
long stoptime = 2000;
void setup() {
Serial.begin(9600);
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(pinDirezioneMarcia, INPUT); //input in quanto legge il valore analogico del pin A0
void timerChg(bool state);
Timer timstop(OnDelay, 3000UL, &stopped, timerChg);
}
void loop() {
currentmillis = millis;
//leggo il valore analogico del potenziometro sul pin A0.
int valorePotenziometro = analogRead(pinDirezioneMarcia);
/*
Il range dei valori analogici e' da 0 a 1023 mentre il range dei valori PWM e' da 0 a 255
per mantenere questa proporzionalita' eseguo la mappatura dei valori
*/
int valoreMappato = map(valorePotenziometro, 0, 1023, 0, 255);
determinaMovimento(valoreMappato);
}
void determinaMovimento(int valoreMappato) {
String direzione;
if (valoreMappato < 121) {
//vai in un senso
del = map(valoreMappato, 0, 121, 1500, 10000);
een();
twee();
drie();
vier();
direzione = "DIETRO";
stopped = 0;
} else if (valoreMappato > 135) {
//vai nell'altro
del = map(valoreMappato, 135, 255, 10000, 1500);
vier();
drie();
twee();
een();
direzione = "AVANTI";
stopped = 0;
} else if (valoreMappato > 100 && valoreMappato < 150) {
//ferma il motore
motorOff();
direzione = "FERMO";
valoreMappato = 0;
}
//Invio i dati letti al Monitor seriale, cosi da poterli vedere a video
// Serial.print("Velocità = ");
// Serial.println(del);
// Serial.print("Direzione = ");
Serial.println(direzione);
Serial.println(stopped);
}
void een(){
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
delayMicroseconds(del);
}
void twee(){
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
delayMicroseconds(del);
}
void drie(){
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
delayMicroseconds(del);
}
void vier(){
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
delayMicroseconds(del);
}
void motorOff(){
if (!stopped){
timstop.update();
}
else
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
}