我有一个简单的arduino设置,读取电位器并将输出写入串行连接。
void setup() {
// initialize serial communication
Serial.begin(9600);
}
void loop() {
// read the value of A0, divide by 4 and
// send it as a byte over the serial connection
Serial.write(analogRead(A0) / 4);
delay(20);
}
我想有一个prolog程序在后台监视这个流。我希望它记录某些事件,但我也可以随时查询流。
我真的不知道从哪里开始设置它。我如何实际读取流,然后我如何有两个进程/线程(不知道该怎么称呼它们)。一个进程监视流,第二个进程运行顶级,所以我可以查询动态数据库?
我想象的是:
:-dynamic currentvalue/1.
startthread1 :-
loop.
loop :- read_serial(X),
check(X),
retractall(currentvalue(_)),
assertz(currentvalue(X)),
loop.
check(X):-
X>100,
get_time(Time),
write_file(Time,X).
check(_).
*我省略了write_file的def
我想我会查询:
?- thread_create(startthread1, Id, [alias(serial_mon)]).
然后我仍然可以通过顶层查询`currentvalue / 1'我想什么时候?
这会有用吗?我如何定义read_serial/1
。 ?另外我如何停止我命名为serial_mon
的线程?
更新
我已将循环代码更改为以下内容:
void loop() {
// read the value of A0, divide by 4 and
// send it as a byte over the serial connection
Serial.print(analogRead(A0) / 4);
Serial.print('.');
delay(100);
}
如果我查看串行监视器,我现在得到如下输出:
205.205.205.205. etc
我认为我应该能够通过read / 2阅读?
如果我的序言很简单:
go(File):-
open(File,read,Stream,[]),
read(Stream,X),
writeln(X),
close(Stream).
我查询:
?-go('/dev/ttyACM0').
我没有输出。我做错了什么?