Ciao,
prima di tutto ti ringrazio dell'aiuto ...
non riesco a capire come possa trasformare la write in writemicroseconds ... ti allego il codice forse riesco a farmi capire :
// library:
#include <LiquidCrystal.h>
#include <Servo.h>
// Define object:
LiquidCrystal objLcd( 12 , 11 , 5 , 4 , 3 , 2);
Servo objOschi_1;
// set pin numbers:
const int OSCI_1 = 46;
const int SET = 32;
const int PIU = 33;
const int MENO = 34;
const int CONF = 35;
// variables will change:
int StatoBottone=0;
int val;
int posizione = 10;
int Numero_Pompa = 1;
int Angolazione_min = 1;
int Angolazione_max = 360;
char buffer[11];
boolean Sommo = true;
void setup() {
objOschi_1.attach(OSCI_1);
pinMode(SET, INPUT );
pinMode(PIU, INPUT);
pinMode(CONF, INPUT);
// attachInterrupt(0, SettingMode, RISING );
InitLcd();
Serial.begin(9600);
}
void loop() {
if (digitalRead(SET) == HIGH) { SettingMode(); } ;
objOschi_1.write(posizione);
if (Sommo){
posizione++;
if (posizione >=Angolazione_max) { Sommo=false; } ;
}
else {
posizione--;
if (posizione <=Angolazione_min) { Sommo=true; } ;
}
delay(15);
};
void InitLcd() {
objLcd.begin(16, 2);
objLcd.print("Connecting ...");
delay(1500);
objLcd.clear();
objLcd.setCursor(0, 0);
objLcd.print("OsciMotion Italy");
}
void SettingMode()
{
boolean setMode = true;
boolean setNotConfirmPompa = true;
boolean setNotConfirmAngoloMin = true;
boolean setNotConfirmAngoloMax = true;
int setModeLevel = 0;
int AngoloMin = Angolazione_min;
int AngoloMax = Angolazione_max;
Numero_Pompa=1;
while ( setMode )
{
if ( setModeLevel == 0 )
{
sprintf(buffer, "Pompa N. %d", Numero_Pompa);
objLcd.clear();
objLcd.setCursor(0, 0);
objLcd.print("Scegliere Pompa");
objLcd.setCursor(0, 1);
objLcd.print(buffer);
delay(15);
while ( setNotConfirmPompa )
{
if (digitalRead(PIU) == HIGH)
{
Numero_Pompa++ ;
if (Numero_Pompa > 5) {Numero_Pompa=1;};
sprintf(buffer, "Pompa N. %d", Numero_Pompa);
objLcd.setCursor(0, 1);
objLcd.print(buffer);
delay(400);
}
if (digitalRead(MENO) == HIGH)
{
Numero_Pompa-- ;
if (Numero_Pompa < 1) {Numero_Pompa=5;};
sprintf(buffer, "Pompa N. %d", Numero_Pompa);
objLcd.setCursor(0, 1);
objLcd.print(buffer);
delay(400);
}
if (digitalRead(CONF) == HIGH)
{
setModeLevel++;
setNotConfirmPompa=false;
delay(200);
}
}
}
if ( setModeLevel == 1 )
{
sprintf(buffer, "Angolo %d", AngoloMin);
objLcd.clear();
objLcd.setCursor(0, 0);
objLcd.print("Angolo Minimo");
objLcd.setCursor(0, 1);
objLcd.print(buffer);
objOschi_1.write(AngoloMin);
delay(15);
while (setNotConfirmAngoloMin)
{
if (digitalRead(PIU) == HIGH)
{
AngoloMin++ ;
if (AngoloMin > 170) {AngoloMin=1;};
sprintf(buffer, "Angolo %d", AngoloMin);
objLcd.clear();
objLcd.setCursor(0, 0);
objLcd.print("Angolo Minimo");
objLcd.setCursor(0, 1);
objLcd.print(buffer);
objOschi_1.write(AngoloMin);
delay(250);
}
if (digitalRead(MENO) == HIGH)
{
AngoloMin--;
if (AngoloMin < 1) {AngoloMin=170;};
sprintf(buffer, "Angolo %d", AngoloMin);
objLcd.clear();
objLcd.setCursor(0, 0);
objLcd.print("Angolo Minimo");
objLcd.setCursor(0, 1);
objLcd.print(buffer);
objOschi_1.write(AngoloMin);
delay(250);
}
if (digitalRead(CONF) == HIGH)
{
setModeLevel++;
setNotConfirmAngoloMin=false;
Angolazione_min=AngoloMin;
posizione=AngoloMin;
Sommo = true;
delay(200);
}
}
}
if ( setModeLevel == 2 )
{
sprintf(buffer, "Angolo %d", AngoloMax);
objLcd.clear();
objLcd.setCursor(0, 0);
objLcd.print("Angolo Massimo");
objLcd.setCursor(0, 1);
objLcd.print(buffer);
objOschi_1.write(AngoloMax);
delay(15);
while (setNotConfirmAngoloMax)
{
if (digitalRead(PIU) == HIGH)
{
AngoloMax++ ;
if (AngoloMax > 360) {AngoloMax=1;};
sprintf(buffer, "Angolo %d", AngoloMax);
objLcd.clear();
objLcd.setCursor(0, 0);
objLcd.print("Angolo Massimo");
objLcd.setCursor(0, 1);
objLcd.print(buffer);
objOschi_1.write(AngoloMax);
delay(250);
}
if (digitalRead(MENO) == HIGH)
{
AngoloMax--;
if (AngoloMax < 1) {AngoloMax=1;};
sprintf(buffer, "Angolo %d", AngoloMax);
objLcd.clear();
objLcd.setCursor(0, 0);
objLcd.print("Angolo Massimo");
objLcd.setCursor(0, 1);
objLcd.print(buffer);
objOschi_1.write(AngoloMax);
delay(250);
}
if (digitalRead(CONF) == HIGH)
{
setModeLevel++;
setNotConfirmAngoloMax=false;
Angolazione_max=AngoloMax;
posizione=AngoloMax;
Sommo = false;
delay(200);
}
}
}
if ( setModeLevel == 3 ) {
objLcd.clear();
objLcd.setCursor(0, 0);
objLcd.print("Saving ...");
delay(600);
objLcd.clear();
objLcd.setCursor(0, 0);
objLcd.print("OsciMotion Italy");
setMode = false;
}
}
delay(600);
}
Come vedi ho dei valori iniziali ed il servo fa da valore minimo a valore massimo poi successivamente da valore massimo a minimo ...
Se premo il tasto Setting posso impostare il valore minimo attraverso i bottoni più e meno (man mano che premo vedo il servo che si muove) ... stessa cosa per valore massimo ...
come posso trasformare il valore posizione 1 in microseconds ?
il mio servo dovrebbe fare al max 360° mentre il servo gira 3,5 volte ...
please help