Offline
Newbie
Karma: 0
Posts: 28
|
 |
« Reply #6 on: February 06, 2013, 11:07:21 am » |
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
|