我是java和lejos的新手,所以如果我提出相当愚蠢的问题,请不要怪我。
我试图让lego超声波传感器通过在电机上旋转来扫描我的nxt周围的360度区域。每隔5度,它会保存到.txt文件的距离。
我的问题是,稍后当我使用nxjbrowse.bat上传文件后从我的电脑上读取文件时,它只包含与应该保存在那里的数字相关联的ASCII字符(0 - 255)。
我的NXT代码:
package Dataloggers;
import java.io.;
import lejos.nxt.;
public class USdistance {
int totalRotation = 360;
int scanDensity = 5;
UltrasonicSensor ultrasonicSensor = new UltrasonicSensor(SensorPort.S3);
File distanceFile = new File("Distances.txt");
FileOutputStream fileStream = null;
public static void main(String[] args) {
@SuppressWarnings("unused")
USdistance usD = new USdistance();
}
public USdistance() {
Motor.A.setAcceleration(2000);
Motor.A.setSpeed(50);
try {
fileStream = new FileOutputStream(distanceFile);
} catch (Exception e) {
LCD.drawString("Can't make a file", 0, 0);
Button.ESCAPE.waitForPress();
System.exit(1);
}
DataOutputStream dataStream = new DataOutputStream(fileStream);
Motor.A.rotate(90);
Motor.A.resetTachoCount();
Motor.A.backward();
do {
if (-(Motor.A.getTachoCount()) % scanDensity == 0 ) {
int distance = ultrasonicSensor.getDistance();
try {
dataStream.writeInt(distance);
fileStream.flush();
} catch (IOException e) {
LCD.drawString("Can't write to the file", 0, 1);
Button.ESCAPE.waitForPress();
System.exit(1);
}
}
} while (-(Motor.A.getTachoCount()) < totalRotation);
Motor.A.stop();
try {
fileStream.close();
} catch (IOException e) {
LCD.drawString("Can't save the file", 0, 1);
Button.ESCAPE.waitForPress();
System.exit(1);
}
Motor.A.rotate(270);
}
}
提前感谢Rob
答案 0 :(得分:0)
我用以下方法解决了我的问题:
int distance = ultrasonicSensor.getDistance();
BufferedOutputStream buffStream = new BufferedOutputStream(new FileOutputStream(new File(distances.txt)));
buffStream.write(distance.getBytes());
通过使用这个我的文本文件看起来像这样:41 41 0 0 0 0 0 0 40 40 40 40 40 39 39 39 39 39 39 40 40 40 40而不是㔵㈀㔵㈀㈀㔵㈀㔵㐀5㐴㐀3㌴㐀4㐴㌀6㌳㌀3㈵㔀2㈵㔀2㈵㔀2㈵㔀2㌵㔀3㌵㈀㔵㈀㔵㈀㔵㈀
无论如何,谢谢你的回复@SimpleCoder