Ciao,
Sto cercando di creare un programma che legge linee di codice da una SD e le decodifica per valorizzare un Array.
Il programma, prendendo spunto qua e la, funziona perfettamente.
Il problema sorge quando devo leggere anche il valore da un encoder rotativo.
Anche qui la parte di programma presa da sola funziona perfettamente.
Quando arrivo ad unire i due sketch si blocca tutto.
Come mai?
// -----------------------------------------------------------------------------
// INIZIALIZZAZIONE SD
// -----------------------------------------------------------------------------
#include <SPI.h>
#include <SD.h>
File datafile;
String fname = "prova.txt";
char line[30];
int row[8];
// -----------------------------------------------------------------------------
// INIZIALIZZAZIONE ENCODER
// -----------------------------------------------------------------------------
//Definizione pin
const unsigned int pinClk = 8;
const unsigned int pinDt = 9;
// Conserva stato ultima posizione encoder
int prevClk;
int prevDt;
int currClk;
int currDt;
// Variabile per mantenere il valore del contatore di esempio
int contatore;
void setup() {
Serial.begin(9600);
if (!SD.begin(4)) {
Serial.println("SD initialization failed!");
abort();
}
delay(500);
Serial.println("Seriale ed SD inizializzato");
pinMode(pinClk, INPUT);
pinMode(pinDt, INPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
digitalWrite(11, HIGH);
digitalWrite(12, LOW);
delay(500);
Serial.println("Pin inizializzati");
// Esegui prima lettura dei valori sui pin
prevClk = digitalRead(pinClk);
prevDt = digitalRead(pinDt);
//Inizializzo variabile contatore
contatore = 0;
}
void loop() {
currClk = digitalRead(pinClk);
currDt = digitalRead(pinDt);
Serial.println("Leggo PIN");
// Se la lettura corrente è diversa dall'ultima memorizzata
if (currClk != prevClk) {
//readdata();
Serial.print("[prevClk, prevDt | currClk, currDt] = ");
Serial.print(prevClk);
Serial.print(" ");
Serial.print(prevDt);
Serial.print(" | ");
Serial.print(currClk);
Serial.print(" ");
Serial.print(currDt);
//Se il valore di dt è uguale al valore corrente di clk
if (currDt == currClk) {
Serial.print(" -");
contatore --;
} else {
Serial.print(" +");
contatore ++;
}
// Mostra lo stato del contatore
Serial.print(" = ");
Serial.println(contatore);
//Aggiorna valori
prevClk = currClk;
prevDt = currDt;
}
}
void readdata() {
Serial.println("read");
datafile = SD.open(fname);
int i = 0;
if (datafile) {
while (datafile.available()) {
char c = datafile.read();
if (c == '\n') {
line[i] = 0;
Serial.println("to decode");
Serial.println(line);
decodedata(line);
delay(1000);
i = 0;
} else if (c == '\r') {
} else {
line[i] = c;
i++;
}
}
datafile.close();
} else {
Serial.println("error opening file");
}
}
void decodedata(char* str) {
Serial.println("decode");
char* token = strtok(str, ";");
int i = 0;
while (token != NULL) {
int n = 0;
if (i == 1) {
n = 0;
} else {
//temperatura impostata
n = atoi(token);
}
row[i] = n;
i++;
token = strtok(NULL, ";");
Serial.println("row valorizzato?");
for (int j = 0; j <= 8; j++) {
Serial.println(row[j]);
}
}
}