scala - 与 jSerialComm 的串行通信不发送任何内容
问题描述
我构建了一个简单的 Scala 应用程序和一个简单的 Arduino 脚本来测试 jSerialComm 库上的串行通信。该程序只找到一个活动端口(Arduino 连接的那个),端口和 Arduino 上的波特率相同,并且代码在编写时不会引发异常。然而,Arduino 什么也没收到(RX LED 熄灭)。
斯卡拉代码:
import com.fazecast.jSerialComm._
object Test extends App {
val ports = SerialPort.getCommPorts
ports.foreach(println(_))
val port: SerialPort = ports(0)
var bytes = Array[Byte]()
val toWrite: Long = 3
var a = 0
var b = 0
var c = 0
println(port.getBaudRate)
while (true) {
if (a < 3) a += 1 else a = 0
bytes = Array[Byte](a.toByte, a.toByte, a.toByte)
port.writeBytes(bytes, toWrite)
println("Sent " + bytes(0) + " to " + port.toString)
Thread.sleep(1000)
}
}
Arduino代码:
const int R = 12;
const int G = 13;
const int B = 11;
void setup() {
pinMode(R, OUTPUT);
pinMode(G, OUTPUT);
pinMode(B, OUTPUT);
Serial.begin(9600);
while(!Serial);
}
void loop() {
byte buff[3] = {0, 0, 0};
int numR = 0;
bool cont1 = false;
bool cont2 = false;
bool cont3 = false;
if(Serial.available()){
Serial.print("Found stuff");
Serial.readBytes(buff,3);
}
for(int i = 0; i < 3; i++){
if(buff[i] == 1){
cont1 = true;
}
if(buff[i] == 2){
cont2 = true;
}
if(buff[i] == 3){
cont3 = true;
}
}
if(cont1) digitalWrite(R, HIGH); else digitalWrite(R, LOW);
if(cont2) digitalWrite(G, HIGH); else digitalWrite(G, LOW);
if(cont3) digitalWrite(B, HIGH); else digitalWrite(B, LOW);
if(cont1 || cont2 || cont3) delay(1000);
}
解决方案
我忘了用
port.openPort()
现在它工作得很好
推荐阅读
- json - 错误 data.forEach 不是函数(如何提取对象的 Json 对象)
- python - Python - 从嵌套列表中提取值
- arrays - 组合对象流中的数组
- python - 读取文件并用 python 替换 LF,但不是 CR-LF
- r - 用循环绑定嵌套列表中的 tibbles 行,无论 tibbles 的数量是多少
- c# - 如何为 iText7 / pdfhtml 设置默认字体
- azure-cosmosdb - Azure 为存储在 CosmosDB 中的图形数据提供了可视化工具
- excel - Excel 2013 使用查询获取 sql server 数据
- c++ - 从我的类到字符串的隐式和显式转换
- c - 我可以在不为我计算的情况下打印出一个 int 吗(带有“+”符号和前后两个数字)在 c 中?