- Jun,31,2021 -
ARDUINO
尽管眼下十分艰难,可日后这段经历
说不定就会开花结果.
/ 村上春树
首先要了解串口通讯
STEP 1
Arduino提供的串口通讯函数非常丰富,详细介绍参考Arduino官网串口使用指南。
比较详细的介绍我推荐简书的这个介绍:
https://www.jianshu.com/p/a102ebeb1f1f
Serial.begin()
描述:开启串口,通常置于setup()函数中。
Serial.end()
描述:禁止串口传输。此时串口Rx和Tx可以作为数字IO引脚使用。
Serial.print()
描述:串口输出数据,写入字符数据到串口。
Serial.println()
描述:串口输出数据并换行。
Serial.available()
描述:判断串口缓冲区的状态,返回从串口缓冲区读取的字节数。
Serial.read()
描述:读取串口数据,一次读一个字符,读完后删除已读数据。
返回值:返回串口缓存中第一个可读字节,当没有可读数据时返回-1,整数类型。(划重点!!!)
查找范例
STEP 2可以直接百度arduino和processing交互
ovo
这里直接总结:
arduino里面数据输出,
processing里面进行数据读取,
从而实现传感器影响画面。
同时processing里面需要确认端口名称,导入相关arduino库。
也就是:
import processing.serial.*;
Serial port;
void setup()
{
port=newSerial(this,"COM4",9600);
port.bufferUntil('\n');
//定义myPort的端口和数据传输率
//应和Arduino保持一致
size(600,200);
}
void draw()
{
while(port.available()>0){
char input = port.readChar();
//读取Arduino信息
}
}
构想海报
STEP 3
设想:进入一定距离范围,然后海报出现且随着距离改变和发出声音而发生变化。
Arduino:超声波测距仪
先连接好超声波传感器,测试是否正常运行。
详见:
https://www.arduino.cn/thread-3194-1-1.html
调整代码
STEP 4
!!!控制距离需要比较大小,因此,必须弄清楚arduino里输出的数据类型。
推荐阅读:
https://www.cnblogs.com/lulipro/p/7672954.html
QAQ 我死在了这一步
不知道是超声波传感器和processing传输数据的速度合不上
还是比大小方面出了问题
屏幕保持闪现
经过调整它确实受距离影响
但是还是处于闪现状态
和我想要的一定距离绿一定距离红
不一致
下面附上我的代码,希望有人能救救它。
55555
自闭
arduino
const int TrigPin = 2;const int EchoPin = 3;int distance;void setup() { // put your setup code here, to run once: // 初始化串口通信及连接SR04的引脚 Serial.begin(9600); pinMode(TrigPin, OUTPUT); // 要检测引脚上输入的脉冲宽度,需要先设置为输入状态 pinMode(EchoPin, INPUT); // Serial.println("Ultrasonic sensor:");}void loop() { // put your main code here, to run repeatedly: // 产生一个10us的高脉冲去触发TrigPin digitalWrite(TrigPin, LOW); delayMicroseconds(2); digitalWrite(TrigPin, HIGH); delayMicroseconds(10); digitalWrite(TrigPin, LOW); // 检测脉冲宽度,并计算出距离 distance = pulseIn(EchoPin, HIGH) / 58; Serial.print(distance,DEC); // Serial.print("cm"); Serial.println(); delay(1000);}
processing.java
import processing.serial.*; //导入串口库Serial myPort;char i;char b = 15;void setup() { size(1000, 1000); background(255); myPort=new Serial(this,"COM4",9600); myPort.bufferUntil('\n'); } void draw() { if(myPort.available()>0){ //如果接受到数据 char i = myPort.readChar(); print(i);//读取数据放入变量“i” if (i background(255); fill(255,0,0); ellipse(500,500,2*i,2*i); } else if ( i>=b){ background(255); fill(0,255,0); ellipse(500,100,2*i,2*i);} }}
没有彩蛋
嘿嘿
0.0