Organizzare dati: cicli while e funzioni stringa

filomeni:
nel mio IDE non c'è 1.8.7

Non diciamo sciocchezze, usala e vedrai che c'è ! :wink: Certo, se vai a cercare i sorgenti nella cartella delle librerie NON la trovi, è una VERA libreria (non come le finte librerie di Arduino che altro non sono che dei moduli sorgenti compilati ogni volta) e quindi è data in formato pre-compilato.

Guglielmo

gpb01:
Non diciamo sciocchezze, usala e vedrai che c'è ! :wink: Certo, se vai a cercare i sorgenti nella cartella delle librerie NON la trovi, è una VERA libreria (non come le finte librerie di Arduino che altro non sono che dei moduli sorgenti compilati ogni volta) e quindi è data in formato pre-compilato.

Guglielmo

Scusa Guglielmo,
se dico sciocchezze spero mi sia concesso, visto che son qui a chiedere! Uso Arduino da molto poco e nel tempo libero... Che Arduino abbia finte librerie, ma così definite, non lo sapevo... Visto che sono uno zuccone e vedo solo il menu di finte librerie, non saprei proprio come cercaerla nell'IDE, saresti così gentile da indicarmi in quale recondito posto trovarla?
Grazie Infinite
Maurizio Filomeni

T'ho detto che NON la devi cercare ... la devi solo usare ...

#include <string.h>

... (con l'IDE neanche servirebbe, ma per correttezza è bene metterla) e poi richiami le funzioni.

Guglielmo

Standardoil:
'scolta me...
che tu "voglia" usare la classe String, pur essendoti stata sconsigliata, già è strano

Strano non direi, si mi è stato sconsigliato, ma non essendoci molto materiale come stringhe, ritengo opportuno, non conoscendo l'argomento, continuare su una strada per me più familiare... tutto qui.

Standardoil:
ma che tu lo voglia fare "senza" studiare quello che stai facendo è pure "storto"

Lo studio è cosa abbastanza personale e personalizzata, non so te, ma io dedico il tempo che trovo e lo faccio soprattutto per passione e non superbia, quindi se mi consenti lo studio per me è sperimentare cose improbabili e pian piano correggere il tiro, in questa maniera riesco tutto sommato a capire e far mio l'argomento. Spero la mia risposta non ti abbia infastidito...

Standardoil:
Lo sai cosa stai facendo?
secondo te questa riga:

c = FileProg.read();

Beh, te lo spiego, semplicemente do un valore alla variabile "c" con il contenuto del file.

Standardoil:
e come lo useresti dopo, giusto per saperlo?

Giusto per saperlo?!
Beh, mi stai bacchettando perbenino... Va bene, secondo il mio modo di pensare: se t=-1 non trova nulla altrimenti ho il mio risultato... :wink:
Riguardo al tuo: "ti metto, ti trovo, ti cerco"... Beh, qui mi devo scusare! Trale cose e problemi mi è sfuggito. Ti prometto che lo farò e volentieri...
saluti
Maurizio Filomeni

gpb01:
T'ho detto che NON la devi cercare ... la devi solo usare ...

#include <string.h>

... (con l'IDE neanche servirebbe, ma per correttezza è bene metterla) e poi richiami le funzioni.

Guglielmo

Bene, Grazie ora è tutto chiaro, perdona la mia zucconeria...

filomeni:
Beh, te lo spiego, semplicemente do un valore alla variabile "c" con il contenuto del

da questo si capisce che non hai letto il reference
infatti a quella domanda hai evitato di rispondere......

Standardoil:
da questo si capisce che non hai letto il reference
infatti a quella domanda hai evitato di rispondere......

No, non ho risposto semplicemente per non aver capito dove è il reference (forse imparo qualcosa di nuovo...)
Non bastonarmi! :slight_smile: se me lo spieghi o mi dici dove lo trovo...
Grazie

Dal menu in alto del sito, "Resources" -> "Reference" ... il link diretto è QUESTO.

Guglielmo

P.S.: Tutto il contenuto del reference è la prima cosa da studiare prima di lavorare con Arduino ... ::slight_smile:

filomeni:
Strano non direi, si mi è stato sconsigliato, ma non essendoci molto materiale come stringhe, ritengo opportuno, non conoscendo l'argomento, continuare su una strada per me più familiare... tutto qui.

Beh, come dire "io non metto mai le cinture in auto, non ci sono abituato, ed anche se mi hanno consigliato di metterle preferisco così"?...

Scusa, ma non va bene. Tu "vuoi" continuare ad usare le String perché per te "sono più familiari" e posso capirlo, ma se ti è stato detto da più persone che usare oggetti String può comportare malfunzionamenti della board fino al suo blocco, secondo te cosa significa?

Tra l'altro nel mio codice che ti ho messo come esempio nel post #3 (quindi all'inizio di questo thread...) c'è tutto quello che ti serve per iniziare col piede giusto!
Ovviamente ti avevo scritto di avertelo scritto come spunto per iniziare, e non prendere per oro colato tutto ma serviva proprio per farsti "sperimentare" e capire "dell'interno" quello che ti suggerivo, invece di fare un banale "copia-incolla-esegui" che non ti fa capire nulla!
L'esempio c'è stato proprio con il problema dell'assegnazione sull'istruzione type="SB": nel commento ti ho scritto "questa variabile viene valorizzata dal sensore" ma in ogni caso visto che ti ha dato errore in compilazione, avresti dovuto chiederti perché, e come fare per correggere. In quel caso poi era semplice, ed in parte te l'hanno indicato, una char* (chiamiamola impropriamente la "stringa C") non si valorizza con una assegnazione, perché il nome ("type" in questo caso) rappresenta un INDIRIZZO dove è contenuto il primo carattere della "stringa", non il valore della stringa. Per cui nel codice di esempio ti basta assegnarla alla dichiarazione:

char type[20]= "SB";

oppure:

char type[20];
strcpy(type,"SB");

Fatta questa piccola correzione, provati l'esempio con la tua SD e verifica.

Quando poi un programma non fa ciò che ci si aspetta che faccia, visto che non c'è modalità di debug, la cosa più semplice in genere è metter euna serie di Serial.print() per mandare su seriale informazioni su dove passa il codice e cosa valgano le variabili che ti interessano.

Per cui lascia perdere le String, inizia col codice che ti ho indicato, correggilo, mettilo intanto in setup(), aggiungi qualche Serial.print() e vedi cosa succede.
Qui possiamo aiutarti a fare debug e imparare, non a capire se le cinture di sicurezza servano a qualcosa. :wink:

filomeni:
semplicemente do un valore alla variabile "c" con il contenuto del file.

secondo il mio modo di pensare: se t=-1 non trova nulla altrimenti ho il mio risultato... :wink:

io credo che tu abbia qualche difficoltà nei tipi di dati del 'C'
Non è ironia, è dato di fatto
La variabile c che hai usato è sì un oggetto stringa. Ma togliti l'idea che possa contenere un intero file, anche come concetto sarebbe sbagliato, comunque la memoria non te lo permette
Inoltre la funzione read() restituisce un intero. Anzi, di solito ci sta in un byte e come caso eccezionale un meno 1
Quindi non ti legge un intero file, ma solo Il primo byte (si si ok, il prossimo, non il primo)
Inoltre la funzione indexof restituisce un intero, tu lo assegni a una stringa, ok l'assegnazione va, ma "dopo" non ci puoi più fare test numerici, questo era il significato del mio "giusto per saperlo"
Forse sono sembrato scortese, e me ne scuso, ma lo sforzo per imparare lo devi fare tu, ché io già imparai.....

Scortese non sei sembrato, in quanto mi hai risposto... La mia impressione un pò troppo "bacchettone"! Si so perfettamente che lo sforzo lo devo fare io, e ti garantisco che lo sto facendo (non sono un giovinotto di 20 anni, ne ho 50 tre figli e tanti problemi). Quindi per me dedicare un'oretta al giorno ai miei progetti è più che altro, oltre che passione nel "cassetto", una spece di anti stress... Il mio banco di scuola è proprio questo forum e chi sa più di me è mio docente...
Comunque scanso le ciance... Ho sbattuto un pò il capoccione sui concetti espressi e un attimo di luce mi si è fatta capendo che arduino con le stringhe non centra nulla e poca affinità ha con il mio amato PHP...
Ho notato, con mio stupore, facendo degli output delle funzioni che il risultato solo "cifre" o lettere in colonnate dal ciclo!
Da qui cambio di direzione... Credo che inizierò a sperimentare i blocchi che mi avete fatto vcedere fin ora e appena avrò un pò più di chiarezza vi dirò...
Comunque grazie
Maurizio Filomeni

se serve domanda pure...

Serve, serve! Non ci sto capendo una mazza :slight_smile:
Allora, vedo un attimo di riassumere il punto di "arrivo":
Partiamo quindi dalla SD la quale ha scritto un file contenente delle stringhe immesse da un operatore. Queste stringhe esprimono un processo di lavorazione in catena di produzione ossia contengono il "nome" del prodotto, le sue dimensioni e la quantità di produzione, come detto in precedenza:
nome del prodotto: SB (oppure: AD, PLUS ecc.)
dimensioni in millimetri: 20X600X1200
e la quantità di produzione: 21 (esempio).
Quindi quando si fa la lettura del file in output seriale o lcd ho il risultato:

SB20X600X1200 21
AD50X600X1200 11
PLUS80X1000X1200 8

Ora in sintesi ho riscontrato (dopo svariate "bacchettate":slight_smile: che in realtà Arduino interpreta tutto il contenuto in ASCII quindi ho realizzato che operare con funzioni stringa non ha senso, però ora mi trovo in alto mare!
La mia necessità è confrontare il prodotto che "scorre" in produzione con i dati immessi dall'operatore quindi se vero si va avanti se falso ci sarà un allarme che segnala l'incongruenza.
Il prodotto viene rilevato da alcuni sensori che ho preparato e testato, quando il prodotto passa sul sensore RGB, mi ricavo il tipo di prodotto SB, AD ecc, con un sensore a ultrasuoni ricavo lo spessore e con la percorrenza sul nastro trasportatore (velocità/tempo) mi ricavo le lunghezze e larghezze.
All'intervento del sensore devo avere il primo confronto, quindi il sensore mi rileva "SB", cerca in SD la corrispondenza, poi passa sugli altri sensori quindi, l'ultrasuoni mi dice (spessore) 20, e va a cercare in SD e così via fino a comporre tutte le caratteristiche se ho la corrispondenza finale: SB20X600X1200 il processo va avanti e procedo con altri processi di conteggio che lasciamo perdere al momento...
Cercherò di seguire con maggior attenzione e cercherò di capire la logica di programmazione.
Grazie mille
Maurizio Filomeni

Ok, non sembra difficile
Comincia col far rilevare e poi stampare il tipo del prodotto
Che hardware hai?
Solo sensori e una UNO?
Ho hai anche display, pulsanti, etc etc?
Poi cerchi il tipo nel file...
Poi leggi i parametri.....

Utilizzo una Mega 2560, un Display TFT touch screen, dal quale do i comandi. I sensori sono di tre tipi, un TLS230 con il quale mi ricavo il tipo di materiale, un sensore di prossimità per fare i conteggi e misurare le dimensioni del prodotto, un sensore Ultrasuoni HC-SR04 per misurare lo spessore.
Per la logica di funzionamento hai capito giusto:
1)L'operatore da touch screen inserisce le caratteristiche del prodotto (es: SB30X600X1200)
2)I dati vengono scritti in un file.txt e salvati in SD
3)inizia il ciclo di produzione e i sensori rilevano le caratteristiche del prodotto
4)Si devono comparare i dati rilevati con quelli scritti nel file.txt
5)se vero, si procede con i conteggi dei pezzi di produzione, se falso ci sarà un avviso di incongruenza.
Grazie

Scusate la replica...
Mi sento abbandonato! :slight_smile:

da chi?

Ciao Standardoil,
la discussione si è bloccata... l'ultimo tuo post mi dici: "Ok, non sembra difficile"...
Poi io confermo quanto detto da te, poi il nulla!
Quindi non capisco se ho possibilità di essere guidato o se cambiare strategia di lavoro...
Grazie

cioe':
tu da oltre una settimana aspetti cosa?

Standardoil:
Ok, non sembra difficile
Comincia col far rilevare e poi stampare il tipo del prodotto
Che hardware hai?
Solo sensori e una UNO?
Ho hai anche display, pulsanti, etc etc?
Poi cerchi il tipo nel file...
Poi leggi i parametri.....

hai cominciato con il far rilevare il tipo di prodotto?
hai un programma, anche minimale che ti stampa su seriale uan cosa del tipo "trovato prodotto tipo ...."
questo ti avevo detto....

Non ci siamo ben capiti...
Dunque, fin ora stavamo cercando di capire come posso arrivare a organizzare i dati raccolti in SD.
Quindi i sensori che utilizzo, rilevano correttamente il prodotto, quindi i vari sensori mi valorizzano delle variabili stringa queste variabili dovrebbero essere confrontate con il contenuto della SD per verificare se il prodotto che scorre in produzione è uguale al prodotto memorizzato (dall'operatore) in SD.