da
fantamed » 13 nov 2013, 15:48
Ho provato e funziona benissimo,lo ho modificato aggiungendo switch per il secondo servo .
Ti spiego il kit e uguuale a questo:
http://www.ebay.com/bhp/camera-platformquindi con il programma dovrei riuscire a manovrare i quattro movimenti, mi resta il problema che:
Quando accendo i 2 servi si posizionano in centro e va bene,,ma quando li sposto devrebbero rimanere dove li lascio,invece cosi tornano sempre in centro .
Se elimino( case 0)il servo resta dove lo lascio e dovendo fare uno minimo sforzo per muovere la telecamerina dovrebbe rimanere dove e ,poi sposto il ciclo della posizione centrale appena dopo settaggio(); e lo faccio eseguire una volta sola per il tempo di uno spostamento di 90°per sicurezza qualora il servo fosse tutto da un lato
Sinceramente avevo dato solo un'occhio alla funzione (switch),con il tuo esempio adesso ho capito come si usa

potresti farmi un esempio di costante su questo programma cosi me la studio
Se faccio cosi puo andare?
nuovo codice
- Codice: Seleziona tutto
#include <PIC.h> // contiene i nomi mnemonici di registri e porte
__CONFIG(0x3FF9);
#define PIC_CLK 4000000 //4Mhz
#include "delay.c"
#include "settaggioservo.h" // file che contiene il settaggio delle porte
void main(void)
{
settaggio();
while(1) {
sel1 = 0;
sel2 = 0;
if (PL1==0) //se premo pulsante 1
{
sel1 = 1;
}
if (PL2==0) //se premo pulsante 2
{
sel1 = 2;
}
if (PL3==0) //se premo pulsante 3
{
sel2 = 3;
}
if (PL4==0) //se premo pulsante 4
{
sel2 = 4;
}
switch (sel1) {
case 0: // servo in posizione centrale
LED=0; // spengo led
SER1=1; // segnale livello alto 1
for (i=0;i<6;i++)
{
DelayUs(250); //attesa 1.5 millisec. (posizione centrale)
}
SER1=0; // segnale livello basso 0
for (i=0;i<74;i++)
{
DelayUs(250); // attesa 18,5 millisec.
}
break;
case 1: // servo da un lato
LED=1;
SER1=1; // segnale livello alto 1
for (i=0;i<21;i++)
{
DelayUs(100); //attesa 2.1 millisec.
}
SER1=0; // segnale livello basso 0
for (i=0;i<180;i++)
{
DelayUs(99); //attesa 17.9 millisec. }
}
break;
case 2: // servo dall'altro lato
LED=1; //accendo led
SER1=1; // segnale livello alto 1
for (i=0;i<6;i++)
{
DelayUs(100); //attesa 0.6 millisec.
}
SER1=0; // segnale livello basso 0
for (i=0;i<194;i++)
{
DelayUs(100); // attesa 19.4 millisec.
}
break;
}
switch (sel2) {
case 0: // servo in posizione centrale
LED=0; // spengo led
SER2=1; // segnale livello alto 1
for (i=0;i<6;i++)
{
DelayUs(250); //attesa 1.5 millisec. (per posizione centrale)
}
// segnale livello basso 0
SER2=0;
for (i=0;i<74;i++)
{
DelayUs(250); // attesa 18,5 millisec.
}
break;
case 3: // servo da un lato
LED=1;
SER2=1; // segnale livello alto 1
for (i=0;i<21;i++)
{
DelayUs(100); //attesa 2.1 millisec.
}
SER2=0; // segnale livello basso 0
for (i=0;i<180;i++)
{
DelayUs(99); //attesa 17.9 millisec. }
}
break;
case 4: // servo dall'altro lato
LED=1; //accendo led
SER2=1; // segnale livello alto 1
for (i=0;i<6;i++)
{
DelayUs(100); //attesa 0.6 millisec.
}
SER2=0; // segnale livello basso 0
for (i=0;i<194;i++)
{
DelayUs(100); // attesa 19.4 millisec.
}
break;
}
}
}
grazie

buona giornata