Hallo,
ich bin den Anweisungen dieser Seite gefolgt um einen Messschieber an den Arduino anzuschließen, nach einigem hin und her lief das ganze dann auch mit dem Beispiel Code hier.
Als Augabe habe ich einige binäre Zahlenreihen, die so aussehen:
1,0,0,0, 1,0,1,1, 1,1,1,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
1,0,0,0, 1,0,1,1, 1,1,1,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
1,0,0,0, 1,0,1,1, 1,1,1,0, 0,0,0,0, 0,0,0,0, 0,0,0,0
Das sind meine Messergebnisse Binär. Die zweite bis 17 Stelle ergibt in umgekehrter Reihenfolge meine Messung in mm/100.
Ich würde jetzt gerne die Messergebnisse in einer Funktion auslesen lassen, also den Code aus Loop in eine Funktion namens zum Beispiel caliper() verschieben, um dann mein Messergebnis zurückgeben zu lassen.
Ich hab das rein experimentell mal so aufgebaut, dass ich in der Zeile, die für den Zeilenumbruch sorgt (an der Stelle, wo die Übertragung vom Messschieber abgeschlossen ist) einen char* namens measure zurück gebe. In der Variabel befinden sich die 1&0 aneinandergehängt.
Leider habe ich (wie nicht anders erwartet) kein Ergebnis…
Bevor ich das ganze versucht habe in eine andere Funktion umzulagern, hat die Methode mit dem char* funktioniert.
Meine Idee ist, dass der Fehler irgendwie mit dem Zählen der vergangenen Mikrosekunden zusammenhängt und ich deswegen kein Ergebnis bekomme?
Ich hoffe auf Hilfe
//Simple Digital Calliper Reader
//See http://j44industries.blogspot.com/
// Pin Declarations
int dataIn = 11;
int clockIn = 12;
// Variables
int clock = 1;
int lastClock = 1;
unsigned long time = 0;
unsigned long timeStart = 0;
int out = 0;
void setup() {
// Pin Set Up
pinMode(dataIn, INPUT);
pinMode(clockIn, INPUT);
Serial.begin(115200);
Serial.println("Ready: ");
}
void loop(){
Serial.println(caliper());
}
char* measure;
char* caliper(){
lastClock = clock;
clock = digitalRead(clockIn);
if (lastClock == 1 && clock == 0){
out = digitalRead(dataIn)+digitalRead(dataIn)+digitalRead(dataIn); // Tripple sampling to remove glitches
if((micros() - time) > 800){
//Serial.println(" ");
return measure;
measure="";
}
else if((micros() - time) > 400){
// Serial.print(" ");
}
if (out > 1){
// Serial.print("1");
strcat(measure,"1");
}
else{
//Serial.print("0");
strcat(measure,"0");
}
//Serial.print(",");
time = micros();
}
}