Show Posts
Pages: [1] 2 3 ... 729
1  International / Generale / Re: progetto torsiometro on: July 28, 2014, 07:31:40 am
se serve per "salvare" la batteria io direi che l'idea è ok, poi che tu usi un transistor o un ralè o un mosfet poco cambia (io preferirei integrati, i relè sono meccanici e ciò che non c'è..)
2  International / Software / Re: Comunicazione su stessa seriale con due script diversi (soluzione o alternative) on: July 25, 2014, 04:45:55 am
potresti usare un file "dati.txt" per passare i dati;

php crea un file "lock.txt"; se la creazione è senza errori (il file NON esisteva) allora ha il controllo del file dati, e ci scrive dentro la riga. poi cancella il file "lock.txt", di fatto liberando il file dati per essere usato da altre parti. Se invece la creazione del file di lock va in errore (file dati in uso), allora aspetta qualche istante (1 ms è sufficiente) e poi riprova, per 5/10 volte dopo di che da errore (giusto per evitare che il codice superi il tempo massimo di loading della pagina)

Questo serve per evitare che 2 pagine di PHP scrivano contemporaneamente nel file, incasinandosi a vicenda; potresti voler usare una delle librerie di lock file PHP... MA il file dati va usato ANCHE da phyton, e che io sappia non esiste un sistema di lock "portabile" quindi devi usare questo metodo per fare a manina

ora, anche il phyton fa la stessa cosa col file di "lock.txt", quando ottieni il lock leggi il file dati in memoria e SVUOTI il file dati (o lo rinomini) , rilasci il lock, e poi con calma analizzi tutti i coamdni richiesti e li mandi ad arduino.

Ora, come può phyton rilevare che il file dati è cambiato? Sicuramente c'è qualche libreria che consente di ascoltare la modifica di un file, in linux si può registrare un evento, in windows invece devi controllare la data di ultima modifica ogni tot (polling), cosa inefficiente, ma se polli ogni 500ms il ritardo di controllo è minimo.

(sicuramente le librerie che troverai per il "file lock multisistema" usano sistemi simili, e magari ce ne è una che consente di settare i file dati e di lock; se setti gli stessi sia lato php che phyton hai fatto)

un sistema ancora migliore è se trasformi il phyton in un server, con un socket che accetta connessioni multiple, e poi i PHP aprono una connessione al server phyton (che può essere sulla stessa macchina, o dall'altra parte del mondo!), poi internameto al phytn usi le classiche strutture di sincronizzazione native del linguaggio
3  Community / Bar Sport / Re: [OT ITA] Lo spamm bar on: July 24, 2014, 06:54:04 pm
trovata soluzione, la spammo anche di qua perchè è un bel esercizio di stile: http://forum.arduino.cc/index.php?topic=257039.msg1817335#msg1817335
4  International / Software / Re: [codice completo] blink without delay sotto steroidi on: July 24, 2014, 06:23:06 pm
per chi proprio non ci capisse un acca, consiglio di farsi un pò di basi con http://www.leonardomiliani.com/en/2012/come-gestire-loverflow-di-millis/

per chi dimostra di strizzare un pò le meningi sono aperto ad ogni questione.

da una discussione con un amico:

la magia avviene in 2 punti
1. ad ogni check non calcolo il tempo che MANCA all'esecuzione, ma il tempo che è PASSATO da quando avrei dovuto eseguirla
2. verifico che il tempo passato da quando avrei dovuto eseguirla è <= del tempo passato dall'ultima esecuzione del check
5  International / Software / [codice completo] blink without delay sotto steroidi on: July 24, 2014, 06:21:47 pm
diciamo di avere un task da schedulare ogni x microsecondi. e diciamo che purtroppo il nostri timer non si incrementa di microsecondo in microsecondo, ma magari di 4 in 4 (come la micros() di arduino!).

certo, e poi bisogna anche consderare che magari le variabili di tempo di esecuzione vanno in overflow... quanti if, quante condizioni, quanti... o no? o forse possiamo aggirare gli overflow, e non solo, ma anche eseguire quei task che cadono dall'ultima esecuzione?

ecco la mia soluzione, un piccolo esercizio di stile, apparentemente semplice, ma che nasconde uno sforzo per essere compreso a fondo, specialmente nei casi limite

Code:
#include <stdio.h>
#include <stdint.h>

int main(int argv, char *args[]){
uint8_t tempo_attuale = 0;
uint8_t tempo_ultima_esecuzione = -1;//force overflow, or if first execution is at 0 it get screwed up
uint8_t periodo_in_esame;

/*le seguenti 3 variabili possono essere messe in una strutture a poi "arrayzzate" per avere più eventi indipendenti*/
uint8_t tempo_esecuzione = 0;
uint8_t tempo_passato;
uint8_t periodo = 10;

/* more difficult! il timer è irregolare */
uint8_t ganularita_timer = 3;

for (uint16_t b = 0; b < 200; b++){
tempo_passato = tempo_attuale-tempo_esecuzione;

periodo_in_esame = tempo_attuale-tempo_ultima_esecuzione;

printf("\nt1=%d, t=%d,tempo_passato=%d", tempo_esecuzione, tempo_attuale,tempo_passato);

if (tempo_passato <= periodo_in_esame){
tempo_esecuzione += periodo;
printf(" ESECUZIONE!");
}

tempo_ultima_esecuzione = tempo_attuale;
tempo_attuale+=ganularita_timer;
}

return 0;
}
6  International / Generale / Re: progetto torsiometro on: July 24, 2014, 03:48:26 am
1.2? non è 1.5? in ogni caso arduino va a 5/6v, quindi la "lantern" pare una buona soluzione, voltaggio ok e una durata più che decente
7  Community / Bar Sport / Re: [OT ITA] Lo spamm bar on: July 24, 2014, 03:43:12 am
uhmm avrei dovuto allegare il caso di test.

è una lista, ordinata in base ad un  "PESO" che ogni elemento possiede.

ci sono 2 funzioni di "estrazione", entrambe lavorano sulla "testa";

.estrazione della testa (quindi dell'elemento con peso minore) - caso A
.estrazione della testa con peso <= ad un dato valore - caso B


esempio caso A:
mettiamo che hai un meccanismo, che per rimanere allineato ha bisogno che ogni 2 "passi" dello stepper1 fai uno scatto di stepper2 e 10passi di stepper3; i periodi da impostare sono quindi s1 = 10/2=5, s2 = 10/1=10, s3=10/10=1, a questo punto tu semplicemente fai una estrazione di testa (e conseguente reinserimento ordinato per schedulare il prossimo salto)

altro esempio caso A:
immagina di avere une serie di operazioni (per esempio 5 funzioni da chiamare), MA che esse abbaino una certa priorità di esecuzione; per esempio un robot quando è vicino ad un muro può decidere di aumentare la priorità del sensore ping, o quando è in curva aumentare la priorità degli input da utente, o quando perde il segnale con l'input utente aumentare la priorità degli algoritmi di stabilizzazione/return to home

caso esempio B:
vogliamo fare uno scheduler, come il LeOS. in pratica è uguale al caso A, solo che gli step non vogliamo eseguirli il più velocemente possibile, ma ogni tot tempo. il "peso" diventa quindi la data di esecuzione, mentre il valore passato alla funzione di estrazione è la "data attuale"

ps. mi sono accorto che quando "peso"va in overflow non gestisco il caso
8  International / Generale / Re: comunicazione tra GSM/GPRS/GPS SHIELD e google maps on: July 24, 2014, 03:26:39 am
non serve che modifichi le librerie: ciò che non viene usato il compilatore non lo include. quello che devi evitare sono variabili globali e/o grosse variabili locali (stinghe lunghe, ad esempio) oltre che l'allocazione dinamica di memoria
9  International / Generale / Re: progetto torsiometro on: July 24, 2014, 03:06:02 am
le lipo sono le batterie ai polimeri di litio, e hanno vari impieghi, dai cellulari ai modelli.
Se usi delle batterie "rubate" ai cellulari, allora stai più o meno tranquillo perchè l loro interno possiedono dei circuiti di protezione (esempio limitazione di corrente assorbita), se invece usi delle celle "sfuse" devi farci attenzione, sopratutto quando si gonfiano.. bhe conviene avere un estintore a polvere nelle vicinanze xD


dicendo "semplici batterie 9V" in realtà on dici nulla,visto che esistono in versione alcalina (la più comune, quindi immagino intendi questa), wiki dice da 565mAh, la versione al litio la da a 1200mAh. oppure passi al modello C alkalino (il torcione) che ha 12Ah di carica!

buona lettura: http://it.wikipedia.org/wiki/Lista_dei_tipi_di_batterie
10  Community / Bar Sport / Re: [OT ITA] Lo spamm bar on: July 23, 2014, 06:02:12 pm
spammo anche di qua https://github.com/MauroMombelli/staticQueuePoller che ne dite?

è una lista statica (con inserimento oridnato, e poll di head o di head se il peso è < di un cero tot, quindi puoi usarlo come scheduler)
11  International / Software / [codice completo]lista senza memoria dinamica on: July 23, 2014, 05:58:49 pm
immaginiamo per un attimo di avere una serie di sensori/bus/...
ora, noi vogliamo leggere tutti questi oggetti, uno alla volta, PERO' non tutti gli oggetti vanno letti con la stessa frequenza.

Magari vogliamo che per ogni 3 letture del sensore A, abbiamo una lettura del sensore B, il tutto il più velocemente possibile (caso test A);

Oppure vogliamo che per ogni clock leggiamo A, e ogni 3 leggiamo B (uno scheduler, in pratica).

La cosa con le liste è molto semplice; crei una lista, inserisci gli elementi ordinati per PESO,
poi estrai la testa (caso A) o la testa SE il PESO supera il PERIODO (caso B),
reinserisci l'elemento estratto in modo ordinato.

la cosa però si fa un pò più complessa se NON vogliamo usare la memoria dinamica; allora bisognerà creare un array dei nosti elementi, e in questo caso anche un array di strutture di gestione (per cercare di separare il più possibile i dati user dai dati libreria)

in allegato trovate il codice della mia soluzione, con un piccolo main di test. Notare che è fatto per compilare su PC 8per via del main) ma se copia-incollate il codice del main nel setup dovrebbe funzionare senza problemi.

https://github.com/MauroMombelli/staticQueuePoller
12  Community / Bar Sport / Re: [OT ITA] Lo spamm bar on: July 23, 2014, 05:19:56 pm
non capisco se sia una velata battuta sulle MCU o sull'azienza trasporti  smiley-mr-green
13  International / Generale / Re: comunicazione tra GSM/GPRS/GPS SHIELD e google maps on: July 23, 2014, 04:26:23 am
bhe dipende. il master può generare la STRINGA di invio in formato HTTP, ed inviarla al client; lo slave invece che usare quella funzione apre una connessione (socket) TCP  verso il server ed invia la stringa.

Quindi esatto, QUEL comando non lo puoi spostare in quanto crea la get e la invia via TCP, ma puoi spezzare la sua logica usando un differente comando.

ma non credo sia quello il problema di ram
14  International / Generale / Re: comunicazione tra GSM/GPRS/GPS SHIELD e google maps on: July 23, 2014, 03:55:56 am
ma quella riga di codice nasconde sotto tutta la libreria gprs... quello che potresti fare è inviare la risposta via i2c al master che la interpreta.
15  International / Generale / Re: Segnalazione di problemi legati al forum on: July 23, 2014, 03:20:34 am
non so che smart usi, ma hai mai provato a "navigare" nel testo già scritto? a correggere una lettera/frase a metà testo? a citare più di un post? col mio selezionare un punto specifico del testo scritto è un odissea, e in generale la finestra di scrittura non ci sta in tutta la schermata (a meno che non zoommo fuori fino a che non leggo più), aggiungi il fatto che essendo uno scassone con poca ram (512) avrai uno scorrimento poco fluido, app in background che "crashano" per liberare ram al browser (che ha i js disattivi se no su alcuni siti proprio non ce la fa..)

poi una cosa fica che si può fare è la notifica di messaggino privato come se fosse un SMS, o magari persino di risposte a discussioni (a scelta, non attiverei mai le notifiche su questo o off-topic, ma se apro un post di aiuto mi piace sapere quando è stato risposto, no?)
Pages: [1] 2 3 ... 729