Good morning
i am wondering if anyone could help me with this little code, or point me in the direction on why it is not working.
singular function: Reading range from a lidar, and save it into a text document, to be my Y variable in a pointcloud mesh.
i am trying to use processing to do the processing of the data comming from the serial. and i am able to read the data from the Vl6180x sensor in Processing, so it it receiving data.
i have gotten it to create the textfile, however it is not writing anything in it.
i have checked the forums around on the web, however codes that is working for others, still won’t write into my textfile, what have i done wrong?
Ardunio Uno code
#include <Wire.h>
#include "Adafruit_VL6180X.h"
Adafruit_VL6180X vl = Adafruit_VL6180X();
void setup() {
Serial.begin(115200);
// wait for serial port to open on native usb devices
while (!Serial) {
delay(1);
}
Serial.println("Adafruit VL6180x test!");
if (! vl.begin()) {
Serial.println("Failed to find sensor");
while (1);
}
Serial.println("Sensor found!");
}
void loop() {
uint8_t range = vl.readRange();
uint8_t status = vl.readRangeStatus();
if (status == VL6180X_ERROR_NONE) {
Serial.print("Range: "); Serial.println(range);
}
delay(2000);
}
and my Processing code
import processing.serial.*;
Serial myPort; // Create object from Serial class
String val; // Data received from the serial port
PrintWriter output;
void setup() //konfigurasjonen i programmet
{
//Open port 1, 115200
String portName = Serial.list()[1]; //change the 0 to a 1 or 2 etc. to match your port
myPort = new Serial(this, portName, 115200);
// Create a new file in the sketch directory
output = createWriter("data2.txt");
}
void draw() //Loopen i programmet
{
if ( myPort.available() > 0)
{ // If data is available,
val = myPort.readStringUntil('\n'); // read it and store it in val
output.println(val); // Write the data to the textfile
}
println(val); //console print to verify information
}
void keyPressed() {
output.flush(); // Writes the remaining data to the file
output.close(); // Finishes the file
exit(); // Stops the program
}
I was just working on a similar problem yesterday, and so coded up a script to save a file.
This writes to the data folder only and you can choose whether to append or overwrite, it also checks if a file is present and if not creates one.
import java.io.BufferedWriter;
import java.io.FileWriter;
fileOutput output;
String loc = "positions.txt";
void setup() {
// set boolean to true to append file otherwise it will overwrite
//output = new fileOutput(loc);
output = new fileOutput(loc,true);
// Create a new file in the sketch directory
};
void draw() {
point(mouseX, mouseY);
output.saveData();
};
class fileOutput{
PrintWriter output;
boolean save,onMouseUp,mdown;
int counter;
File file;
String location;
fileOutput(String location){
this.location = location;
checkFile(location);
};
void saveData(){
if(mdown()){
checkFile( location);
}
if(mdown)
output.println(mouseX + ",+ " + mouseY);
saveTo();
};
void saveTo(){
if(onMouseUp()){
//output.println(counter);
output.flush(); // Writes the remaining data to the file
output.close(); // Finishes the file
//exit(); // Stops the program
}
};
boolean onMouseUp(){
boolean k = false;
if (pos()&&mousePressed&&!onMouseUp){
output.println(counter);
onMouseUp = true;
k = false;
}else if(onMouseUp&&!mousePressed){
k = true;
onMouseUp = false;
counter ++;
}
return k;
};
boolean mdown(){
boolean k= false;
if(mdown)k = false;
if(mousePressed&&!mdown){
mdown = true;
k = true;
}
if(!mousePressed)mdown = false;
return k;
};
boolean pos(){
return mouseX>0&&mouseX<width&&mouseY>0&&mouseY<height;
};
void checkFile(String location){
file = dataFile(location);
if (!file.exists()) {
output = createWriter("/data/"+location);
}
String filePath = file.getPath();
filePath = filePath.substring(3,filePath.length());
filePath = "/"+filePath.replace("\\","/");
println(filePath);
file = new File(filePath);
try {
FileWriter fw = new FileWriter(file, true);///true = append
BufferedWriter bw = new BufferedWriter(fw);
output = new PrintWriter(bw);
//add code here if you want to separate each write cycle;
println("hello world!!!!! j'ajoute something au txt");
output.println("hello world!!!!! j'ajoute something au txt");
}
catch(IOException ioe) {
System.out.println("Exception ");
//ioe.printStackTrace();
}
};
};
add more saveData functions if you need other parameters, and of course change the save conditions to suit your needs.