当前位置: 首页 > 知识库问答 >
问题:

使用arduino串行监视器输出缓冲区写入

应向晨
2023-03-14

我正在尝试向arduino的串行监视器发送一些数据,并使led亮起,但我还无法获取它。我的代码中有什么问题请检查这里是arduino代码

int led = 12; // LED connected to digital pin 13
int pts = 2;  // Powertail Switch 2 connected to digital pin 2
int recv = 0; // byte received on the serial port

void setup() {
// initialize onboard LED (led), Powertail (pts) and serial port
  pinMode(led, OUTPUT);
 pinMode(pts, OUTPUT);
 digitalWrite(led,LOW);
Serial.begin(9600);
}

void loop()
{

  // if serial port is available, read incoming bytes
  if (Serial.available() > 0) {
  recv = Serial.read();

// if 'y' (decimal 121) is received, turn LED/Powertail on
// anything other than 121 is received, turn LED/Powertail off
if (recv == 121){
  digitalWrite(led, HIGH);
  digitalWrite(pts,LOW);
} else {
  digitalWrite(led, LOW);
  digitalWrite(pts,HIGH);
}

// confirm values received in serial monitor window
Serial.print("--Arduino received: ");
Serial.println(recv);
 }
 }

下面是java代码

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

import com.fazecast.jSerialComm.SerialPort;
 import javax.swing.JLabel;
 import javax.swing.ImageIcon;
 import javax.swing.SwingConstants;

public class Connection {

static SerialPort chosenPort;

public static void main(String[] args) throws FileNotFoundException {

    // create and configure the window
    JFrame window = new JFrame();
    window.setTitle("Automatic Car Wash");
    window.setSize(1000, 600);
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.getContentPane().setLayout(null);
    Date DateAndTime = Calendar.getInstance().getTime();
    PrintWriter out = new PrintWriter("Incom Record Save.txt");


    // create a drop-down box and connect button, then place them at the top of the window
    JComboBox<String> portList = new JComboBox<String>();
    JButton connectButton = new JButton("Connect");
    JPanel topPanel = new JPanel();
    topPanel.setBounds(0, 0, 584, 33);
    topPanel.add(portList);
    topPanel.add(connectButton);
    window.getContentPane().add(topPanel);

    JLabel stageone = new JLabel("Stage One gif");
    stageone.setIcon(new ImageIcon("E:\\thesis\\first stage gif.gif"));
    stageone.setBounds(76, 95, 160, 120);
    stageone.setVisible(false);
    window.getContentPane().add(stageone);

    JLabel stageoneimage = new JLabel("Stage One image ");
    stageoneimage.setIcon(new ImageIcon("C:\\Users\\DELL\\Desktop\\stagoneimage.jpg"));
    stageoneimage.setBounds(76, 95, 160, 120);
    window.getContentPane().add(stageoneimage);

    JLabel TotalCars = new JLabel("Number of Cars");
    TotalCars.setHorizontalAlignment(SwingConstants.CENTER);
    TotalCars.setBounds(156, 270, 138, 14);

    window.getContentPane().add(TotalCars);

    JLabel lblTotalCars = new JLabel("Total Cars=");
    lblTotalCars.setHorizontalAlignment(SwingConstants.CENTER);
    lblTotalCars.setBounds(104, 270, 81, 14);
    window.getContentPane().add(lblTotalCars);

    JLabel TotalIncome = new JLabel("0");
    TotalIncome.setHorizontalAlignment(SwingConstants.CENTER);
    TotalIncome.setBounds(365, 270, 92, 14);

    window.getContentPane().add(TotalIncome);

    JLabel RS = new JLabel("RS");
    RS.setHorizontalAlignment(SwingConstants.CENTER);
    RS.setBounds(416, 270, 46, 14);
    window.getContentPane().add(RS);

    JLabel DateTime = new JLabel("Todays Date And Time");
    DateTime.setHorizontalAlignment(SwingConstants.CENTER);
    DateTime.setBounds(184, 294, 173, 25);
    DateTime.setText(DateAndTime.toString());
    window.getContentPane().add(DateTime);

    JButton btnSave = new JButton("  Save");
    btnSave.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            out.close();

        }
    });
    btnSave.setBounds(26, 295, 89, 23);
    window.getContentPane().add(btnSave);

    JLabel lblTotalIncome = new JLabel("Total Income=");
    lblTotalIncome.setHorizontalAlignment(SwingConstants.CENTER);
    lblTotalIncome.setBounds(304, 270, 92, 14);
    window.getContentPane().add(lblTotalIncome);

    JLabel thanks = new JLabel("thanks");
    thanks.setHorizontalAlignment(SwingConstants.CENTER);
    thanks.setIcon(new ImageIcon("C:\\Users\\DELL\\Desktop\\thanks.gif"));
    thanks.setBounds(36, 333, 312, 218);
    thanks.setVisible(false);
    window.getContentPane().add(thanks);

    JLabel lblStageTwoGif = new JLabel("stage two gif");
    lblStageTwoGif.setBounds(236, 95, 160, 120);
    window.getContentPane().add(lblStageTwoGif);

    JLabel stagetwoimage = new JLabel("stage2image");
    stagetwoimage.setIcon(new ImageIcon("C:\\Users\\DELL\\Desktop\\stagetwoimage.jpg"));
    stagetwoimage.setBounds(236, 95, 160, 120);
    window.getContentPane().add(stagetwoimage);

    JLabel stage3gif = new JLabel("stage3gif");
    stage3gif.setBounds(395, 95, 160, 120);
    window.getContentPane().add(stage3gif);

    JLabel stage3image = new JLabel("stageimage3");
    stage3image.setIcon(new ImageIcon("C:\\Users\\DELL\\Desktop\\stagethree.jpg"));
    stage3image.setBounds(395, 95, 160, 120);
    window.getContentPane().add(stage3image);

    JLabel Stagefourimage = new JLabel("stagefourimage");
    Stagefourimage.setIcon(new ImageIcon("C:\\Users\\DELL\\Desktop\\stagefour.jpg"));
    Stagefourimage.setBounds(555, 95, 160, 120);
    window.getContentPane().add(Stagefourimage);

    JLabel Stagefourgif = new JLabel("stagefourgif");
    Stagefourgif.setBounds(555, 95, 160, 120);
    window.getContentPane().add(Stagefourgif);

    JLabel Stagefiveimage = new JLabel("stagefiveimage");
    Stagefiveimage.setIcon(new ImageIcon("C:\\Users\\DELL\\Desktop\\stage 5image.jpg"));
    Stagefiveimage.setBounds(715, 95, 160, 120);
    window.getContentPane().add(Stagefiveimage);

    JLabel Stagefivegif = new JLabel("stagefivegif");
    Stagefivegif.setBounds(715, 95, 160, 120);
    window.getContentPane().add(Stagefivegif);

    // populate the drop-down box
    SerialPort[] portNames = SerialPort.getCommPorts();
    for(int i = 0; i < portNames.length; i++)
        portList.addItem(portNames[i].getSystemPortName());




    // configure the connect button and use another thread to listen for data
    connectButton.addActionListener(new ActionListener(){
        @Override public void actionPerformed(ActionEvent arg0) {
            if(connectButton.getText().equals("Connect")) {
                // attempt to connect to the serial port
                chosenPort = SerialPort.getCommPort(portList.getSelectedItem().toString());
                chosenPort.setComPortTimeouts(SerialPort.TIMEOUT_SCANNER, 0, 0);
                if(chosenPort.openPort()) {
                    connectButton.setText("Disconnect");
                    portList.setEnabled(false);
                }


                Thread thread = new Thread(){
                    @Override public void run() {
                        // wait after connecting, so the bootloader can finish
                        try {Thread.sleep(100); } catch(Exception e) {}

                        // enter an infinite loop that sends text to the arduino
                        PrintWriter output = new PrintWriter(chosenPort.getOutputStream());
                        while(true) {
                            output.println("y");
                            output.flush();
                            try {Thread.sleep(100); } catch(Exception e) {}
                        }
                    }
                };
                thread.start();

                // create a new thread that listens for incoming text and populates the graph
                Thread thread2 = new Thread(){
                    @Override public void run() {
                        int count = 0;
                        int total_income = 0;
                        int car_price=300;



                        Scanner scanner = new Scanner(chosenPort.getInputStream());
                        while(scanner.hasNextLine()) {

                            try {
                                String line = scanner.nextLine();
                                int number = Integer.parseInt(line);
                                System.out.println(number);

                                if(number==1)
                                {
                                    count++;
                                    stageone.setVisible(true);
                                    stageoneimage.setVisible(false);
                                    total_income=count*car_price;
                                    out.println("Date= "+DateAndTime+" Number of Cars="+count+" Total Income="+total_income);
                                    TotalCars.setText(String.valueOf(count));
                                    TotalIncome.setText(String.valueOf( total_income));
                                    thanks.setVisible(true);



                                }





                            } catch(Exception e) {}
                        }
                        scanner.close();

                    }
                };
                thread2.start();
            } else {
                // disconnect from the serial port
                chosenPort.closePort();
                portList.setEnabled(true);
                connectButton.setText("Connect");

            }
        }
    });



    // show the window
    window.setVisible(true);
}
}

共有1个答案

吴英武
2023-03-14

我通过改变产量就解决了这个问题。println(“y”);输出。写入(“y”);这就像一场合唱谢谢你的回应

 类似资料:
  • 我有一个程序可以打印到液晶显示器上,我想知道我是否可以同时将它打印到串行显示器上。 我试过连载。开始,但只是有错误。

  • 我正在尝试使用LiquidCrystal库在两个LED屏幕上以及在串行监视器上进行Arduino输出(稍后将输出到txt文件或类似文件)。 在我的代码中,我注释掉了Serial。开始(9600),然后屏幕正确输出,但一旦我包括它,串行监视器输出良好,但屏幕翻转并输出乱码。我是个新手,我知道有一些基本的东西我不知道,比如9600应该增加,因为可能需要这么大的功率? 干杯

  • 我已经用java编写了一段代码来与我的Arduino板通信。它工作得很好。我还可以使用串行监视器与Arduino板通信。 但是,当我试图打开串行监视器时,java程序正在运行(监听连接到电子板的端口,端口32),它没有说, 串行端口“COM 32”已在使用中。尝试退出任何可能正在使用它的程序 这是完整的信息(为了完整起见) 是的,我知道,这是我的java程序,它正在使用端口。但这是否意味着我不能同

  • 问题内容: 我在linux上有一个Java应用程序,它可以打开UDP套接字并等待消息。 在高负载下运行了几个小时之后,有一个数据包丢失,即数据包被内核接收,但不是由我的应用程序接收(我们在嗅探器中看到丢失的数据包,在netstat中看到UDP数据包丢失,我们没有看到这些数据包)在我们的应用日志中)。 我们尝试扩大套接字缓冲区,但这并没有帮助-我们早些时候就开始丢失数据包,仅此而已。 对于调试,我想

  • 问题内容: 我有一个Java程序,它将一些文本输出到控制台。它使用,和其他一些方法来执行此操作。 在程序的最后,我想读取控制台中的所有文本并将其复制到String缓冲区中。我该如何用Java做到这一点?我需要阅读和独立。 问题答案: 好的,这是一个有趣的问题。似乎不是一种同时解决所有方法的优雅方法。(不幸的是没有。) 我确实写了一个丑陋的基于反射的解决方法(我想不要在生产代码中使用它:) …可以像

  • 问题内容: 默认情况下,Python的解释器是否启用输出缓冲? 如果答案是肯定的,那么有什么方法可以禁用它? 到目前为止的建议: 使用命令行开关 包装每次写入后刷新的对象 设置环境变量 还有其他方法可以在执行过程中以编程方式在中设置一些全局标志吗? 问题答案: 你可以使用”python -u”()或通过设置环境变量PYTHONUNBUFFERED来跳过整个python进程的缓冲。 你还可以将替换为