Go Down

Topic: Problemi con programmino semplice (Read 2 times) previous topic - next topic

9six4

come posso sostituire \n con \0? Dallo strumento mi arriva sempre una stringa fissa che finisce con \n  :~
Parli di questo array? http://arduino.cc/en/Reference/String
un char array giusto?

lesto

esatto, parlo di quel link.

Quote
come posso sostituire \n con \0?


if leggo \n allora salva nell'array \0 altrimenti salvaci il carattere letto :smiley-mr-green:
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

9six4

Dunque... ho realizzato questo sketch:

Code: [Select]

void setup() {
  Serial.begin(1200);
 
}
String line = "";   
void loop() {
  if (Serial.available()) {
    char inByte = Serial.read();
    switch (inByte) {
    case '\n':
      Serial.println(line);     
      line = "";       
      break;
    default:
      line += inByte;                         
    }
  }
}


E fin qui tutto ok, a serial monitor ho la stringa precisa! I problemi iniziano quando provo a loggare la stringa su SD con questo sketch:

Code: [Select]
#include <SD.h>

const int chipSelect = 10;

void setup() {
  Serial.begin(1200);
  Serial.print("Initializing SD card...");
  pinMode(10, OUTPUT);
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
  }
  Serial.println("card initialized.");


String line = "";

void loop() {
  if (Serial.available()) {
    File dataFile = SD.open("datalog.txt", FILE_WRITE);
    char inByte = Serial.read();
    switch (inByte) {
    case '\n':
      if (dataFile) {
        dataFile.println(line);
        dataFile.close();
        Serial.println(line);     
        line = "";       
      } else {
          Serial.println("error opening datalog.txt");
        }
      break;
    default:
      line += inByte;                         
      }
  }
}


Appena inizializzata la sd si pianta e sul file txt non c'è nulla. Oppure a volte scrive qualcosa, un pò confuso ma pertinente, ma sul file trovo la stessa confusione. Cosa sbaglio?
La riga File dataFile = SD.open("datalog.txt", FILE_WRITE); ho provato a metterla altrove, magari nel setup ma non me lo compila, mi dice che dataFile non è dichiarato per quello scopo.

lesto

l'errore è dato dal fatto che ad ogni open DEVE corrispondere una CLOSE. aggiusta il tuo codice di conseguenza.

Quote
mi dice che dataFile non è dichiarato per quello scopo.


si chiama visibilità delle variabili. una variabile nasce e muore all'interno del suo blocco, ovvero delle {}, e non può essere vista da cose al di fuori del suo blocco (salvo particolari casi) anche se "viva", però può essere vista dai "sottoblocchi". cerca visibilità delle variabili su wikipedia o google per magiori info.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

9six4

Grazie, mi son studiato questo e credo di aver capio: http://it.wikipedia.org/wiki/Variabile_(informatica)
Ora però, nell'attesa di rimettermi sotto con la memorizzazione di questa stringa benedetta, sto provando a stamparla su stampante e la cosa si presenta assai problematica. Come consigliato ho creato un programma che prima di eseguire le operazioni di stampa mi crei la stringa. Il problema però, sebbene migliori, rimane.
Questo è lo sketch:
Code: [Select]

#include <SoftwareSerial.h>

#include <Adafruit_Thermal.h>

//#include <LiquidCrystal.h>

//LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

int printer_RX_Pin = 8;  // this is the green wire
int printer_TX_Pin = 9;  // this is the yellow wire

Adafruit_Thermal printer(printer_RX_Pin, printer_TX_Pin);

void setup() {
  Serial.begin(1200);
  //lcd.begin(20,4);
  printer.begin();
}

String line = "";   

void loop() {
  if (Serial.available()) {
    char inByte = Serial.read();
    switch (inByte) {
    case '\n':
      Serial.println(line);     //print complete line
      //lcd.setCursor(0,0);
      //lcd.print(line);
      printer.println(line);
      line = "";        //reset to empty string
      break;
    default:
      line += inByte;                         //append inByte to the line String
    }
  }
}


Se io non uso la stampa tutto ok (anche se inizializzo la stampante). Nel momento in cui faccio partire la stampante mi omette parte della stringa (solitamente gli ultimi 2 o 3 caratteri) dopodichè inizia a sballare completamente il puntamento della stampa, sia su carta che su LCD. La stringa poi me la scrive anche correttamente, ma sballa tutti i puntamenti, come puoi vedere nella foto allegata.
Secondo te a cosa può essere dovuto?

Go Up