Per chi volesse il programma aggiornato con il conteggio dell'assorbimento
#include <TimerOne.h>
#define bH 6//interrutore velocità massima
#define bM 7//interrutore velocità media
#define bL 8//interrutore velocità minima
#define TIMER_US 100000 // 100mS set timer duration in microseconds
#define TICK_COUNTS 20 // 2S worth of timer ticks
#include <LiquidCrystal.h>
int buH = LOW;
int buM = LOW;
int buL=LOW;
volatile long tick_count = TICK_COUNTS; // Counter for 2S
volatile bool in_long_isr = false; // True if in long interrupt
// Viene inzializzata la libreria del Display con i relativi PIN a cui è connesso il Display
LiquidCrystal lcd(13, 11, 5, 4,10, 2);
void setup() {
Serial.begin(9600);
Timer1.initialize(TIMER_US); // Initialise timer 1
Timer1.attachInterrupt( interruptAssorbimento ); // attach the ISR routine here
//INTERRUTORI
pinMode(bH, INPUT);
pinMode(bM, INPUT);
pinMode(bL,INPUT);
//LCD
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Stampa a video la parola "hello, world!"
lcd.print(" CHIUSURA:");
// MOTOR SHIELD Impostazione canale A
pinMode(A0, INPUT);
pinMode(12, OUTPUT); // Inizializzazione del pin direzione del motore collegato al canale A
pinMode(9, OUTPUT); // Inizializzazione del pin brake del motore collegato al canale A
}
void loop() {
buH = digitalRead( bH);
buM = digitalRead( bM);
buL = digitalRead( bL);
// Imposta il cursore alla colonna 0, riga 1
// (nota: line 1 è la seconda riga, dal momento che il conteggio inizia dallo 0):
lcd.setCursor(0, 1);
//lcd.print(millis()/1000);
// direzione in avanti alla massima velocità
if (buH == HIGH ){
digitalWrite(12, HIGH); // Impostazione della direzione “avanti” del motore collegato al canale A
digitalWrite(9, LOW); // Disattivazione del brake del motore per il canale A
analogWrite(3, 255); // Massima velocità del motore collegato al canale A
delay(3000);// tempo di rotazione in avanti
digitalWrite(9, HIGH); // Attivazione del brake del motore per il canale A
delay(1000);// tempo di stop del motore
// direzione indietro con velocità metà della velocità massima
digitalWrite(12, LOW); // Impostazione della direzione “indietro” del motore collegato al canale A
digitalWrite(9, LOW); // Disattivazione del brake del motore per il canale A
analogWrite(3, 127); // Metà della velocità massima del motore collegato al canale A
delay(3000);// tempo di rotazione in avanti
digitalWrite(9, HIGH); // Attivazione del brake del motore per il canale A
delay(1000); // tempo di stop del motore
lcd.print("FORZA 3000N");//stampa valore della forza
}
// direzione in avanti alla velocità media
if (buH == LOW and buM == HIGH and buL==LOW )
{
digitalWrite(12, HIGH); // Impostazione della direzione “avanti” del motore collegato al canale A
digitalWrite(9, LOW); // Disattivazione del brake del motore per il canale A
analogWrite(3, 127); // Media velocità del motore collegato al canale A
delay(3000); // tempo di rotazione in avanti
digitalWrite(9, HIGH); // Attivazione del brake del motore per il canale A
delay(1000); // tempo di stop del motore
// direzione indietro con velocità metà della velocità massima
digitalWrite(12, LOW); // Impostazione della direzione “indietro” del motore collegato al canale A
digitalWrite(9, LOW); // Disattivazione del brake del motore per il canale A
analogWrite(3, 127); // Metà della velocità massima del motore collegato al canale A
delay(3000); // tempo di rotazione in avanti
digitalWrite(9, HIGH); // Attivazione del brake del motore per il canale A
delay(1000); // tempo di stop del motore
lcd.print("FORZA 2000N");//stampa valore della forza
}
// direzione in avanti alla minima velocità
if (buH== LOW and buM == LOW and buL==HIGH )
{
digitalWrite(12, HIGH); // Impostazione della direzione “avanti” del motore collegato al canale A
digitalWrite(9, LOW); // Disattivazione del brake del motore per il canale A
analogWrite(3, 127); // Minima velocità del motore collegato al canale A
delay(3000); // tempo di rotazione in avanti
digitalWrite(9, HIGH); // Attivazione del brake del motore per il canale A
delay(1000); // tempo di stop del motore
// direzione indietro con velocità metà della velocità massima
digitalWrite(12, LOW); // Impostazione della direzione “indietro” del motore collegato al canale A
digitalWrite(9, LOW); // Disattivazione del brake del motore per il canale A
analogWrite(3, 127); // Metà della velocità massima del motore collegato al canale A
delay(3000); // tempo di rotazione in avanti
digitalWrite(9, HIGH); // Attivazione del brake del motore per il canale A
delay(1000); // tempo di stop del motore
lcd.print("FORZA 1000N");// stampa valore della forza
}
}
void interruptAssorbimento()
{
// 5 V / 1024 ADC counts = 4.88 mV per count
// 3.3 V = 2.0 A; 3.3 V / 4.88 mv per count = 676 counts
// 2.0 A / 676 counts = 2.96 mA per count
double assorbimento= analogRead(A0) * 2.96;
Serial.println(assorbimento);
}