【问题标题】:Arduino - Serial.read() cannot read two digit data?Arduino - Serial.read() 无法读取两位数数据?
【发布时间】:2014-03-22 06:38:30
【问题描述】:

我做了一个 7 段,通过导致 74ls48 ICconnected toGizduino(mini) w/ ATmega328. I wanted to count from0-10usingjava-to-arduino。`

这是Java的代码:

public class Main extends javax.swing.JFrame {

public static final int[] arrayNum= new int[20];


private BufferedReader input;
private OutputStream output=null;
SerialPort serialPort;
private final String PORT="COM18";

private static final int TIMEOUT=2000; //2000

private static final int DATA_RATE=9600; //9600

public Main() {
    initComponents();
    init();
    setTitle("JavaDuino");
    //jRadioButton1.setSelected(true);
}

public void init(){
    CommPortIdentifier portId = null;
    Enumeration portEnum=CommPortIdentifier.getPortIdentifiers();

    while(portEnum.hasMoreElements()){
        CommPortIdentifier actualPortID=(CommPortIdentifier) portEnum.nextElement();
        if(PORT.equals(actualPortID.getName())){
            portId=actualPortID;
            break;
        }
    }
    if(portId==null){

        //mostError("Could not find COM port.");
        System.exit(ERROR);
    }
    try{
        serialPort = (SerialPort) portId.open(this.getClass().getName(), TIMEOUT);
        serialPort.setSerialPortParams(DATA_RATE, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
        output = serialPort.getOutputStream();
    }catch(Exception e){

      // mostError(e.getMessage() );
       System.exit(ERROR);
    }
}

private void eventData(String data ){
    try{
        output.write(data.getBytes());
        System.out.print("\nData= "+data);

    } catch(Exception e){
       // mostError("ERROR");
        System.exit(ERROR);

    }

   // public void mostError(String Message){
        //JOptionPane.showMessageDialog(this, message, "ERROR", JOptionPane.ERROR_MESSAGE);

    }


private int i=0;

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    arrayNum[i]=i;

    String a=Arrays.toString(arrayNum);
    System.out.println("Array="+Arrays.toString(arrayNum));
    System.out.println("a="+a);
    eventData(a);
     i++;
    if(i==10){
        while(i>0){

        arrayNum[i]=0;
        i--;
        }
        i=0;
     }
}    

还有 Arduino 的代码:

const int a=10;
const int b=11;
const int c=12;
const int d=13;
int Byte=0;

void setup(){
Serial.begin(9600);  //open connection serial port
pinMode(a,OUTPUT);
pinMode(b,OUTPUT);
pinMode(c,OUTPUT);
pinMode(d,OUTPUT);
}
void loop(){
if(Serial.available()>0)
{
  Byte=Serial.read();
  if(Byte=='0'){      //Number 1

     digitalWrite(a  ,LOW);
     digitalWrite(b  ,LOW);
     digitalWrite(c  ,LOW);
     digitalWrite(d  ,LOW);

}else if(Byte=='1'){      //Number 1

     digitalWrite(a  ,HIGH);
     digitalWrite(b  ,LOW);
     digitalWrite(c  ,LOW);
     digitalWrite(d  ,LOW);

} else if(Byte=='2'){  //Number 2

     digitalWrite(a  ,LOW);
     digitalWrite(b  ,HIGH);
     digitalWrite(c  ,LOW);
     digitalWrite(d  ,LOW);

}
    else if(Byte=='3'){   //Number 3

     digitalWrite(a  ,HIGH);
     digitalWrite(b  ,HIGH);
     digitalWrite(c  ,LOW);
     digitalWrite(d  ,LOW);

} else if(Byte=='4'){  //Number 4

    digitalWrite(a  ,LOW);
     digitalWrite(b  ,LOW);
     digitalWrite(c  ,HIGH);
     digitalWrite(d  ,LOW);
}   else if(Byte=='5'){  //Number 5

    digitalWrite(a  ,HIGH);
     digitalWrite(b  ,LOW);
     digitalWrite(c  ,HIGH);
     digitalWrite(d  ,LOW); 

} else if(Byte=='6'){  //Number 6

   digitalWrite(a  ,LOW);
     digitalWrite(b  ,HIGH);
     digitalWrite(c  ,HIGH);
     digitalWrite(d  ,LOW);

}  else if(Byte=='7'){  //Number 7

    digitalWrite(a  ,HIGH);
     digitalWrite(b  ,HIGH);
     digitalWrite(c  ,HIGH);
     digitalWrite(d  ,LOW);

}   else if(Byte=='8'){  //Number 8

   digitalWrite(a  ,LOW);
     digitalWrite(b  ,LOW);
     digitalWrite(c  ,LOW);
     digitalWrite(d  ,HIGH);

} else if(Byte=='9'){  //Number 9

      digitalWrite(a  ,HIGH);
     digitalWrite(b  ,LOW);
     digitalWrite(c  ,LOW);
     digitalWrite(d  ,HIGH);

} else if(Byte=='10'){  //Number 0

      digitalWrite(a  ,LOW);
     digitalWrite(b  ,LOW);
     digitalWrite(c  ,LOW);
     digitalWrite(d  ,LOW);
 }
 }  
 }

代码似乎在 0 处堆叠,我真的不知道为什么。请帮忙。

【问题讨论】:

    标签: java arrays serial-port arduino led


    【解决方案1】:

    Byte=Serial.read(); 正在读取精确的一个字节,可以是单个字符'0',..'9' java 字符串"10" 是两个字节,'1',然后是'0'。所以在loop 中永远不会使用最后一种情况。相反,它执行'1' 案例并将'0' 留在缓冲区中。

    有两种方法可以绕过它。始终一次写入两个字节。与Byte1=Serial.read(); Byte2=Serial.read();

    您可以在 java 中使用 Integer.toString(int i, 16) 来使用十六进制数字。和else if( Byte=='a') ...。在阿杜诺。

    【讨论】:

      【解决方案2】:

      您可以使用函数 Serial.parseInt() 。 我遇到过同样的问题。我使用了它,它开始接受两位数而没有任何麻烦。 int value = Serial.parseInt()

      【讨论】:

        猜你喜欢
        • 2022-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多