Subject:
|
Re: "coso" a fibre ottiche come sensore di rotazione
|
Newsgroups:
|
lugnet.loc.it
|
Date:
|
Mon, 3 Jan 2000 19:08:54 GMT
|
Reply-To:
|
marcob@!IHateSpam!equalis.it
|
Viewed:
|
517 times
|
| |
| |
On Mon, 3 Jan 2000 14:29:06 GMT, "Mario Ferrari"
<mario.ferrari@edis.it> wrote:
> Marco (Beri), mi spieghi come si usa quel rotore a fibre ottiche come
> sensore di rotazione? Voglio fare una specie di display come quello che hai
> portato all'ultimo Legofest. Magari qualche piccolo esempio di codice non
> guasta...
> Penso che possa interessare anche ad altri.
Volentierissimo! Ecco tutto il codice. Purtroppo non e` commentato, ma
i task e le funzioni hanno nomi abbastanza semplici. Aggiungo comunque
questo breve "glossario":
sub ResetRadar()
Questa subroutine inizializza i vari sensori e "mette a posto le cose"
qualunque sia la posizione di partenza del sensore (questo e`
possibile perche` il sensore ha comunque un peg che lo blocca,
un'occhiata a
http://www.geocities.com/~marioferrari/itlug_19991128.html cercando
Beri puo` aiutare).
void TurnRight()
void TurnLeft()
void TurnOff()
Queste 3 funzioni semplicemente attivano/disattivano il motore in una
direzione piuttosto che nell'altra.
task PulseCounter()
Questo task (e` indispensabile che sia un task) tiene traccia dei
cambiamenti di stato, usando delle variabili globali.
void SetPosition(int Position)
Questa funzione invece posiziona il sensore nella posizione
desiderata.
Se avete domande o dubbi, sparate pure.
Ciao.
Marco.
=======================================================
int OldPulse;
int Pulse;
int Direction;
task PulseCounter()
{
int FlipFlop = 0;
while (true)
{
if (FlipFlop == 0)
{
if (SENSOR_1>700)
{
FlipFlop = 1;
Pulse += Direction;
}
}
else
{
if (SENSOR_1<600)
{
FlipFlop = 0;
Pulse += Direction;
}
}
}
}
void TurnRight()
{
SetPower(OUT_A,OUT_LOW);
OnFwd(OUT_A);
}
void TurnLeft()
{
SetPower(OUT_A,OUT_LOW);
OnRev(OUT_A);
}
void TurnOff()
{
Off(OUT_A);
}
sub ResetRadar()
{
SetSensorType(SENSOR_1, SENSOR_TYPE_ROTATION);
SetSensorMode(SENSOR_1, SENSOR_MODE_RAW);
Pulse = 0;
Direction = 1;
start PulseCounter;
TurnLeft();
Wait(30);
OldPulse = Pulse;
while(true)
{
Wait(10);
if (OldPulse == Pulse)
break;
OldPulse = Pulse;
}
TurnOff();
Wait(300);
Pulse = 0;
}
void SetPosition(int Position)
{
Position *= 2;
if(Position == Pulse)
return;
if(Position > 14)
Position = 14;
else if(Position < 0)
Position = 0;
if(Position > Pulse)
{
Direction = 1;
TurnRight();
}
else
{
Direction = -1;
TurnLeft();
}
ClearTimer(1);
while (Pulse != Position && Timer(1) < 15)
;
TurnOff();
// Timeout
if (Timer(1) > 15)
{
if(Position < 4)
Pulse = 0;
else
Pulse = 14;
}
}
task main()
{
ResetRadar();
while(true)
{
ClearMessage();
ClearTimer(0);
while(Message() == 0)
if(Timer(0)>10)
SetPosition(0);
SetPosition(Message());
}
}
|
|
Message has 1 Reply:
Message is in Reply To:
| | "coso" a fibre ottiche come sensore di rotazione
|
| Marco (Beri), mi spieghi come si usa quel rotore a fibre ottiche come sensore di rotazione? Voglio fare una specie di display come quello che hai portato all'ultimo Legofest. Magari qualche piccolo esempio di codice non guasta... Penso che possa (...) (25 years ago, 3-Jan-00, to lugnet.loc.it)
|
3 Messages in This Thread:
- Entire Thread on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
This Message and its Replies on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
|
|
|
|