Ciao scusate ma ho un altro problema, quello che segue è lo sketch completo, se commento il codice nei punti che ho chiamato commento 1 e commento 2 lo sketch funziona, tranne ovviamente la parte riguardante il motore deputato alla rotazione della tv, se tolgo i commenti lo sketch non si comporta correttamente i segnali inviati dal telecomando non producono l'azione corretta.
Cercherò di essere più chiaro, io voglio che premendo il tasto1 del telecomando il motore passo passo si azioni portando avanti la tv, che raggiunto il fine corsa aziona un secondo motore che la fa ruotare avanti fino a che tocca un altro finecorsa.
Premendo il tasto 0 volglio che avvenga il contrario, prima la tv deve ruotare per rimettersi in posizione orrizontale e poi toccato un micro deve avviare il motore passo passo per arretrare.
//Inclusione delle librerie necessarie
#include <SoftwareSerial.h>
#include <IRremoteInt.h>
#include <IRremote.h>
//Definizione dei pin
static int pinAcceleratore = A0; //pin analogico deputato a leggere i valori del potenziometro
static int mA = 12; //pin digitale per determinare gli stati logici da inviare al modulo (IN1)
static int mB = 13; //pin digitale per determinare gli stati logici da inviare al modulo (IN2)
//Definisco il senso di marcia del motore
/*
mA | mB | Evento
-----|-------|----------------------
LOW | LOW | fermo
LOW | HIGH | Movimento in un senso
HIGH | LOW | Movimento senso opposto
HIGH | HIGH | Fermo
*/
static int pinPotenza = 11; //pin digitale tramite il quale inviare un segnale di tipo PWM tramite la funzione analgWrite() (ENA)
int accelerazione; //valore letto dal pin A0
int potenza; //valore in uscita dal pin 11
int limitswitchPinRotazioneAvantiTV=6; //pin di arduino collegato al segnale S del micro azionato quando la TV ruota avanti
int limitswitchPinRotazioneIndietroTV=5; //pin di arduino collegato al segnale S del micro azionato quando la TV ruota indietro
const int pinDir = 2; //pin di arduino collegato al pin DIR del dirver che comanda il motore passo-passo
const int pinStep = 3; //pin di arduino collegato al pin DIR del dirver che comanda il motore passo-passo
int limitswitchPinTVdentro=8; //pin di arduino collegato al segnale S del micro azionato quando la TV è completamente rientrata
int limitswitchPinTVfuori=7; //pin di arduino collegato al segnale S del micro azionato quando la TV è completamente uscita
const int numStepMotore = 200; //imposto il numero di step per rotazione del motore
const long velocita = 400; //imposto i microsecondi tra un impulso e l'altro sul pin STEP a 500
int receiver = 10; // pin 1 of IR receiver to Arduino digital pin 11
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;
void setup()
{
pinMode(10,OUTPUT); // imposto il pin 10 che riceverà il segnale dal telecomando
pinMode(limitswitchPinTVdentro,INPUT); //inizializzo il pin a cui è collegato il segnale del micro a TV rientrata
pinMode(limitswitchPinTVfuori,INPUT); //inizializzo il pin a cui è collegato il segnale del micro a TV uscita
pinMode(6, INPUT_PULLUP); //inizializzo il pin a cui è collegato il micro rotazione tv avanti
pinMode(5, INPUT_PULLUP); //inizializzo il pin a cui è collegato il micro rotazione tv indietro
pinMode(pinStep, OUTPUT); //inizializzo il PIN STEP come OUTPUT
pinMode(pinDir, OUTPUT); //inizializzo il PIN DIR come OUTPUT
pinMode(mA, OUTPUT); //inizializzo il PIN mA (IN1)come OUTPUT
pinMode(mB, OUTPUT); //inizializzo il PIN mB (IN2)come OUTPUT
pinMode(pinAcceleratore, INPUT); //inizializzo il PIN A0 come OUTPUT
pinMode(pinPotenza, OUTPUT); //inizializzo il PIN 11 come OUTPUT
digitalWrite(mA, LOW); // imposto come fermo il motore
digitalWrite(mB, LOW); // "
Serial.begin(9600); // for serial monitor output
irrecv.enableIRIn(); // Start the receiver
pinMode(9, OUTPUT); // Pin 9 output
}
void loop()
{
int sensorVal = digitalRead(6);
if (irrecv.decode(&results)) // have we received an IR signal?
{
Serial.println(results.value, HEX); // display it on serial monitor in hexadecimal
irrecv.resume();// receive the next value
}
if ( results.value == 0xB4B4DC23 ) //se premo il tasto 1 sul telecomando
{
while(digitalRead(limitswitchPinTVfuori)==HIGH){
digitalWrite(9, HIGH); //il LED si accende
digitalWrite(pinDir, HIGH);
for (int x = 0; x < numStepMotore; x++ ) {
digitalWrite(pinStep, HIGH);
delayMicroseconds(velocita);
digitalWrite(pinStep, LOW);
delayMicroseconds(velocita);
}
}
/* commento1
if(sensorVal == HIGH){
accelerazione = analogRead(pinAcceleratore);
potenza = map(accelerazione, 0, 1024, 0, 255);
digitalWrite(mA, LOW);
digitalWrite(mB, HIGH);
analogWrite(pinPotenza, potenza);
}*/
}
if ( results.value == 0xB4B422DD ) //se premo il tasto 0 sul telecomando
{
/*commento2
while(digitalRead(limitswitchPinRotazioneIndietroTV)==HIGH){
digitalWrite(mA, HIGH);
digitalWrite(mB, LOW);
}*/
while(digitalRead(limitswitchPinTVdentro)==HIGH){
digitalWrite(9, LOW);
digitalWrite(pinDir, LOW);
for (int x = 0; x < numStepMotore; x++ ) {
digitalWrite(pinStep, HIGH);
delayMicroseconds(velocita);
digitalWrite(pinStep, LOW);
delayMicroseconds(velocita);
}
}
}
}