Salve, mi sono appena iscritto in questo forum e cerco aiuto riguardo il mio problema.
Il mio programma deve far ruotar eun motore fino al punto desiderato(che può essere modificato via seriale). Il mio problema è che nonostante il software rilevi una diversa posizione il motore rimane fermo come se fosse già nella posizione corretta.
#include <LiquidCrystal.h>
int pin = A0;
int valore = 0;
int pin11 = 11;
int pin12 = 12;
int angolo = 180;
int prova;
const int rs = 31, en = 33, d4 = 35, d5 = 37, d6 = 39, d7 = 41;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
Serial.begin(9600);
pinMode(pin11, OUTPUT);
pinMode(pin12, OUTPUT);
}
void loop() {
if (Serial.available() > 0)
{
angolo = Serial.parseInt();
Serial.print("angolo");
Serial.println(angolo);
delay(1000);
}
valore= analogRead(pin);
prova = map(valore, 0, 1023, 0, 360);
Serial.print("prova");
Serial.println(prova);
if(angolo>360)
{
angolo=360;
}
while(prova>angolo+2) //rotazione indietro
{
digitalWrite(pin11, LOW);
digitalWrite(pin12, HIGH);
valore= analogRead(pin);
prova = map(valore, 0, 1023, 0, 360);
Serial.print("maggiore");
Serial.println(prova);
}
while(prova<angolo-2) //rotazione in avanti
{
digitalWrite(pin11, HIGH);
digitalWrite(pin12, LOW);
valore= analogRead(pin);
prova = map(valore, 0, 1023, 0, 360);
Serial.print("minore");
Serial.println(prova);
}
while(angolo-2<prova<angolo+2)
{
digitalWrite(pin11, LOW);
digitalWrite(pin12, LOW);
valore= analogRead(pin);
prova = map(valore, 0, 1023, 0, 360);
Serial.print("uguale");
Serial.println(prova);
lcd.setCursor(0,1);
lcd.print(prova);
Serial.println(angolo);
}
}
Scusate se sono stato poco chiaro, in poche parole mi si blocca tutto nell'ultimo ciclo stamoandomi sempre "uguale"anche se i valori sono differenti