To LUGNET HomepageTo LUGNET News HomepageTo LUGNET Guide Homepage
 Help on Searching
 
Post new message to lugnet.loc.itOpen lugnet.loc.it in your NNTP NewsreaderTo LUGNET News Traffic PageSign In (Members)
 Local / Italia / 747
746  |  748
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: 
450 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:
  Re: "coso" a fibre ottiche come sensore di rotazione
 
(...) hai (...) Molto chiaro. Grazie! Ciao Mario (25 years ago, 4-Jan-00, to lugnet.loc.it)

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
    

Custom Search

©2005 LUGNET. All rights reserved. - hosted by steinbruch.info GbR