ARDUINO Esplora |
|
La scheda ESPLORA si differenzia
da tutte le schede Arduino precedenti, poiché su di essa sono già montati, di
serie, diversi sensori.
In particolare sulla scheda ESPLORA sono presenti i seguenti dispositivi:
Un joystick analogico a due assi (X e Y) con pulsante centrale
4 pulsanti disposti a rombo
Un potenziometro lineare a cursore
Un microfono per rilevare il rumore ambientale.
Un sensore di luce per la misurazione dell’intensità luminosa
Un sensore per la misurazione della temperatura ambiente
Un accelerometro triassiale (X, Y e Z)
Un buzzer per produrre suoni
Un led luminoso a LED tipo RGB con elementi Rosso Verde e Blu.
2 Ingressi per collegare i moduli sensore della serie Tinkerkit.
2 uscite per collegare i moduli attuatori della serie Tinkerkit.
Un connettore per display
tipo TFT a colori opzionale, dotato di uno slot per scheda SD, o altri
dispositivi che utilizzano il protocollo SPI.
Programma di test per la scheda Arduino Esplora dotata di display TFT
Il programma proposto permette di testare tutti i sensori e gli attuatori presenti sulla scheda. Le istruzioni e i valori letti sono mostrati sul display TFT che deve essere obbligatoriamente installato. Il programma originale è presente a questo link:
http://21stdigitalhome.blogspot.it/2013/02/arduino-esplora-with-display-exercise.html
Questa versione è solamente un adattamento/traduzione delle istruzioni per utilizzarlo con le librerie originali Arduino. Anche i testi presenti sul display sono stati tradotti.
Appena caricato il programma sarà mostrata una pagina di presentazione da cui scegliere il tipo di prova da effettuare. Per fare questo occorrerà premere il relativo tasto tra quelli presenti alla destra del display. Con il tasto 1 si testano i vari sensori, con il tasto 2 si effettua il test del led RGB, mentre il tasto 3 permette il test del buzzer.
Test 1 - Sensori
Quando si premono i pulsanti o si
sposta il joystick, la parola appropriata passa dal bianco al verde. Muovendo il
potenziometro lineare (slider) i valori varieranno partendo da 1023 a sinistra a
0 sulla destra.
Viene visualizzato il valore del suono rilevato dal microfono (pronunciare
valore in sua corrispondenza) così come il valore di sensore di luce (coprire
per cambiare). La temperatura è misurata in gradi Celsius e Fahrenheit (sotto il
display sopra il cursore, soffiare fiato caldo per elevare la temperatura).
Infine, sono visualizzati i valori di accelerometro (X, Y e Z) (inclinare nelle
tre direzioni ESPLORA per vedere i cambiamenti). Quando si vuole uscire,
spingere verso il basso il joystick (non spostarlo, ma spingerlo con decisione
verso il basso) per tornare al menu.
Test 2 - Led RGB
Se dal menu principale si preme il tasto 2 si passa al programma di Test del LED RGB. I valori del rosso e verde possono essere regolati da 0 a 255 spostando il joystick verso l'alto, il basso, sinistra e destra. Mentre per regolare i valori del blu si dovrà variare la posizione del cursore del potenziometro lineare. Per uscire, premere di nuovo verso il basso il joystick.
Test 3 - Buzzer
Infine, per testare il buzzer selezionare il tasto 3 del menu principale. Si dovrà spostare il cursore del potenziometro lineare per regolare la frequenza. Partendo da frequenze basse con il cursore tutto a sinistra a frequenze più alte spostando il cursore verso destra. Se non si sposta il cursore il suono si arresterà dopo 5 secondi, per arrestarlo immediatamente premere il tasto 1. Premere di nuovo il joystick verso il basso per accedere al menu.
/* Il programma originale è stato adattato da Adriano Gandolfo per utilizzare la nuova libreria per la gestione della scheda Esplora Esplora Test - assumes you have a color display attached (Adafruit 1.8" breakout or compatible) This sketch allows to test the Esplora's peripherals Created on January 18, 2013 Mike Barela http://21stdigitalhome.blogspot.com/ Please keep attribution in derivative works, use in noncommercial and commercial products is granted Per Adafruit MIT license, following comments included *************************************************** This is an example sketch for the Adafruit 1.8" SPI display. This library works with the Adafruit 1.8" TFT Breakout w/SD card ----> http://www.adafruit.com/products/358 Check out the links above for our tutorials and wiring diagrams These displays use SPI to communicate, 4 or 5 pins are required to interface (RST is optional) Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! Written by Limor Fried/Ladyada for Adafruit Industries. MIT license, all text above must be included in any redistribution **************************************************** */ #include <Esplora.h> #include <TFT.h> // Arduino LCD library #include <SPI.h> char freqval[3]; // array to hold the temperature data char tempPrintout[5]; // array per contenere i dati di temperatura char freqPrintout[6]; // array per contenere i dati di frequenza char redPrintout[5]; // array per contenere i dati del colore rossso char greenPrintout[5]; // array per contenere i dati del colore verde char bluePrintout[5]; // array per contenere i dati del colore blue char lightPrintout[5]; // array per contenere i dati della luce char soundPrintout[5]; // array per contenere i dati del microfono char sliderPrintout[5];// array per contenere i dati dello slider char celsiusPrintout[5];// array per contenere i dati della temperatura in celsius char fahrenheitPrintout[5];// array per contenere i dati della temperatura in fahrenheit char x_axisPrintout[5];// array per contenere i dati accelerometro asse X char y_axisPrintout[5];// array per contenere i dati accelerometro asse Y char z_axisPrintout[5];// array per contenere i dati accelerometro asse Z String freq1; String redval; String greenval; String blueval; String sliderval; String lightval; String celsiusval; String fahrenheitval; String x_val; String y_val; String z_val; /* This array holds the last sensed state of each of the buttons read. Later in the code, you'll read the button states, and compare them to the previous states that are stored in this array. If the two states are different, it means that the button was either pressed or released. */ boolean buttonStates[8]; /* This array holds the names of the buttons being read. Later in the sketch, you'll use these names with the method Esplora.readButton(x), where x is one of these buttons. */ const byte buttons[] = { JOYSTICK_DOWN, JOYSTICK_LEFT, JOYSTICK_UP, JOYSTICK_RIGHT, SWITCH_RIGHT, SWITCH_LEFT, SWITCH_UP, SWITCH_DOWN, }; #define sound_pin 6 // Direct sound on Esplora (not currently used but you can use with tone() function) // instead of using Esplora.tone void setup() { EsploraTFT.begin(); EsploraTFT.background(0,0,0); //sfondo nero } void loop() { int S1, S2, S3; // holds values of switches 1 to 3 DisplaySplash(); // Display splash page and main menu S1=HIGH; S2=HIGH; S3=HIGH; while(S1==HIGH && S2==HIGH && S3==HIGH) { // keep reading buttons until one is pressed S1 = Esplora.readButton(SWITCH_1); S2 = Esplora.readButton(SWITCH_2); S3 = Esplora.readButton(SWITCH_3); if(S1==LOW) TestOutputs(); // if Switch 1 is pressed, test outputs else if(S2==LOW) TestLED(); // if switch 2 is [ressed, do LED mixer else if(S3==LOW) TestSound(); // if switch 3 is pressed, do buzzer test } // end while (breaks out if button presed and routine done (meaning go back to splash page) } void DisplaySplash() { // display first screen which is also the main menu EsploraTFT.background(0,0,0); //sfondo nero EsploraTFT.setTextSize(2); EsploraTFT.stroke(0,255,0); //colore del testo verde EsploraTFT.text("Benvenuti in",0,0); EsploraTFT.text(" Arduino",0,16); EsploraTFT.text(" Esplora",0,32); EsploraTFT.setTextSize(1); delay(500); EsploraTFT.stroke(255,255,0); //colore del testo giallo EsploraTFT.text("Premi un tasto",0,61); EsploraTFT.text("- 1 per test uscite",0,78); EsploraTFT.text("- 2 per test LED",0,91); EsploraTFT.text("- 3 per test suono",0,104); } void TestLED() { // text RGB LED on Esplora interactively int red, green, blue; // valid LED values are 0-255 int oldred=0, oldgreen=0, oldblue=0; // values to see if a value changed (don't write to screen unless change to avoid flicker) red=128; green=128; blue=128; // initially set to mid-white Esplora.writeRGB(red, green, blue); // Set LED initially in center which is moderate white EsploraTFT.background(0,0,0); //sfondo nero EsploraTFT.stroke(0,255,0); //colore del testo verde EsploraTFT.text("EsploraTest - RGB LED Test",0,0); EsploraTFT.stroke(255,255,255); //colore del testo bianco EsploraTFT.text("Joystick U/D per +- Rosso",0,14); EsploraTFT.text("Joystick L/R per +- Verde",0,24); EsploraTFT.text("Slider L/R per +- Blue",0,34); EsploraTFT.stroke(255,0,0); //colore del testo rosso EsploraTFT.text("Red",0,50); EsploraTFT.stroke(0,255,0); //colore del testo verde EsploraTFT.text("Green",0,70); EsploraTFT.stroke(0,0,255); //colore del testo blu EsploraTFT.text("Blue",0,90); EsploraTFT.stroke(255,255,0); //colore del testo blu EsploraTFT.text("Premere il joystick",0,107); EsploraTFT.text("quando finito ",0,117); while(Esplora.readJoystickButton()==HIGH) { // keep displaying values until joystick clicked down if(Esplora.readJoystickY() > 20) // if the joystick is moved significantly down if(red > 0) red--; if(Esplora.readJoystickY() < -20) // if the joystick is moved significantly up if(red < 255) red++; if(Esplora.readJoystickX() > 20) // if the joystick is moved significantly left if(green > 0) green--; if(Esplora.readJoystickX() < -20) // if the joystick is moved significantly right if(green < 255) green++; blue=map(Esplora.readSlider(), 1024, 0, 0, 255); // Map slider to 0-255 range for blue if(red!=oldred) { EsploraTFT.stroke(0,0,0); EsploraTFT.fill(0,0,0); EsploraTFT.rect(40,50, 29, 7); //Cancellazione valore EsploraTFT.stroke(255,0,0); //colore del testo rosso redval = String (red); redval.toCharArray (redPrintout,5); EsploraTFT.text(redPrintout ,40,50); // displayInt2(red, 40, 50, ST7735_RED, ST7735_BLACK); oldred=red; } if(green!=oldgreen) { EsploraTFT.stroke(0,0,0); EsploraTFT.fill(0,0,0); EsploraTFT.rect(40,70, 29, 7); //Cancellazione valore EsploraTFT.stroke(0,255,0); //colore del testo verde greenval = String (green); greenval.toCharArray (greenPrintout,5); EsploraTFT.text(greenPrintout ,40,70); oldgreen=green; } if(blue!=oldblue) { EsploraTFT.stroke(0,0,0); EsploraTFT.fill(0,0,0); EsploraTFT.rect(40,90, 29, 7); //Cancellazione valore EsploraTFT.stroke(0,0,255); //colore del testo blu blueval = String (blue); blueval.toCharArray (bluePrintout,5); EsploraTFT.text(bluePrintout ,40,90); oldblue=blue; } Esplora.writeRGB(red, green, blue); // set LED color delay(35); // leggera attesa } } void TestSound() { // text Sound "buzzer" on Esplora interactively unsigned int freq; unsigned int oldfreq; // value to see if a value changed (don't write to screen unless change to avoid flicker) int state=0; freq=0; oldfreq=0; Esplora.noTone(); // ensure tone is off EsploraTFT.background(0,0,0); //sfondo nero EsploraTFT.stroke(255,0,255); //colore del testo magenta EsploraTFT.text("EsploraTest - Buzzer",0,0); EsploraTFT.stroke(255,255,255); //colore del testo bianco EsploraTFT.text("Usare lo slider per variare",0,14); EsploraTFT.text("la frequenza del suono",0,27); EsploraTFT.text("Premere 1 per sospendere",0,40); EsploraTFT.text("l'emissione del suono",0,53); EsploraTFT.stroke(0,255,0); //colore del testo verde EsploraTFT.text("Frequenza: ",0,70); EsploraTFT.stroke(255,255,0); //colore del testo giallo EsploraTFT.text("Premere il joystick",0,107); EsploraTFT.text("per uscire",0,117); while(Esplora.readJoystickButton()==HIGH) { // keep displaying values until joystick clicked down freq=map(Esplora.readSlider(), 1024, 0, 0, 10000); // Map slider to 0-10,000 hz if(abs(freq-oldfreq)>=30) { // try to smooth out changes, still noisy, don't know why freq1= String (freq); // Convertire la stringa in un array di caratteri freq1.toCharArray (freqPrintout, 6); EsploraTFT.stroke(0,0,0); EsploraTFT.fill(0,0,0); EsploraTFT.rect(70,65,30,20); EsploraTFT.stroke(0,255,0); //colore del testo verde EsploraTFT.text(freqPrintout,70,70);// display frequency value EsploraTFT.text("Hz",105,70);// display frequency value oldfreq= freq; state=1; // slider change - we want a sound if (state==1) Esplora.tone(freq,5000); // play sound for 5 seconds } if(Esplora.readButton(SWITCH_1)==LOW && state==1) { Esplora.noTone(); // switch activated, no sound wanted state=0; } } Esplora.noTone(); // turn off sound when you exit test } void TestOutputs() { // dichiarazione delle variabili. I valori sono confrontati con // quelli esistemti per verificare il cambiamento unsigned int slidervalue = 0, oldslidervalue=9999; // update a display value if the unsigned int lightvalue=0, oldlightvalue=9999; // variable is the same as the previous unsigned int joybuttonvalue=0, oldjoybuttonvalue=9999; // one through a button poll loop unsigned int micvalue; int celsius, old_c=-999; int fahrenheit, old_f=-999; int x_axis, y_axis, z_axis; // accelerometer read values int oldx=0, oldy=0, oldz=0; // accelerometer stored values // Draw fixed screen elements first and do not redraw to avoid flicker EsploraTFT.background(0,0,0); //sfondo nero // Display fixed text values EsploraTFT.stroke(0,255,0); //colore del testo verde EsploraTFT.text("Esplora Test - Outputs",0,0); EsploraTFT.stroke(255,255,255); //colore del testo bianco EsploraTFT.text("Pulsanti:",0,14); EsploraTFT.text("Slider:",0,28); EsploraTFT.text("Light:",77,28); EsploraTFT.text("Joystick:",0,42); EsploraTFT.text("Microfono :",0,56); EsploraTFT.text("Temperatura:",0,70); EsploraTFT.text("Accelerometro X Y Z",0,84); EsploraTFT.stroke(255,255,0); //colore del testo giallo EsploraTFT.text("Premere il joystick",0,107); EsploraTFT.text("per uscire",0,117); while(Esplora.readJoystickButton()==HIGH) { // keep displaying values until joystick clicked down // for controller output, Iterate through all the buttons: for (byte thisButton=0; thisButton<8; thisButton++) { boolean lastState = buttonStates[thisButton]; boolean newState = Esplora.readButton(buttons[thisButton]); if (lastState != newState) { // Something changed! switch(thisButton) { case 0: if(newState==1){ EsploraTFT.stroke(255,255,255); //colore del testo bianco EsploraTFT.text("Down",56,42); } else{ EsploraTFT.stroke(0,255,0); //colore del testo verde EsploraTFT.text("Down",56,42); } break; case 1: if(newState==1){ EsploraTFT.stroke(255,255,255); //colore del testo bianco EsploraTFT.text("Left",100,42); } else{ EsploraTFT.stroke(0,255,0); //colore del testo verde EsploraTFT.text("Left",100,42); } break; case 2: if(newState==1) { EsploraTFT.stroke(255,255,255); //colore del testo bianco EsploraTFT.text("Up",83,42); } else { EsploraTFT.stroke(0,255,0); //colore del testo verde EsploraTFT.text("Up",83,42); } break; case 3: if(newState==1){ EsploraTFT.stroke(255,255,255); //colore del testo bianco EsploraTFT.text("Right",130,42); } else{ EsploraTFT.stroke(0,255,0); //colore del testo verde EsploraTFT.text("Right",130,42); } break; case 4: if(newState==1){ EsploraTFT.stroke(255,255,255); //colore del testo bianco EsploraTFT.text("S4",104,14); } else { EsploraTFT.stroke(0,255,0); //colore del testo verde EsploraTFT.text("S4",104,14); } break; case 5: if(newState==1){ EsploraTFT.stroke(255,255,255); //colore del testo bianco EsploraTFT.text("S2",68,14); } else{ EsploraTFT.stroke(0,255,0); //colore del testo verde EsploraTFT.text("S2",68,14); } break; case 6: if(newState==1){ EsploraTFT.stroke(255,255,255); //colore del testo bianco EsploraTFT.text("S3",86,14); } else{ EsploraTFT.stroke(0,255,0); //colore del testo verde EsploraTFT.text("S3",86,14); } break; case 7: if(newState==1) { EsploraTFT.stroke(255,255,255); //colore del testo bianco EsploraTFT.text("S1",50,14); } else { EsploraTFT.stroke(0,255,0); //colore del testo verde EsploraTFT.text("S1",50,14); } break; } } // Store the new button state, so you can sense a difference later: buttonStates[thisButton] = newState; } joybuttonvalue = Esplora.readJoystickSwitch(); if(joybuttonvalue) { // Joystick depressed //displayString(0,42,"Joystick:",ST7735_GREEN); use for screen switch? } else { } slidervalue = Esplora.readSlider(); if(slidervalue != oldslidervalue) { // Slider changed EsploraTFT.stroke(0,0,0); EsploraTFT.fill(0,0,0); EsploraTFT.rect(45,28, 29, 7); //Cancellazione valore EsploraTFT.stroke(255,0,255); //colore del testo magenta sliderval = String (slidervalue); sliderval.toCharArray (sliderPrintout,5); EsploraTFT.text(sliderPrintout ,45,28); oldslidervalue=slidervalue; // save for next time } lightvalue = Esplora.readLightSensor(); if(lightvalue!=oldlightvalue) { // light sensor changed EsploraTFT.stroke(0,0,0); EsploraTFT.fill(0,0,0); EsploraTFT.rect(115,28, 29, 7); //Cancellazione valore EsploraTFT.stroke(255,0,255); //colore del testo magenta lightval = String (lightvalue); lightval.toCharArray (lightPrintout,5); EsploraTFT.text(lightPrintout ,115,28); // displayInt(lightvalue,110,28,ST7735_WHITE,ST7735_BLACK); oldlightvalue=lightvalue; } String micvalue = String( Esplora.readMicrophone()); micvalue.toCharArray(soundPrintout, 5); EsploraTFT.stroke(0,0,0); EsploraTFT.fill(0,0,0); EsploraTFT.rect(75,56, 20, 10); EsploraTFT.stroke(0,255,255); EsploraTFT.text(soundPrintout, 75, 56); celsius = Esplora.readTemperature(DEGREES_C); fahrenheit = Esplora.readTemperature(DEGREES_F); if(celsius!=old_c) { celsiusval = String (celsius); celsiusval.toCharArray(celsiusPrintout, 5); EsploraTFT.stroke(0,0,0); EsploraTFT.fill(0,0,0); EsploraTFT.rect(75,70, 20, 10); EsploraTFT.stroke(255,0,0); EsploraTFT.text(celsiusPrintout, 75, 70); EsploraTFT.text("C", 90, 70); } if(fahrenheit!=old_f) { fahrenheitval = String (fahrenheit); fahrenheitval.toCharArray(fahrenheitPrintout, 5); EsploraTFT.stroke(0,0,0); EsploraTFT.fill(0,0,0); EsploraTFT.rect(100,70, 20, 10); EsploraTFT.stroke(255,0,0); EsploraTFT.text(fahrenheitPrintout, 100, 70); EsploraTFT.text("F", 115, 70); } old_c=celsius; old_f=fahrenheit; x_axis = Esplora.readAccelerometer(X_AXIS); y_axis = Esplora.readAccelerometer(Y_AXIS); z_axis = Esplora.readAccelerometer(Z_AXIS); if(x_axis!=oldx) { x_val = String (x_axis); x_val.toCharArray(x_axisPrintout, 5); EsploraTFT.stroke(0,0,0); EsploraTFT.fill(0,0,0); EsploraTFT.rect(30,96, 29, 7); EsploraTFT.stroke(255,255,255); EsploraTFT.text(x_axisPrintout, 30, 96); } if(y_axis!=oldy) { y_val = String (y_axis); y_val.toCharArray(y_axisPrintout, 5); EsploraTFT.stroke(0,0,0); EsploraTFT.fill(0,0,0); EsploraTFT.rect(70,96, 29, 7); EsploraTFT.stroke(255,255,255); EsploraTFT.text(y_axisPrintout, 70, 96); } if(z_axis!=oldz) { z_val = String (z_axis); z_val.toCharArray(z_axisPrintout, 5); EsploraTFT.stroke(0,0,0); EsploraTFT.fill(0,0,0); EsploraTFT.rect(110,96, 29, 7); EsploraTFT.stroke(255,255,255); EsploraTFT.text(z_axisPrintout, 110, 96); } oldx=x_axis; oldy=y_axis; oldz=z_axis; // store values for comparison next refresh /* Attesa di 50 ms tra un controllo e un altro pulsante. Quando viene premuto o rilasciato un interruttore meccanico, il contatti possono rimbalzare molto rapidamente. Se il controllo è fatto troppo veloce, questi rimbalzi possono essere confusi e si potrebbe condurre a un comportamento imprevisto. */ delay(50); } } |
Programma di test della memoria SD
Un altro programma presente negli allegati permette di testare la possibilità di lettura di file immagine bitmapped da mostrare poi sul display TFF. Per utilizzare il programma occorrerà avere una memoria mini-SD con una capacità da 1 MB, su cui memorizzare i file .bmp allegati. Si inserirà quindi la memoria nell’apposito alloggiamento presente sul display, nella parte superiore, lato presa USB. Una volta caricato il programma saranno mostrati ciclicamente i file sul display, l’accensione del led RGB in verde confermerà il riconoscimento corretto del file, l’accensione del led di colore rosso segnalerà un’anomalia.
Programma Esplora_test_TFT | Files immagini |
/* Esplora TFT Bitmap Logos Programma per testare la lettura di immagini da SD By Adriano Gandolfo www.adrirobot.it */ // include le necessarie librerie #include <Esplora.h> #include <SPI.h> #include <SD.h> #include <TFT.h> // si definisce il pin ESPLORA collegato alla linea di // selezione del circuito integrato per scheda SD #define SD_CS 8 // questa variabile rappresenta l'immagine da disegnare sullo schermo PImage slide; String numero; void setup() { // inizializzazione dello schermo e messsaggio iniziale EsploraTFT.begin(); EsploraTFT.background(0, 0, 0); EsploraTFT.setTextSize(1); EsploraTFT.stroke(0,255,0); //colore del testo verde EsploraTFT.text("Arduino Esplora",0,0); EsploraTFT.stroke(255,255,0); //colore del testo giallo EsploraTFT.text("Test SD - LCD Bitmap",0,16); EsploraTFT.setTextSize(1); // Tentare di accedere alla scheda SD. Se non funziona (ad esempio // Nessuna scheda presente), il LED di ESPLORA diventa rosso. EsploraTFT.text("Inizializzazione SD card",0,32); if (!SD.begin(SD_CS)) { EsploraTFT.stroke(255,0,0); //colore del testo rosso EsploraTFT.text("Fallita!",0,45); Esplora.writeRed(255); return; } EsploraTFT.stroke(0,255,0); //colore del testo verde EsploraTFT.text("OK !",0,45); EsploraTFT.stroke(255,0,255); //colore del testo magenta EsploraTFT.text("Premere il tasto S1",0,65); //Routine attesa pressione tasto S1 int S1; // holds values of switches 1 to 3 S1=HIGH; while(S1==HIGH ) { S1 = Esplora.readButton(SWITCH_1); if(S1==LOW) demo(); // se si preme il tasto viene avviata le demo } } // Ora si accederà alla scheda SD, se il caricamento non // andrà a buon fine si accenderà il led rosso void demo() { Esplora.writeRGB(0, 0, 0); for (int i=1; i <10; i++) { Esplora.writeRGB(0, 0, 0); numero = String (i); String immagine = String (numero + ".bmp"); char immagine_array[6]; immagine.toCharArray (immagine_array, sizeof(immagine_array)); slide = EsploraTFT.loadImage(immagine_array); if (slide.isValid()) { Esplora.writeGreen(255); } else Esplora.writeRed(255); EsploraTFT.image(slide, 0, 0); //tempo di attesa per nuova immagine delay(1000); } EsploraTFT.background(0, 0, 0); EsploraTFT.setTextSize(2); EsploraTFT.stroke(0,255,0); //colore del testo verde EsploraTFT.text("Test completo!",0,0); } void loop() { } |
Elenco revisioni | |
14/08/2013 | Emissione preliminare |