fbpx

Impariamo a programmare Arduino

Capita spesso di ricevere richieste di aiuto per la realizzazione di progetti basati su Ardunino®. Si parla di progetti e non di solo programma perché il più delle volte un circuito è sbagliato ed è quindi normale che il firmware poi non riesca ad assolvere al compito richiesto.

E’ fondamentale capire che si tratta di progettazione hardware e software/firmware integrata, non si può fare l’una senza avere in mente anche l’altra.

Quindi conoscere l’elettronica è prerequisito indispensabile per poter effettuare una corretta programmazione di qualsiasi microcontrollore. Perché di questo si tratta, Arduino® alla fine è poco più di un semplice microcontrollore montato su di un circuito stampato. Di per sé dispone già di diverse periferiche all’interno del package, ma se non viene opportunamente interfacciato al mondo esterno i malfunzionamenti sono garantiti.

Concordiamo con te che non sia facile, soprattutto all’inizio, e sai cosa? Le persone che si sono fidate di noi oggi hanno risolto i loro problemi, hanno avuto successo realizzando finalmente i loro progetti!

Per questo, per poterti aiutare, ti chiediamo di indicarci quali sono le tue necessità e quali sono gli ostacoli che non ti consentono di effettuare con successo la realizzazione dei tuoi progetti. In cambio avrai degli articoli e/o dei mini video corsi gratuiti.

Ad esempio, se non riesci a variare la velocità di un motore DC, spiegaci brevemente quale è la tua idea/necessità, quali sono gli strumenti che stai cercando di utilizzare e quali sono gli ostacoli che ti bloccano.

Utilizza il form seguente per inviarci la tua richiesta. Inserire nome e email è fondamentale perché altrimenti non potremo avvisarti una volta soddisfatta la tua richiesta.

I tuoi dati sono al sicuro, per saperne di più leggi la nostra politica sulla privacy.

Audio Video Corsi

I nostri videcorsi di elettronica ora possono essere fruiti anche tramite podcast/streaming audio.

Abbiamo deciso di offrire questa possibilità gratuitamente a tutti coloro che acquistano o hanno acquistato la versione video del corso. E’ un modo questo per agevolare lo studio utilizzando la tecnica dell’immersione.

E’ infatti dimostrato che un ascolto ripetuto e prolungato nel tempo, la cosiddetta immersione, aiuta ad instaurare nella nostra mente i concetti in modo più efficace e duraturo.

E’ quindi nostra volontà favorire in tutti i modi possibile l’apprendimento dei nostri studenti e il podcast/streaming audio sicuramente può essere un valido ausilio.

L’ascolto può essere fatto anche su dispositivi mobili collegati ad Internet, ad esempio mentre si è alla guida o a fare una passeggiata o mentre siete in ufficio e state svolgendo il vostro lavoro.

Ovviamente da computer potrete continuare a fruire delle lezioni video e delle slides, non cambia nulla.

Le immagini a seguire mostrano ciò che troverete una volta acquistato il corso ed effettuato il login.

La barra orizzontale di colore azzurro rappresenta il player audio. La trovate sotto ogni singola lezione così da essere facilmente individuabile. Ovviamente il player audio non avvia quello video e viceversa.
Sotto ogni video trovate il corrispondente player audio.
Sotto tutti i video e tutti i player audio continuerete a trovare le slides del corso: queste potrete scaricarle e stamparle così da poterle usare per prendere appunti e migliorare l’apprendimento.

Per maggiori informazioni e procedere all’acquisto del videocorso di elettronica per maker, hobbysti, radioamatori, tecnici, riparatori o semplici appassionati di elettronica fare click qui.

Promo “3 for Free”

Ti piace l’elettronica e vuoi tutti i nostri videocorsi gratis?

E’ possibile, non è né un sogno né niente di irraggiungibile, devi solo approfittare della nostra promozione “3 for Free”:

  1. compri il corso che preferisci;
  2. lo fai conoscere e acquistare a 3 persone di tua scelta;
  3. noi ti rimborsiamo il 100% di quello che hai speso.

La promozione si applica a tutti i nostri corsi senza limitazioni se non quelle indicate sopra: devi acquistare il corso prima di farlo conoscere, non sarebbe corretto parlare di qualcosa che non si conosce, la fiducia reciproca è fondamentale.

I tuoi 3 amici /colleghi / conoscenti possono a loro volta fare lo stesso e ottenere il corso gratis facendo conoscere e acquistare il corso ad altre 3 persone ciascuno. Facile come contare 1, 2 e 3.

Puoi scegliere qualsiasi nostro corso a catalogo e non ci sono limiti di tempo. Fai click sulle immagini seguenti per maggiori informazioni sui corsi.



Una videolezione è gratis!

Electronic Maker Hiker è un video corso dinamico e completo di elettronica di base, cioè fornisce le informazioni fondamentali affinché chiunque possa realizzare i più diversi sistemi elettronici (fai click sull’immagine per andare alla pagina descrittiva del corso).

Il problema di molti, all’inizio, è avere una guida, un percorso da seguire, un sistema che porti rapidamente a risultati certi e riproducibili. Nel nostro corso trovi tutto questo perché è basato sull’esperienza acquisita con decine e decine di progetti realizzati e venduti in circa 20 anni!

Hai dei dubbi? E’ normale!

Q. Vuoi davvero imparare l’elettronica ma hai paura di acquistare il corso che cambierà definitivamente il tuo approccio a questa disciplina?
A. E’ comprensibile, e sai una cosa? Molti dei nostri migliori studenti ora sono in grado di creare in autonomia i circuiti di cui hanno bisogno per i loro progetti e sono felici.

Q. Speri di trovare la stessa qualità gratuitamente altrove in internet?
A. Prova, sicuramente di contenuti gratuiti è piena la rete, ed è comprensibile e sappiamo tutti che se è gratis un motivo ci sarà.

Q. Pensi che le informazioni che riceverai non valgano quanto dovrai spendere?
A. Nessuna paura, entra gratis oggi stesso, mettici alla prova con una lezione a costo zero. La scegli tu, non dovrai inserire dati di nessuna carta di credito e se sarai soddisfatto, come sarà, potrai poi procedere a soddisfare la tua fame di conoscenza acquistando l’intero corso.

Oggi puoi quindi provare la qualità dei nostri video e audio corsi chiedendo di accedere ad una lezione gratuita senza nessun obbligo di acquisto né presente né futuro.

Cosa devi fare?

  1. Visiona quali sono le lezioni a disposizione facendo click qui.
  2. Scegli la lezione che più ti interessa.
  3. Compila il form che trovi qui sotto indicando il numero della lezione che ti interessa (lezioni BONUS escluse).
  4. Metti “Mi piace” alla nostra pagina Facebook e al canale YouTube (altrimenti niente lezione gratis 😉).
  5. Attendi la nostra email con i dati e le istruzioni per l’accesso (se non la dovessi ricevere controlla nella cartella SPAM).
  6. Goditi il tuo privilegio senza limiti di tempo.

Ricorda, in seguito potrai decidere se acquistare altre lezioni o il corso intero, ma non hai alcun obbligo di farlo.

Buono studio!

Compilando il form accetti integralmente le nostre condizioni sulla privacy. In sintesi, potremo usare i tuoi dati per offrirti il privilegio di accedere alla lezione gratis e per scopi di marketing online e/o offline.

Arduino e la funzione delay()

Sempre più spesso si trovano descrizioni di progetti più o meno complessi che ruotano intorno ad una scheda programmata in ambiente Arduino. In generale è sconsigliabile iniziare la programmazione di sistemi embedded proprio da Arduino. Il motivo è semplice, si inizia nel modo sbagliato, si inizia “viziati”, “coccolati” da una marea di librerie che semplificano (troppo) tutto il lavoro. Lo studente di sistemi embedded che approccia per la prima volta questo mondo utilizzando ambienti di programmazione troppo semplificati, dovrebbe invece prima comprendere a fondo come è fatto l’hardware sul quale vuole lavorare, poi piano piano imparare a scrivere il codice nel modo più opportuno preparando da solo le funzioni che gli permettono di controllare una determinata funzionalità. Invece no, con Arduino c’è una sorta di astrazione dall’hardware, l’importante è scrivere codice. Poi se questo è fatto bene o male poco importa, per molti l’importante è che funzioni.

Nel nostro webinar gratuito di introduzione al video corso di elettronica, viene spiegato proprio perché il problema di molti non è Arduino ma il non conoscere l’elettronica. Prendiamo ad esempio l’utilizzo della funzione delay() e cerchiamo di capirne l’uso corretto.

Innanzi tutto cosa succede ogni volta che chiamiamo la funzione delay()? Come descritto sul sito ufficiale di Arduino, l’esecuzione del programma viene sospesa per la quantità di tempo specificata dall’argomento. L’argomento è quel numero che andiamo a mettere tra parentesi. Così scrivere delay(100) significa sospendere il programma per 100 ms. In realtà il programma non viene minimamente sospeso perché quando viene chiamata questa funzione il programma da svolgere è esattamente “non fare nulla”, attendere inutilmente, cioè la CPU non è ferma ma sta facendo solo cicli a vuoto, non produce risultati se non far passare il tempo. Una vera sospensione del programma prevede lo stop della CPU, ma qui entreremmo in bel altre discussioni. Quindi, tralasciando l’inutile spreco di energia che questa funzione arreca, è importante porre l’attenzione sull’aspetto semantico della questione.

Perché si dovrebbe utilizzare una funzione che non produce alcun effetto se non quello di perdere tempo (e sprecare energia)?

Molti, la stragrande maggioranza di quelli che utilizzano Arduino seguendo i tutorial che trovano in rete, la utilizzano per creare degli intervalli di tempo tra una funzione ed un’altra, per esempio per far lampeggiare un LED. Speriamo quindi di fare un regalo utile mostrando come si può fare lampeggiare un LED in modo sbagliato o in modo corretto. Partiamo dal modo sbagliato, dal modo “ufficiale”, quello descritto proprio sul sito di Arduino.

Poniamoci come obbiettivo di realizzare una porzione di codice tale che:

  1. accenda un LED all’inizio di ognuno dei cicli composti dalle seguenti operazioni:
    1. acquisisca una tensione analogica
    2. legga il tempo ad ogni inizio della misura
    3. invii la misura e i tempi via porta seriale / USB
    4. indichi quanto tempo è trascorso al termine della misura
    5. spenga il LED
  2. Ripeta questa serie di azioni esattamente una volta al secondo

Poniamo l’attenzione sull’avverbio esattamente perché è tutto ciò che fa realmente la differenza tra un lavoro ben fatto ed uno fatto male: ricordiamo che l’argomento centrale di questo articolo è l’impiego del tempo nei sistemi embedded.

Il nostro esercizio prevede quindi la scrittura di una serie di operazioni da eseguire con periodicità di 1 secondo. Partiamo dall’esempio riportato su https://www.arduino.cc/reference/en/language/functions/time/delay/ e mostrato nella seguente Figura 1.

Figura 1. l'utilizzo del delay() per far lampeggiare un LED
Figura 1. l’utilizzo del delay() per far lampeggiare un LED

Con poche modifiche possiamo ottenere il codice che assolve i compiti che ci siamo prefissati: è mostrato nella Figura 2.

Figura 2. il codice per eseguire la serie di operazioni richieste una volta al secondo
Figura 2. il codice per eseguire la serie di operazioni richieste una volta al secondo

Il codice è molto semplice. Nel setup() c’è l’inizializzazione del pin relativo al LED e l’abilitazione della comunicazione seriale a 9600 bps. Nel loop() troviamo invece tutta la sequenza di operazioni richieste: l’accensione e lo spegnimento del LED alle righe 12 e 20 rispettivamente, l’invio sulla seriale dei tempi e della misura. Infine la tanto desiderata funzione delay(1000) alla riga 21, un bel ciclo di attesa di 1000 ms. Dove è l’errore? Avviamo l’esecuzione e scopriamo cosa succede. Nel webinar ciò è illustrato con un video che mostra esattamente la ricezione dei dati inviati dalla scheda Arduino. Qui per ovvi motivi sono riportati solo un paio di screenshot. Dal primo dei due, Figura 3, si evince subito che il ciclo non dura 1 secondo ma 1 secondo e 7 millisecondi.

Figura 3. avvio dell'esecuzione del programma e ricezione dei dati tramite la porta seriale
Figura 3. avvio dell’esecuzione del programma e ricezione dei dati tramite la porta seriale
Figura 4. esecuzione del programma e ricezione dei dati tramite la porta seriale dopo 63 secondi
Figura 4. esecuzione del programma e ricezione dei dati tramite la porta seriale dopo 63 secondi

Come è ben evidente questo ritardo si accumula di ciclo in ciclo e porta, come mostrato in Figura 4, ad avere un errore di mezzo secondo dopo appena 63 cicli.

Il codice fa esattamente quello che è scritto, sintatticamente è corretto e viene eseguito dal microcontrollore senza problemi, ma è semanticamente sbagliato. Infatti, così facendo non otteniamo una periodicità di 1 secondo ma di 1 secondo e qualche millesimo. E se dopo 63 cicli abbiamo già perso mezzo secondo, immaginate a quanto si può arrivare dopo un intero giorno di lavoro.

Finché si tratta di far lampeggiare un LED tutto ciò può essere tollerabile, ma in tante altre applicazioni no. È quindi un modo di fare assolutamente sbagliato. Alcuni potrebbero obiettare che si potrebbe ridurre il delay da 1000 a 993 o 994. Bene, intanto abbiamo due possibili valori, se osservate la sequenza a volte il ritardo è di 6 ms e a volte di 7 ms: quale mettiamo? Inoltre, ed è qui la cosa grave, semanticamente parlando siamo di fronte ad un errore concettuale grave, il processore in quell’attesa non può fare altro, è bloccato lì e questo riduce molto le potenzialità del sistema. Inoltre, se aggiungessimo istruzioni, per esempio la lettura di un ingresso, dovremmo andare a cambiare ancora una volta il delay. Quindi no, non si fa, non si deve usare, non è una cosa su cui si può opinare.

La soluzione a questi problemi è quella di usare un timer: dall’inglese time = tempo e quindi timer = temporizzatore. In pratica si tratta di una o più periferiche del nostro processore appositamente realizzate per generare eventi periodici. In realtà possono essere impostate per fare anche tante altre cose, per esempio per contare eventi, ma limitiamoci all’uso classico di cui abbiamo bisogno. Dipendentemente dall’architettura impostarne uno può essere un compito più o meno complesso, ma in Arduino trovate librerie per quasi tutto e ovviamente ce ne è una anche per la gestione dei timer. La trovate a questo indirizzo: https://playground.arduino.cc/Code/Timer/

Vediamo come cambia il nostro programma attraverso la Figura 5.

Figura 5. il codice modificato per utilizzare un timer
Figura 5. il codice modificato per utilizzare un timer

Nel setup() oltre all’inizializzazione di pin di output per LED e porta seriale ora troviamo la dichiarazione di una variabile chiamata timerEvent a cui è associato un timer con periodicità 1000 ms. Sinteticamente, quando sarà trascorso un secondo il flusso dell’esecuzione del programma si sposterà alla funzione chiamata timerISR. ISR sta per Interrupt Service Routine, cioè una serie di istruzioni da eseguire quando si verifica un particolare evento, cioè un interrupt. Ovviamente questa funzione può avere un nome qualsiasi, non ci sono vincoli se non quello che nel dare i nomi sarebbe opportuno darne di significativi. Come si può vedere la timerISR() è piuttosto minimale ed avrebbe potuto esserlo ancora di più. Ciò che è stato volutamente inserito è l’accensione del LED e l’invio in seriale del momento della chiamata di questa funzione. Dopo queste prime istruzioni è presente la “event = 1”, cioè si assegna un valore diverso da zero alla variabile event. Tutte le funzioni eseguite ad interrupt dovrebbero essere quanto più brevi possibili rimandando alla parte sincrona del listato lo svolgimento di compiti non necessariamente urgenti. Tornando nel loop(), attraverso il controllo “if (event == 1)” si passa all’esecuzione delle restanti istruzioni. Per fare in modo che queste istruzioni vengano eseguite solo una volta al secondo, prima di uscire dalla “if” bisogna azzerare la variabile event con “event = 0”. La sintassi è quindi molto semplice e comporta poche modifiche rispetto al listato originale, però il risultato è di assoluto altro livello, la periodicità è garantita come mostrato dagli screenshot di Figura 6 e Figura 7.

Figura 6. esecuzione periodica di istruzioni con timer
Figura 6. esecuzione periodica di istruzioni con timer

Come appare subito evidente dai primi secondi di esecuzione di Figura 6, l’accensione del LED avviene sempre all’inizio di ogni secondo e non più, come in precedenza, con un ritardo via via crescente.

Altra cosa importante, ma che ovviamente non è immediatamente visibile, è che terminata l’esecuzione delle istruzioni la CPU non ha altri compiti da assolvere, è scarica, non deve fare altro, e potrebbe essere messa tranquillamente in stato inattivo, in “idle”, per risparmiare energia.

In questo esempio, invece, per mantenere le cose il più semplice possibile, non è stata inserita alcuna altra istruzione e la CPU continua a “ciclare” all’interno del loop fino all’arrivo dell’evento successivo. Se fosse necessario aggiungerne non ci sarebbero problemi in quanto tutto ciò che è sincrono (all’interno del loop) non impatta sull’esecuzione di ciò che è asincrono (eseguito ad evento).

Dalla Figura 7 si può notare che la periodicità è garantita, l’avvio è sempre puntuale e nemmeno dopo ore ed ore di funzionamento c’è evidenza di alcun ritardo: questo è il modo corretto di programmare anche in ambiente Arduino. Queste ed altre tecniche sono universali, si possono applicare a qualsiasi microcontrollore di qualsiasi produttore, basterà adattarsi al diverso ambiente di sviluppo. Si dimostra così che il problema di molti non è non conoscere Arduino ma l’elettronica di base e il funzionamento dei dispositivi elettronici.

Figura 7. nemmeno dopo 2300 secondi di esecuzione c'è accumulo di ritardo eseguendo istruzioni periodiche mediante timer
Figura 7. nemmeno dopo 2300 secondi di esecuzione c’è accumulo di ritardo eseguendo istruzioni periodiche mediante timer

Dopo avere visto tutto ciò probabilmente è lecito chiedersi quando si può usare la delay(), perché se è stata messa a disposizione evidentemente un motivo ci deve essere. Ed in effetti una certa utilità può averla, ma non se ne può fare l’uso sconsiderato che si è soliti vedere praticamente ovunque: nei forum online, in gruppi, in articoli vari su riviste più o meno specializzate.

La delay() va usata solo quando non se ne può fare a meno, ovviamente, o quando si deve eseguire un pezzo di codice una sola volta, ad esempio per inizializzare una periferica all’avvio del sistema (nel setup()). Può succedere infatti che il costruttore di un particolare dispositivo dichiari che si debbano rispettare dei tempi prima di impostare i vari registri. In questi casi si può inizializzare i primi registri, utilizzare il delay per attendere che le modifiche abbiano effetto, proseguire con il resto dell’inizializzazione. Una volta che il nostro microcontrollore è operativo è vivamente sconsigliato l’utilizzo della delay(), ci sono metodi migliori come è stato mostrato sopra.

Ovviamente la programmazione di sistemi embedded richiede anni di formazione, non si impara in una settimana. Un consiglio utile è quello di essere curiosi, di non accontentarsi della prima soluzione che si trova, bisogna sempre chiedersi quale è il rovescio della medaglia: se si fa così che succede? Cercare informazioni, documentarsi e studiare è fondamentale. In rete c’è di tutto e di più, ma è importante saperlo cercare e organizzare in una sequenza progressiva corretta e coerente. L’alternativa più efficace è affidarsi a qualcuno di provata esperienza, perciò dai un’occhiata al nostro corso Electronic Maker Hiker.

Chi avesse dubbi o domande può scriverci utilizzando il seguente form.

Switch configuration

Sometimes it happens we have to insert a relay, a switch or multiple switches in an electronic circuit. Depending on the needs, we may need one or more incoming signal routes and one or more outgoing contacts.

The image above collects all the most used combinations and shows us quickly which device we need to use in our system.

The acronyms obviously have a precise meaning. For example:

  • SPST = Single Pole Single Through
  • SPDT = Single Pole Double Through
  • DP3T = Double Pole Triple Through
  • NO = Normally Open
  • NC = Normally Closed

Discover our products by clicking here.

ESP8266 Extreme – video corso

ESP8266 EXTREME

La crescente domanda di sistemi elettronici connessi alla rete Internet è oramai un dato di fatto. Progettare sistemi elettronici embedded in grado di inviare e ricevere informazioni dalla rete non è però la cosa più semplice da fare in quanto richiede conoscenze che spaziano dalla progettazione elettronica a quella sistemistica a quella di applicativi web.

Questo corso mostra come avviare e completare in modo professionale un progetto basato sul modulo ESP8266 e sull’IDE Arduino.

Che tu voglia realizzare un dispositivo per semplice diletto o per un’applicazione industriale, in questo corso troverai tutte le informazioni di cui avrai bisogno per procedere speditamente dall’idea al prodotto finale senza commettere errori.

Non ci credi?

Hai mai provato a cercare una libreria per un sensore? L’hai trovata e provando ad utilizzarla ti sei accorto che non funziona? Bene, non sei l’unico a cui è capitato. Purtroppo forum e blog di hobbisti di tutto il mondo sono pieni di errori, materiale scadente e di dubbia provenienza, pochi, veramente pochi, contengono informazioni corrette e pronte da utilizzare. Questo accade perché nel mondo dei microcontrollori c’è una grande confusione in quanto la semplificazione dei tool di sviluppo ha abbassato notevolmente il livello delle conoscenze richieste per utilizzare un particolare dispositivo. Ma utilizzare e saper programmare sono due cose ben diverse.

Trovare informazioni affidabili è estremamente raro.

Per tua fortuna questo corso è la soluzione a tutti questi problemi perché è basato su ciò che è stato realmente fatto per sviluppare una nostra scheda elettronica per applicazioni industriali di IoT, la WiWiNo One.

La scheda in questione, che vedi anche nell’immagine qui sotto, integra un modulo ESP8266-07, una serie di sensori di temperatura, umidità, pressione atmosferica, CO2. Sono inoltre disponibili 3 ingressi analogici 0-3,3 V, un’uscita digitale open-drain ed un ingresso digitale 0-24 Vdc. Per l’alimentazione è utilizzato un regolatore switching così che si può utilizzare con sorgente da 8 a 30 Vdc.

A chi si rivolge il corso

  • hobbisti / maker / progettisti elettronici;
  • docenti e ITP di elettronica di scuola superiore;
  • radioamatori e CB;
  • tutti coloro che sono appassionati di elettronica e che vogliono realizzare i propri progetti con soddisfazione.

Per chi NON è adatto questo corso

  • per chi non è disposto ad impegnarsi
  • per chi non è disposto ad ascoltare con la giusta umiltà
  • per chi cerca soluzioni facili a problemi complessi
  • per chi pensa che copiare sia la soluzione più efficace e veloce
  • per chi si aspetta un puro corso su Arduino™
  • per chi vuole il rimborso cercando di avere il corso gratis

Le lezioni contenute nel videocorso sono le seguenti:

  • come è fatto un modulo ESP8266 – analisi elettrica e funzionale del modulo WiFi programmabile
  • schema elettrico di un sistema basato su ESP8266 – descrizione dello schema elettrico di un’applicazione industriale basata su ESP8266
  • layout di un sistema basato su ESP8266 – descrizione su come si può realizzare un circuito stampato per applicazioni reali
  • preparare il codice HTML – guida step by step alla realizzazione di codice HTML ottimizzato per applicazioni embedded di IoT
  • scrittura del firmware per modulo ESP8266 – guida passo passo alla scrittura di firmware professionale con l’IDE di Arduino
  • test e debug della nostra applicazione – analisi delle criticità, metodi di test e risoluzione problemi

Ecco qui l’offerta esclusiva a cui puoi accedere.

Il corso sarà acquistabile a questo prezzo per un periodo limitato e fruibile al termine di questo ( 15 Settembre 2019 ). Si può acquistarlo ad un prezzo ancora più vantaggioso insieme all’evento “TSP Training Days”, due giorni in aula il 30/11 e 1/12/2019 per imparare a saldare componenti SMD e programmare Arduino in modo professionale per applicazioni IoT. Dopo questa data il costo salirà.

Per “aggiornamento” di una lezione si intende un miglioramento del contenuto: ad esempio potrebbero essere aggiunte o modificate delle slide e con queste la loro descrizione.

Per “updates” del corso si intende l’inserimento di nuove lezioni.

N.B. Come stabilito dal Codice del Consumo, art. 59, lettera o, il diritto di recesso non si applica a “la fornitura di contenuto digitale mediante un supporto non materiale se l’esecuzione è iniziata con l’accordo espresso del consumatore e con la sua accettazione del fatto che in tal caso avrebbe perso il diritto di recesso”.