Show Posts
Pages: 1 [2] 3 4 5
16  International / Generale / Re: Ritardo comando arduino on: September 30, 2013, 02:30:41 am
Ciao,

l'anomalia da te riscontrata nel codice del post originale, dipende ovviamente dall'uso della delay. Infatti, ad ogni ciclo, se il pulsante è HIGH il programma si ferma per 5 secondi. Se tu lasci il pulsante durante questi 5 secondi, il programma se ne accorgerà soltanto alla fine del delay. Quindi in realtà ho la sensazione che il led non si spegne dopo 5 secondi ma dopo un tempo variabile tra 0 e 5 secondi in base al tempo trascorso dall'ultima invocazione della delay.

Ciò premesso, proverei a modificare il tuo codice usando la millis, in questo modo:

Code:
int led= 53;
int pulsante = 40;
int val=0;
unsigned long highTime;

void setup()
{
     pinMode(53, OUTPUT);
     pinMode(40,INPUT);
     
     highTime = 0;
}


void loop()
{
     unsigned long now = millis();
     val = digitalRead(pulsante);

     if (highTime == 0)
     {
          if (val == HIGH)
          {
               highTime = now;
               digitalWrite(led , HIGH);
          }
     }
     else if (now - highTime >= 5000)
     {
          if (val == LOW)
          {
               digitalWrite(led, LOW);
               highTime = 0;
          }
     }
}

highTime conserva l'istante in cui il pulsante è diventato HIGH e all'inizio vale 0. In questo stato ad ogni ciclo si entra nel primo if e si controlla se il pulsante è HIGH. Quando questa condizione si avvera conservo tale istante in highTime e accendo il led.

In questo stato ad ogni ciclo si comincia ad entrare nell'else che controlla se sono passati i 5 secondi (now - highTime >= 5000). Quando questa condizione si avvera ad ogni ciclo cominciamo a controllare che il pulsante sia LOW. Appena si avvera anche questa condizione, spengo il led e resetto highTime. Il ciclo ricomincia dal principio.

Ovviamente non ho testato il codice e può senz'altro essermi sfuggito qualcosa. Consideralo solo un punto di partenza per chiarire il concetto.

Ciao.
V.
17  International / Generale / Re: Conflitto RTC-DS1307 --- MPU6050 on: September 28, 2013, 01:32:36 am
Ciao,

credo ti convenga collegarlo a GND o a VCC in base alle tue esigenze. A meno che non abbia una resistenza interna come gli ingressi digitali degli Atmel, lasciato libero potrebbe non assumere un livello definito.

Ciao.
V.
18  International / Generale / Re: Maker Faire Europe - Rome on: September 27, 2013, 02:36:02 am
Ciao...

deciso oggi di partecipare. Arriverò a Termini alle 11.10 quindi potrò essere con voi all'appuntamento delle 15.00.

Purtroppo quasi sicuramente non potrò essere con voi per cena dato che dovrò rientrare in serata stessa.

Ciao... a presto.
Vittorio.
19  International / Generale / Re: Scansione battere e levare audio da microfono é possibile ? on: September 03, 2013, 04:28:50 am
ho provato a cercare su google "bpm algorithm". Ci sono molti risultati da studiare.

C'è anche un thread sul forum Arduino (http://forum.arduino.cc/index.php?topic=118764.0).

Questo sembra semplice: http://learning-arduino.tumblr.com/post/12046833573/automatic-beat-detector

Si trova anche cercando, sempre su google, "arduino bpm calculation"

Ciao.
20  International / Generale / Re: Riportare valore analogread su striscia led on: September 02, 2013, 09:41:36 am
A me piaceva più la soluzione proposta da cece99 con la map.

Mi permetto di semplificarla meglio.

valoredavisualizzare = map(valoreletto, 0, 1023, 0, 7)

Questo converte valoreletto dal range [0, 1023] al range [0, 7] (nel caso in cui vuoi 8 led, se ne vuoi 10 userai il range [0, 9])

Ipotizzando poi che i piedini digitali di Arduino non ti bastino per collegare gli 8/10 led (magari perchè impiegati per altri scopi) allora potrai utilizzare un IO expander (per esempio il PCF8574) al quale passerai tramite I2C il byte corrispondente ai led che vuoi far accendere. Questo dovrebbe essere facile, ma se hai problemi chiedi pure...

Il PCF8574 ha solo 8 uscite, adatto quindi per gestire 8 led. Se ne vuoi 10 potrai usarne due oppure utilizzare due piedini di Arduino per i restanti led.

Ciao.
21  International / Generale / Re: Scansione battere e levare audio da microfono é possibile ? on: September 02, 2013, 09:28:29 am
Ciao, scusa la mia ignoranza, ma quello che vuoi far fare ad arduino, io, che non sono un musicista, non saprei farlo nemmeno personalmente. Voglio dire che non saprei segnare il "battere" e "levare" di una canzone ascoltandola.

Ti prego di non considerare banale il mio intervento. Intendo dire che, probabilmente, molti di noi non saranno in grado di risponderti semplicemente perchè non sapendo come si fa a riconoscere il "battere" ed il "levare" non sanno cosa deve fare esattamente Arduino e quindi non possono dirti se ha risorse sufficienti per farlo.

Mi farà piacere riflettere con te sulla cosa se ci darai qualche indicazione in più in merito.

Ciao.
22  International / Generale / Re: collegare più atemga in un unica rete (casa domotica) on: September 02, 2013, 09:21:02 am
Non vorrei fare il guastafeste ma, se devo essere sincero, una rete wireless non mi pare affidabile per realizzare un sistema domotico.

"Striscia la notizia" ci ha abituato ai disservizi provocati agli abitanti di una certa zona da trasmettitori troppo potenti che finiscono con il disturbare il comando di cancelli, autovetture etc.

L'impianto elettrico di una casa è un servizio essenziale (a differenza di un cancello elettrico o della chiusura centralizzata dell'auto) ed anche davvero affidabile. Immagino che alcuni componenti della famiglia tollererebbero davvero molto poco eventuali disservizi.

So che spesso non è possibile fare lavori per passare sottotraccia i cavi. Avrei però paura a realizzare un impianto wireless con il rischio di trovarmelo in avaria saltuariamente o definitivamente dopo qualche tempo per cause sopraggiunte successivamente.

Ovviamente è solo la mia opinione...

Ciao.
23  International / Generale / Re: tastierino numerico con meno pin ? on: August 16, 2013, 09:25:17 am
Ciao,

puoi usare due diversi PCF sulla stessa linea ciascuno con il suo indirizzo. Ovviamente dovrai scrivere correttamente lo sketch per utilizzare i due indirizzi diversi.

Ciao.
Vittorio.
24  International / Generale / Re: [OT] Un nuovo progetto della serie "vintage": l'OROLED on: May 03, 2013, 04:11:20 am
si, è vero!!! Davvero disordinata!!!  smiley  smiley  smiley

Scherzi a parte... io invece ti faccio i miei complimenti... io non avrei mai la pazienza di montare una breadboard del genere (e in effetti non ne ho mai usata nemmeno una).

Colgo l'occasione per complimentarmi anche per la passione del vintage. Attendo di vedere l'opera completa.

Ciao.
25  International / Generale / Re: Caratteri sporchi sul display on: March 29, 2013, 07:36:34 am
a me succedeva che perdeva qualche carattere. Mi spiego meglio se faccio clear e poi print "Ciao, mondo" magari vedevo "ao, mondo".

Ho provato a mettere un delay(10) tra la clear e la prima print (soltanto la prima...) e non succede più. In realtà non so se dipende dalla libreria, dal mio display o magari dal mio montaggio.

Ciao.
26  International / Generale / Re: Open Source??......solo nel termine stretto on: March 15, 2013, 01:15:35 am
intervengo solo ora soltanto a causa di impegni di lavoro...

Posso capire il disagio di chi vuole imparare qualcosa ed è costretto a leggere la documentazione in una lingua che non gli è familiare, ma mi pare un po' esagerato "pretendere" uno sforzo maggiore da parte di chi ha già condiviso gratuitamente il proprio lavoro. Questo a prescindere dalle motivazioni che hanno spinto il team ad utilizzare esclusivamente la lingua inglese.

Quote
ma allora lo sforzo di redarre una guida a pagamento per gli utenti lo fa e aggiornare il sito no? A questo punto non fare neanche la guida! perchè sembra ancora di più che chi non sa l'inglese deve letteralmente pagare per conoscere le basi di Arduino.E che dire del sito shop ufficiale ..........Ma guarda! C'è anche in italiano, allora quando si dve far spendere i soldi agli utenti è giusto che capiscano per bene altrimenti non comprano.....è giustificabile?

Questo poi, scusami, ma mi pare proprio il colmo. In passato ho più volte visto la scritta Micro$oft utilizzata dai sostenitori dell'open source per polemizzare contro la maledettissssssima politica di una azienda di scegliere di far pagare il proprio lavoro. Non mi era però ancora capitato di vedere il contrario... Polemizzare contro un team che ha scelto l'open source (anche hardware, non solo software...) perchè profonde qualche energia *anche* nella parte commerciale. Con il prossimo intervento chiederemo al team Arduino di rendersi disponibile non per corsi di formazione personali e gratuiti ma direttamente per progettarci i nostri shields/sketch.

Mi permetto di sottolineare che "open source" non è mai stato sinonimo di "gratuito" come molti pensano... Io personalmente non ci trovo nulla di strano quando vedo il team Arduino promuovere gli aspetti commerciali del proprio progetto.
27  International / Generale / Re: 4 Arduino Master Slave in RS485 on: March 10, 2013, 04:08:18 am
 smiley smiley smiley volevo solo dire che avevo insistito molto su aspetti che potevano forse sembrare un po' il pelo nell'uovo
28  International / Generale / Re: 4 Arduino Master Slave in RS485 on: March 09, 2013, 05:42:55 am
Io forse posso contribuire un po' di più perchè prossimamente dovrò sviluppare concretamente i concetti discussi sinora (e forse si era notato dal tono del mio confronto con leo72).

Purtroppo però non posso promettere tempi certi perchè dipenderà dall'evoluzione del progetto (probabilmente prima dovrò sviluppare un po' di hardware...).
29  International / Generale / Re: 4 Arduino Master Slave in RS485 on: March 07, 2013, 10:16:14 am
ho trovato questo documento che mi pare molto interessante.

Al secondo punto dell'elenco che c'e' all'inizio di pag. 10, si dice che il Response Time (ossia il tempo che si concede allo slave per rispondere dopo aver elaborato la richiesta), sia tipicamente compreso tra 1 e diversi secondi. E questo sembrerebbe un tempo enorme... ma in realtà non lo è!

Infatti, in sostanza mi pare di capire che la logica sia questa: il timeout è altissimo tanto da poter ragionevolmente supporre che se la risposta non arriva entro questo tempo non arriverà più (slave bloccato, spento, scollegato...).

Questo non rallenta le prestazioni del sistema perchè lo slave risponderà tipicamente in un tempo molto più bassso (pochi ms) mantenendo buone le prestazioni. Quando si verifica il malfunzionamento di uno slave (e si spera che sia un evento molto raro...) il bus rimane "bloccato" per pochi secondi che sono un tempo, tutto sommato, molto basso per identificare ed isolare (il master esclude lo slave dalla lista di quelli da interrogare) un problema.
30  International / Generale / Re: 4 Arduino Master Slave in RS485 on: March 07, 2013, 04:43:29 am
scusami leo72 ma ho ancora qualche dubbio sulla robustezza dell'implementazione.

Quote
Secondo me, se lo slave si aggancia alla trasmissione quando questa è in corso la deve semplicemente ignorare non appena si accorge che il primo byte che riceve non è quello di start. Sempre secondo me, deve scaricare tutti i byte che riceve perché altrimenti non può capire se ad esempio un byte $FF ricevuto a metà di un messaggio fa parte del pacchetto di dati oppure se è il byte di start. Sarà magari cura del master, rispedire il pacchetto se non riceve una risposta dallo slave.

Nell'esempio che facevo prima lo slave si agganciava perdendo i primi tre bytes e riceveva 5, 4, 2, 255, 6, 2, X. Cosa succede se si aggancia perdendo i primi 6 bytes ricevendo quindi 255, 6, 2, X? In questo caso il primo byte che riceve è proprio un 255 (indistinguibile da uno start...) che però non è uno start.

Ma come dicevo, questo problema mi pare risolto dal timeout...

Veniamo invece al tuo terzo punto sul quale ho il dubbio maggiore.

Quote
3) la collisione non c'è se fai come ho detto al punto 1)

Il punto 1 si occupa di come far individuare allo slave l'inizio del pacchetto. La collisione invece può avvenire nel seguente scenario.

  • Il master invia una richiesta ad uno slave ed attende una risposta entro 10ms (è solo un esempio... se è un tempo troppo lungo lo rivediamo successivamente)
  • Lo slave è occupato ed impiega un tempo maggiore per rispondere, per problemi del tutto estranei alla trasmissione dati (nel tuo esempio precedente c'e' un sensore difettoso).
  • Il master, trascorso il timeout, avvia una nuova trasmissione. Magari riprova ad interrogare lo stesso slave, magari passa allo slave successivo, non importa, la questione è che impegna nuovamente il bus
  • Lo slave, che ha ricevuto correttamente la prima richiesta (ma l'ha elaborata in ritardo), risponde mentre il bus è occupato dalla nuova trasmissione del master generando quindi la collisione.

Mi pare che questo scenario non abbia nulla a che vedere con la gestione dello start. Mi sbaglio?
Mi pare tuttavia che vada gestita altrimenti si corre il rischio di compromettere il funzionamento dell'intero bus dato che il master e gli slaves potrebbero entrare un uno stato dal quale non riescono più ad uscire bloccandosi definitivamente.
Pages: 1 [2] 3 4 5