Questo forum utilizza i cookies
Questo forum fa uso di cookie per migliorare l'esperienza utente. I cookie sono piccoli file di testo memorizzati sul tuo browser. I cookie impostati dal forum possono essere utilizzati solo su questo sito e non costituiscono rischio per la sicurezza, vengono utilizzati unicamente per memorizzare le tue preferenze. Navigando sul sito accetti che RaspberryItaly installi i cookie sul tuo browser.
Per maggiori informazioni consulta l'informativa sui Cookie di RasberryItaly

Un cookie verra memorizzato nel browser indipendentemente dalla scelta per evitare che questa domanda ti venga posta di nuovo. Sarai in grado di modificare le impostazioni dei cookie in qualsiasi momento utilizzando il link nel footer.
  • Benvenuti su RaspberryItaly!
Benvenuto ospite! Login Login con Facebook Registrati Login with Facebook


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
Tags
python salvataggio con dati e monitoraggio

Monitoraggio e salvataggio dati con python
#31
Non sono esperto di python (ho sempre preferito il C) ma se il codice che hai inserito è quello che "gira" , vedo un errore di indentazione da "if" a seguire: "if" non deve essere allineato al "while", ma deve essere interno, così come "else".
Codice:
while True:
   myData = arduinoSerialData.readline()
   counterpos += 1
   counterneg += 1
   lun = len(myData)
   v = float(myData[0:5])
   c = float(myData[5:9])
   i = float(myData[9:lun])
   k = 0.001
   j = 0.1
   V = (float(v)*k)
   soc = (float(c)*j)
   I = (float(i)*k)
   if I>0:
      Ppos = V*I
   else:
      Pneg = V*I
   bmv702v = str(metern8) + '(' + str(V) + '*V)'
   bmv702s = str(metern9) + '(' + str(soc) + '*soc)'
   bmv702i = str(metern10) + '(' + str(I) + '*A)'
   energypos = str(metern11) + '(' + str(counterpos) + '*Wh)\n'
   ........
   ........

"v = float(myData[0:5])": la variabile v contiene già il valore numerico di tipo float, quindi "V = (float(v)*k)" non ha molto senso, prorio perchè v e k sono valori di tipo float e il risultato sarà del tipo float.
Quando apri un file lo devi poi chiudere:

fp = open(file1,'w')
fp.write(bmv702v)
fp = open(file2,'w')
fp.write(bmv702s)
fp = open(file3,'w')
fp.write(bmv702i)
fp = open(file4,'w')
fp.write(energypos)
fp.write(powerpos)
fp = open(file5,'w')
fp.write(energyneg)
fp.write(powerneg)
fp.close()

fp.close() chiude il file5 e non i precedenti che sono rimasti aperti.

P.S.
Per curiosità sto mandando in esecuzione il tuo codice assegnando a MyData la seguente stringa = '12345678910\n'
Non conosco cosa arduino restituisca al raspberry. Dalla costante K immagino che anche la corrente necessiti di 5-6 byte invce che 2 (previsto come valore 10, quindi 2 soli byte).
Risposta
#32
Ciao ippogrifo.
Il codice che ho scritto è un po' pasticciato e lo sto modificando mano a mano che trovo degli errori e/o un'idea diversa. Se tu non sei pratico di python io lo sono ancora meno. Sto cercando di imparare, anche dalle esperienze altrui. Arduino restituisce una stringa simile a quella che hai scritto tu, tipo:
5395110001548
e fino ad ora non ho ricevuto errori particolari se non al primo avvio del file.py, poi tutto funziona regolarmente, come puoi vedere dall'immagine allegata. Le prime cinque cifre sono la tensione, le successive quattro il soc (quantità di carica in %) e le rimanenti sono la corrente. Il file.py è ancora un cantiere aperto.


Allegati Anteprime
   
Risposta
#33
Si, avevo individuato la lunghezza e composizione (anche con segno negativo) della stringa inviata da arduino e modificato il codice per adattarlo alla simulazione con risultati validi.
Risposta
  


Vai al forum:


Navigazione: 1 Ospite(i)
Forum con nuovi Post
Forum senza nuovi post
Forum bloccato
Forum Redirect