da arduino a foglio excel

Sto tentando di trasportare i dati di scarica di una batteria direttamente da arduino su un foglio excel e creare il diagramma, ho trovato PLX-DAQ, molto bello ma non riesco ad avrere sul foglio excel tutti i dati che voglio e non mi capisco, diciamo che ho bisogno di aiuto questo è il codice che sto usando

unsigned int t;
void setup()
{
  Serial.begin(9600);
  Serial.println("CLEARDATA");
  Serial.println("LABEL,Date,Time,t,volt");
  delay(2000);
  pinMode(LED_BUILTIN,OUTPUT);      // pin di default del led on board (13)configurato come uscita
  digitalWrite(LED_BUILTIN,LOW);    // LED onboard spento
}
void loop()
{
 Serial.println( (String) "DATA,DATE,TIME," + (t));
    digitalWrite(LED_BUILTIN,HIGH); // accensione LED onboard
    Serial.println(t);
    Serial.println(";");
    Serial.println(analogRead(0));    // acquisizione del valore analogico è invio alla seriale
    Serial.println('\n');             // acquisizione del valore analogico è invio alla seriale
    t=t+10;
    delay(100);                     // tempo di attesa prima dello spegnimento del LED onboard
    digitalWrite(LED_BUILTIN,LOW);  // spegnimento LED onboard
    delay(9900);                    // tempo di attesa prima della successiva acquisizione
}

vi ho anche messo una foto del risultato che ho su excel, sotto la colonna volt dovrebbero apparire i dati letti dal segnale che arriva sul pin A0 di Arduino, come vedete li ho come dato sulla seriale ma non si scrivono su excel, questo dato per essere reale andrebbe inserito su una formula "=3*(dato letto/1024*5)" e dare il risultato che vorrei vedere su excel

Altra cosa non capisco da dove esce la scritta mills che non ce l'ho nello skech

Mi date una mano Grazie

Invece di inviare il dato puro, leggilo in variabile e poi fai il calcolo. dopo mandi il valore
int val=analogRead(0);
float ris=3*(val/1024*5);
Serial.println(ris);

Grazie della risposta ho provato a fare spero come mi hai detto, forse ho sbagliato sono un principiante, comunque ho fatto così

unsigned int t;
void setup()
{
  Serial.begin(9600);
  Serial.println("CLEARDATA");
  Serial.println("LABEL,Date,Time,t,volt");
  delay(2000);
  pinMode(LED_BUILTIN,OUTPUT);      // pin di default del led on board (13)configurato come uscita
  digitalWrite(LED_BUILTIN,LOW);    // LED onboard spento
}
void loop()
{
 Serial.println( (String) "DATA,DATE,TIME," + (t));
   digitalWrite(LED_BUILTIN,HIGH); // accensione LED onboard
   Serial.println(t);
   Serial.println(";");
   int val=analogRead(0);// acquisizione del valore analogico è invio alla seriale
   float ris=3*(val/1024*5);
   Serial.println(ris);
   t=t+10;
   delay(100);                     // tempo di attesa prima dello spegnimento del LED onboard
   digitalWrite(LED_BUILTIN,LOW);  // spegnimento LED onboard
   delay(9900);                    // tempo di attesa prima della successiva acquisizione
}

ma il risultato è 0 e comunque non lo scrive su excel vedi foto

Non conosco questo addin, leggo però che devi mandare ogni volta i dati così
DATA,123,345,567
ovvero devi sempre inviare per prima cosa la parola DATA
Poi i dati devono essere separati da virgola e non ; e NON devi usare println ogni volta ma solo alla fine

  Serial.print("DATA,TIME,TIMER,");
  Serial.print(t);
  Serial.println(",");
  int val=analogRead(0);// acquisizione del valore analogico è invio alla seriale
  float ris=3*(val/1024*5);
  Serial.println(ris);

Su serial monitor dovresti vedere ora OGNI riga (esempi)
DATA,TIME,TIMER,10,3.4
DATA,TIME,TIMER,20,4.2
...

no vedo così e non mi capisco

unsigned int t;
void setup()
{
  Serial.begin(9600);
  Serial.println("CLEARDATA");
  Serial.println("LABEL,Date,Time,t,volt");
  delay(2000);
  pinMode(LED_BUILTIN,OUTPUT);      // pin di default del led on board (13)configurato come uscita
  digitalWrite(LED_BUILTIN,LOW);    // LED onboard spento
}
void loop()
{
 Serial.print("DATA,TIME,TIMER,");
  Serial.print(t);
  Serial.println(",");
  int val=analogRead(0);// acquisizione del valore analogico è invio alla seriale
  float ris=3*(val/1024*5);
  Serial.println(ris);
   t=t+10;
   delay(100);                     // tempo di attesa prima dello spegnimento del LED onboard
   digitalWrite(LED_BUILTIN,LOW);  // spegnimento LED onboard
   delay(9900);                    // tempo di attesa prima della successiva acquisizione
}

foto 2.png

Se ti scrivo che DEVI avere una solo println() tu invece hai Serial.println(",");
Se il valore dei volt è sempre zero, prova a forzare le virgole float ris=3.0*(val/1024.0*5.0);

Esempio mio, provato e funziona:

long t=0;

void setup() { 
  Serial.begin(9600);
  Serial.println("CLEARDATA");
  Serial.println("LABEL,Time,Timer,counter,A0");
}

void loop() 
{ Serial.print("DATA,TIME,TIMER,");
  Serial.print(t);
  Serial.print(",");
  Serial.print(analogRead(0));
  Serial.println("");
  t=t+10;
  delay(1000);
}

Sì hai ragione scusa non mi ero accorto, ho messo il tuo e funziona ma la tensione mi da un dato e no il voltaggio reale, ho inserito la formula per tramutare il dato ma niente sicuramente sbaglio io, comunque quando puoi ti ho messo il codice e foto

long t=0;

void setup() {
  Serial.begin(9600);
  Serial.println("CLEARDATA");
  Serial.println("LABEL,Time,Timer,counter,A0");
}

void loop()
{ Serial.print("DATA,TIME,TIMER,");
  Serial.print(t);
  Serial.print(",");
  Serial.print(analogRead(0));
  Serial.println("");
  int val=analogRead(0);
  float ris=3*(val/1024*5);
  Serial.println(ris);
  t=t+10;
  delay(1000);
}

Apri il serial monitor e dimmi se quello che esce con il tuo codice è corretto ?!?
metti due volte l'analogRead !!

void loop()
{ int val=analogRead(0);
  float ris=3.0*(val/1024.0*5.0);

  Serial.print("DATA,TIME,TIMER,");
  Serial.print(t);
  Serial.print(",");
  Serial.print(ris);
  Serial.println("");
  
  t=t+10;
  delay(1000);
}

scusami ma non mi ero accorto della tua risposta, nel frattempo avevo modificato il codice in questo modo

long t=0;
int PinBatt = A0;  
int ValPinBatt;
float Vpin_perc;
float Vbatt;  
float calc_res;
float R1 = 10000; //modificare questi valori con i valori realmente utilizzati.
float R2 = 10000;


void setup() {
  Serial.begin(9600);
  Serial.println("CLEARDATA");
  Serial.println("LABEL,Time,Timer,t,Vbatt");
  pinMode (PinBatt, INPUT);
  calc_res = (R1 + R2) / R2;
}

void loop(){ 
  
  Serial.print("DATA,TIME,TIMER,");
  Serial.print(t);
  Serial.print(",");

  Serial.print("");

  ValPinBatt = analogRead(PinBatt);
  Vpin_perc = map (ValPinBatt, 0, 1023, 0, 500);
  Vbatt = Vpin_perc * calc_res / 100;
  Serial.println(Vbatt); 
  t=t+10;
  delay(9900);
  
}

per avere dei valori reali, è che per avere la giusta tensione ho dovuto mettere
Vbatt = Vpin_perc * calc_res / 70.8; e "non 100 come richiesto

e ho visto che se cambio il valore delle resistenze sul partitore non varia niente

comunque sto creando il grafico di scarica in automatico di un pacco batterie

nid69ita:
Apri il serial monitor e dimmi se quello che esce con il tuo codice è corretto ?!?
metti due volte l'analogRead !!

Ieri sei stato gentilissimo e grazie a te sono riuscito abbastanza a capirmi, hai visto il mio ultimo post, riesci a dirmi come sistemare anche quello, poi avevo un'altra richiesta se posso, ma una cosa alla volta, grazie ancora

Mi spiace, non sono un elettronico, non conosco i calcoli da usare.

e sapresti come collegare un monitor oled in modo che oltre al grafico excel che si crea vedo sull'0led la tensione e il tempo trascorso, visto che ho un oled di quelli da 4 pin volevo provare

Bisogna sapere il modello e se c'e' una libreria per gestirlo
posta pure il link del sito dove lo hai comprato

nid69ita:
Bisogna sapere il modello e se c'e' una libreria per gestirlo
posta pure il link del sito dove lo hai comprato

ho questo OLED

Prova a dare un'occhiata QUI ... nelle note dice chiaramente:

• added more examples and grouped them into 128x32 and 128x64 resolution

... quindi dovrebbe supportare anche il 128x64 con collegamento I2C.

Io la uso regolarmente con i miei OLED, è compatta, veloce e usa poca memoria :slight_smile:

Guglielmo

gpb01:
Prova a dare un'occhiata QUI ... nelle note dice chiaramente ...

Scusami ma ti sei dimenticato il link

lidas:
Scusami ma ti sei dimenticato il link

Acc, mia svista ... ho corretto :grin: :grin: :grin:

Guglielmo

Guglielmo, dici che quella lib è meglio di quella di Adafruit (più leggera magari) ??

nid69ita:
Guglielmo, dici che quella lib è meglio di quella di Adafruit (più leggera magari) ??

Dipende da quello che devi fare, ma è sicuramente più leggera ... la uso sempre :slight_smile:

Ti consiglio di provarla ... e dai un'occhiata a tutto il sito perché ha veramente delle belle librerie :wink:

Guglielmo

Inoltre, da QUESTO link, ti puoi facilmente disegnare i tuoi font da usare con quella libreria ;D

Io ce ne ho fatto uno per indicare i simboli di "carica della batteria" :grin:

Guglielmo