Jump to content

RCX/NXT/EV3 - Programmazione con NQC/NXC


Post raccomandati

Buongiorno a tutti!

 

Ho a disposizione alcuni RCX (sia 1.5 che 2.0), due NXT 2.0 e due EV3 :)

Finora ho sempre utilizzato il software originale LEGO per realizzare semplici progetti... ma visto che qualcuno (Valter1966 ne sai qualcosa??? ) mi ha lanciato la "sfida" di partecipare a Lecco 2015 con un mio robot per il SUMO robotico, è ora di passare ad un livello successivo di programmazione.

Pertanto, durante i prossimi giorni di ferie, mi dedicherò un po' allo studio del linguaggio NQC/NXC ;D

 

Ho scaricato e stampato un paio di tutorial sia su NQC che su NXC (quello di Daniele Benedetelli e quello di Mark Overmars) e porterò con me (nella località di villeggiatura) un RCX ed un NXT con i relativi motori/sensori/cavi, allo scopo di fare qualche esperimento.

 

Ho conoscenze avanzate di programmazione (essendo un sviluppatore software) seppur utilizzando altri linguaggi di programmazione (VB/VB.NET/C#) e, da quel che ho visto, l'ambiente di sviluppo (BricxCC) e il linguaggio NQC, sono abbastanza intuitivi.

 

Inizierò con l'RCX, visto che ho intenzione di realizzare un semplice sistema di controllo per un circuito ferroviario e per un modulo GBC che sto sviluppando.

Poi passerò all'NXT, per realizzare un paio di sumo-robot di test...

 

Scrivo questo post per raccogliere alcuni suggerimenti, indicazioni e consigli, *anche banali* che un "newbie" come come, deve conoscere per non perdere tempo ed iniziare subito a "produrre" con questo sistema :D:D:D

 

Ad esempio: c'è qualche particolare accortezza per quanto riguarda i driver?

Lavoro con WinXP Pro ed ho la torretta USB per l'RCX ma ricordo che, in passato, ho avuto un po' di problemi a farla funzionare... tanto che, sul PC di casa, uso la torretta con porta seriale.

Inoltre, ho notato che, spesso, il trasferimento via IrDA tra torretta e RCX non va a buon fine... ho letto che può essere un problema di luce... c'è qualche workaround a proposito?

 

Insomma, l'idea di questo thread è quella di raccogliere un po' di info, link, consigli ed esperienze reali per "giocare" al meglio, con questi brick ;)

 

Grazie in anticipo a chiunque collaborerà a questa raccolta di informazioni ;)

Link to comment
Condividi su altri siti

 

Scrivo questo post per raccogliere alcuni suggerimenti, indicazioni e consigli, *anche banali* che un "newbie" come come, deve conoscere per non perdere tempo ed iniziare subito a "produrre" con questo sistema :D:D:D

 

 

Caschi a fagiolo!!! :D:D:D

Anche io vorrei realizzare della semplice automazione ferroviaria. ;)

 

E anche io ho gli RCX! Ma con una piccola differenza: non so programmare!!!

 

Riguardo al controllo ferroviario, tempo fa, il grande Mario Ferrari mi aveva passato un paio di suoi software per RCX, e li potremo analizzare.

 

Per la torretta, io uso quella USB su PC con WinXP, ma so che occorre scaricare il driver giusto, più una patch.

Qui trovi qualche cosa: http://www.philohome.com/sdk25/sdk25.htm

 

E' un pò di tempo che non faccio più niente, ma è ora che mi rinfresco la memoria!!!

 

Link to comment
Condividi su altri siti

E anche io ho gli RCX! Ma con una piccola differenza: non so programmare!!!

(...)

E' un pò di tempo che non faccio più niente, ma è ora che mi rinfresco la memoria!!!

Bene! Devo dire che l'input per passare a NQC/NXC l'ho avuto sia in occasione di Empoli 2014 (guardando Biffuz che riprogrammava al volo (con il mio PC, tra l'altro :D:D:D ) l'RCX che controllava il treno del suo GBC e in occasione di Lecco 2014, grazie alla chiacchierata con Alf e con Valter1966.

 

Se hai modo di passarmi il file che ti aveva fornito Mario, ci do un'occhiata anch'io, e vediamo cosa ne riusciamo tirar fuori ;)

Link to comment
Condividi su altri siti

Ok, ho "speso" la prima mezz'ora con Bricxcc :P

 

Alcune note positive:

1) La torretta USB ha funzionato al volo...

2) Mai, prima d'ora, ero riuscito a scaricare il firmware sull'RCX senza riscontrare alcun problema, come questa volta

3) In meno di 10 minuti il mio programma NQC girava sull'RCX :D

 

Il programma è banale e la sua funzionalità finale sarà quella di invertire il senso di rotazione di un motore, ogni qualvolta viene premuto un pulsante.

Lo scopo è quello di utilizzarlo, in futuro, su un tracciato ferroviario 9V "aperto", con il tram del trasporto urbano (set 8404) che fa 'avanti/indietro' sul percorso, dalla stazione A alla stazione B e viceversa.

 

E' composto da due task, main e WaitForStopProgram , che "viaggiano paralleli".

Il programma parte dal task main (che, per default, è il principale) che, a sua volta, lancia il task WaitForStopProgram .

Quest'ultimo non fa nulla di particolare, se non attendere che venga premuto il sensore di tocco collegato alla porta 3, e fermare tutto!

 

La "logica" principale è tutta nel task main ,

Si parte da una situazione in cui il motore (posizionato sulla porta A) è fermo.

Il ciclo infinito, stabilito dall'istruzione while (true), resta in attesa che venga premuto il sensore di tocco collegato alla porta 1.

Quando ciò avviene, viene testato il valore della variabile locale VersoRotazione e, in base al suo valore (0 o 1, ovvero AVANTI o INDIETRO) non fa altro che invertire il senso di marcia del motore, attendendo un po' di tempo, a motore fermo (simulando la fermata alla stazione).

 

Immaginate questa situazione: due sensori di tocco collegati in parallelo sulla stessa porta 'A', e posizionati ognuno all'estremo di una parte del circuito ferroviario (aperto, vi ricordo).

Il treno è al centro del circuito (o comunque, lontano dai due sensori di tocco).

A questo punto si preme (manualmente) uno dei due sensori e il programma, dopo aver atteso un paio di secondi (stabilito dalla costante TEMPO_FERMATA_STAZIONE ) fa partire il treno in direzione 'AVANTI'.

Quando il treno raggiungerà il punto finale di una delle due estremità del circuito, ovvero quando azionerà uno dei due sensori di tocco posto lungo il tracciato ferroviario, in prossimità di una delle due stazioni, verrà fermato.

Dopo un paio di secondi (tempo ovviamente modifibile intervenendo sul valore della costante TEMPO_FERMATA_STAZIONE) ripartirà in direzione opposta.

...e così via.

 

Il programma ovviamente non è perfetto, ed è giusto per prendere confidenza con Bricxcc e il linguaggio NQC.

 

Suggerimenti e commenti sono più che graditi ;)

 

#define AVANTI 0
#define INDIETRO 1
#define TEMPO_FERMATA_STAZIONE 200

task main()
{

 int VersoRotazione;
 VersoRotazione=INDIETRO;
 SetSensor(SENSOR_1,SENSOR_TOUCH);
 SetPower(OUT_A,2);

 start WaitForStopProgram;

  while (true)
 {
   if (SENSOR_1 == 1)
   {

      if (VersoRotazione==INDIETRO)
      {
           VersoRotazione=AVANTI;
           Off(OUT_A); Wait(TEMPO_FERMATA_STAZIONE);
           SetPower(OUT_A,2); OnFwd(OUT_A);
           Wait(150);
       }
       else
       {
           VersoRotazione=INDIETRO;
           Off(OUT_A); Wait(TEMPO_FERMATA_STAZIONE);
           SetPower(OUT_A,2); OnRev(OUT_A); 
          Wait(150);
       }
   }
 }
}

task WaitForStopProgram ()
{
       SetSensor(SENSOR_3,SENSOR_TOUCH);
       while (true)
         {
          if (SENSOR_3 == 1)
            {
            StopAllTasks ();
            }
         }
}

Link to comment
Condividi su altri siti

Non riesco ad aprire un topic nuovo per l'argomento..

Che voi sappiate, è possibile programmare ev3 senza installare un nuovo firmware? Installando un nuovo firmware, poi com'è possibile tornare al firmware originale Lego?

Attualmente ho provato solo lejos installandolo su schedina sd ma preferivo qualcosa di stabile in rom (o ram?) dell'ev3..

Link to comment
Condividi su altri siti

Ciao,

Ti confermo che è possibile programmare l'EV3 senza la necessità di installare un firmware modificato:

http://bricxcc.sourceforge.net

 

Non ho ancora avuto modo di testare un firmware alternativo, ma leggendo alcuni post su altri forum, pare sia possibile ripristinare il firmware originale senza alcun problema:

http://www.thenxtstep.com/2013/08/how-to-update-your-ev3-firmware.html?m=1

Link to comment
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente registrato per postare un commento

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!

Registra un nuovo account

Accedi

Hai un account? Accedi .

Accedi ora
  • Visualizzato ora da   0 utenti

    • Nessun utente registrato su questa pagina.
×
×
  • Crea nuovo...