使用Java(Arduino duemilanove)从串行端口读取数据

使用Java(Arduino duemilanove)从串行端口读取数据,java,usb,arduino,Java,Usb,Arduino,任务:在电脑上显示程序中的数据 扩展任务:(解决此问题后)我将最终将数据保存到文件中,并将程序扩展到GUI中 微控制器:Arduino duemilanove 操作系统:Windows7 语言:Java 编译器:Eclipse Io方法:USB类型“B”(arduino端),USB类型A(PC端) 我在这里和其他网站上读过至少30个不同的教程/问题。我从网站上抓取了一些例子,下载了一些库,不断出现红线和错误。我现在已经放弃了这一切,决定谦卑地来到这里,看看是否有人愿意帮助我 我怀疑我在我的头,但

任务:在电脑上显示程序中的数据

扩展任务:(解决此问题后)我将最终将数据保存到文件中,并将程序扩展到GUI中

微控制器:Arduino duemilanove

操作系统:Windows7

语言:Java

编译器:Eclipse

Io方法:USB类型“B”(arduino端),USB类型A(PC端)

我在这里和其他网站上读过至少30个不同的教程/问题。我从网站上抓取了一些例子,下载了一些库,不断出现红线和错误。我现在已经放弃了这一切,决定谦卑地来到这里,看看是否有人愿意帮助我

我怀疑我在我的头,但那很好,我很高兴学习,并被称为愚蠢

我知道其他软件,如“处理”已经可以为我做到这一点。我想自己制作这个软件

我已经看过RXTX和CommAPI。老实说,到目前为止,我从中得到的只是我知道它的存在,一些东西显然已经过时了,而且似乎大多数教程都假设了大量的不同学科的知识

在我写这个问题的时候,我还看了这里提出的更多问题,其中大部分我以前都见过。我在挥舞白旗!有人帮我学习我在做什么

我想做的代码示例

// How would I make this class read from the arduino?

class arduinoData {

    static int t = (int) 72.91; //pull from arduino instead of making it up

    static int temperature(){

        return t;
    }


}


public class example
{
    public static void main(String[] args) 
    {
        System.out.println("temp from the sensor is: "+   arduinoData.temperature()+"F");
    //output:
    //temp from the sensor is: 71F
    }
}
编辑:Arduino串行监视器工作正常。我将添加arduino代码来澄清这一点

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 3
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);


DeviceAddress Thermometer = { 0x28, 0x56, 0xA0, 0xA5, 0x03, 0x00, 0x00, 0x7D };

void setup(void)
{
  Serial.begin(9600);
  sensors.begin();
  sensors.setResolution(Thermometer, 10);

  pinMode(13, OUTPUT);  

}


    void printTemperature(DeviceAddress deviceAddress)
    {
      float tempC = sensors.getTempC(deviceAddress);
      if (tempC == -127.00) { Serial.print("Error."); }
      else {Serial.print(DallasTemperature::toFahrenheit(tempC));Serial.print("F");}
    }


void loop(void)
{ 
   digitalWrite(13, HIGH);
   delay(1000);
   digitalWrite(13,  LOW);
   sensors.requestTemperatures();
   Serial.print("temp from sensor: ");printTemperature(Thermometer);
   Serial.print("\n\r");
}
#包括
#包括
#定义一条线\u总线3
单线单线(单线总线);
达拉斯温度传感器(单线);
设备地址温度计={0x28、0x56、0xA0、0xA5、0x03、0x00、0x00、0x7D};
作废设置(作废)
{
Serial.begin(9600);
begin();
传感器.设置分辨率(温度计,10);
pinMode(13,输出);
}
无效打印温度(设备地址设备地址)
{
float tempC=sensors.getTempC(设备地址);
如果(tempC==-127.00){Serial.print(“Error”);}
else{Serial.print(dallastetemperature::toFahrenheit(tempC));Serial.print(“F”);}
}
无效循环(无效)
{ 
数字写入(13,高);
延迟(1000);
数字写入(13,低);
传感器。请求温度();
串行打印(“来自传感器的温度”);打印温度(温度计);
串行打印(“\n\r”);
}
Arduino输出:

来自传感器的温度:70.25F

来自传感器的温度:70.70F

来自传感器的温度:70.70F

来自传感器的温度:70.70F

更新:

好的,我想我已经通过下面提到的教程正确安装了rxtx。然而,我在这一点上迷失了方向:

对于Windows,您可以在同一个窗口中创建名为run.bat的批处理文件 目录作为上面提到的示例代码。此批处理文件可以是 在您的系统上使用,但您可能需要修改路径以匹配 在系统上安装Java和Arduino IDE的位置

setlocal set PATH=%PATH%;C:\ProgramFiles(x86)\arduino-0017\ “C:\ProgramFiles(x86)\Java\jdk1.6.0\U 12\bin\javac”-cp”C:\Program 文件(x86)\arduino-0017\lib\RXTXcomm.jar“SerialTest.java”C:\Program 文件(x86)\Java\jdk1.6.0\u 12\bin\Java“-cp”C:\Program Files (x86)\arduino-0017\lib\RXTXcomm.jar;“串行测试

基本上,您需要将RXTXcomm.jar添加到类路径中, 您需要添加相关的JNI接口DLL (rxtxSerial.dll)到您的路径。对于其他平台,您需要 将相同的JNI共享库添加到运行时路径

运行run.bat文件时,您应该会看到与 ArduinoIDE串行监视器。您可以使用Ctrl+Break来停止 节目


我该怎么办?

检查您的固件是否正在将Arduino打印到usb(虚拟化为串行端口):加载固件并通过“串行监视器”(右侧的镜头按钮)测试串行通信

一旦完成,您就知道问题与试图从COM接口读取的java代码有关。如果您在这里仍然有问题,那么您的问题已经转移到“使用Java从串行端口读取”


有关Arduino与Java接口的一般参考资料,我建议您阅读本教程,并附上解释和代码示例:

谢谢。我已将问题和代码相应地重新措辞。我已经看过RXTX了。我想我会再看得更深入一些。在此期间,任何更多的帮助将不胜感激!我建议你解决你的问题。没有人会回答一个涉及这么多事情的问题。请记住,stackoverflow不是一个论坛(如果没有,请阅读常见问题解答:)。如果您在安装问题上遇到困难,您可以重新表述您的整个问题,并将其放到superuser.com上。