processing+Arduino判断鼠标点击并亮灯(判断一个点(鼠标事件)是否在三角形、圆、椭圆、矩形内之第二章(超详细鼠标交互))

第三篇更新了!!!

前面两篇我们详细地从数学上讲解了如何判断一个鼠标点击点是否在三角形、圆、椭圆、矩形内,这一期我们主要简单从代码上解决processing+Anduino互相通信,并实现由processing做界面给用户点击,由Anduino接收processing的判断结果,然后通过arduino uno开发板亮对应的灯反馈,话不多说上代码:

上两篇链接:

这篇主要讲如何判断在圆和三角形内

这一篇主要讲如何判断在椭圆和矩形内部 ​​​​​​​

效果:

#视频加载中......

联合编程之processing代码:

import processing.serial.*;
Serial port;
void setup(){
  port = new Serial(this,"COM3",9600);
  size(150,50);
}
void draw() {
  fill(255,0,0);
  quad(0,0,0,50,50,50,50,0);
  fill(0,255,0);
  triangle(75,0,50,50,100,50);
  fill(0,0,255);
  ellipse(125,25,50,50);
}
void mouseClicked(){
  if((mouseX>=0)&(mouseX<=50)&(mouseY>=0)&(mouseY<=50)){//矩形
  println("red");
  port.write("a");
  }else if((mouseX>=50)&(mouseX<=100)&(mouseY>=0)&(mouseY<=50)){//三角形
    float a = sqrt(sq(mouseX-50)+sq(mouseY-50));
    float b = sqrt(sq(mouseX-75)+sq(mouseY-0));
    float c = sqrt(sq(mouseX-100)+sq(mouseY-50));
    float d = sqrt(sq(75-50)+sq(0-50));
    float p1 = (a+b+d)/2;
    float p2 = (a+c+50)/2;
    float p3 = (c+b+d)/2;
    float s = sqrt(p1*(p1-a)*(p1-b)*(p1-d))+sqrt(p2*(p2-a)*(p2-c)*(p2-50))+sqrt(p3*(p3-c)*(p3-b)*(p3-d));
    port.write("A");
    if (s>=50*50/2-10 & s<=50*50/2+10){//圆
    println("greed");
    port.write("b");}
  }else if(sqrt(sq(mouseX-125)+sq(mouseY-25)) <= 25){//空白区域
    println("blue");
    port.write("c");
  }
}

说明:

以上写了三种图形的,有需要加椭圆的可以参考我前面的两篇文章加判断就好了,没什么难度

实现说明:

在processing中判断处于哪一个图形,判断完后通过

port.write("a");

 函数实现判断结果的传输,传输是通过计算机中ASCII码传输的,所以在arduino中直接通过字母对应的ASCII码值判断就好,判断完成就是编写程序arduino uno开发板实现亮灯,也没有什么难度

联合编程之arduino代码: 

int c = 0;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(13,OUTPUT);
  digitalWrite(13,LOW);
}

void loop() {
  // put your main code here, to run repeatedly:
  if(Serial.available()){
    c = Serial.read();
    if (c == 97){
      digitalWrite(13,HIGH);
      digitalWrite(10,LOW);
      digitalWrite(7,LOW);}
    else if(c==98){
      digitalWrite(13,LOW);
      digitalWrite(10,HIGH);
      digitalWrite(7,LOW);}
    else if(c==99){
      digitalWrite(13,LOW);
      digitalWrite(10,LOW);
      digitalWrite(7,HIGH);}
     else {
      digitalWrite(13,LOW);
      digitalWrite(10,LOW);
      digitalWrite(7,LOW);}
    }

}

至此本文结束,感谢你的支持!!!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要记录鼠标点击次数和使用时长,你需要使用ArduinoProcessing的串口通信功能。下面是一些步骤: 1. 在Arduino中编写代码,使用`Mouse.click()`函数来检测鼠标点击次数,并使用`millis()`函数来计算使用时间。 ```arduino #include <Mouse.h> unsigned long startTime; // 记录启动时间 int clickCount = 0; // 记录鼠标点击次数 void setup() { Mouse.begin(); startTime = millis(); // 记录启动时间 Serial.begin(9600); // 初始化串口通信 } void loop() { if (Mouse.getButton() == MOUSE_LEFT) { // 检测鼠标左键是否点击 clickCount++; // 点击次数加1 } unsigned long currentTime = millis(); // 获取当前时间 unsigned long usedTime = currentTime - startTime; // 计算使用时间 Serial.print("Click Count: "); Serial.println(clickCount); Serial.print("Used Time: "); Serial.print(usedTime / 1000); Serial.println("s"); delay(1000); // 延迟1秒 } ``` 2. 在Processing中编写代码,使用`Serial`对象来接收并记录Arduino发送的数据。 ```processing import processing.serial.*; Serial myPort; // 串口对象 int clickCount = 0; // 记录鼠标点击次数 int usedTime = 0; // 记录使用时间 void setup() { size(400, 400); myPort = new Serial(this, "COM3", 9600); // 初始化串口通信 } void draw() { background(255); while (myPort.available() > 0) { // 如果串口中有数据 String data = myPort.readStringUntil('\n'); // 读取数据 if (data != null) { // 如果数据不为空 if (data.startsWith("Click Count: ")) { // 如果数据以"Click Count: "开头 data = data.substring(13); // 去掉"Click Count: ",只保留数字 clickCount = Integer.parseInt(data); // 将数字转换为整数 } else if (data.startsWith("Used Time: ")) { // 如果数据以"Used Time: "开头 data = data.substring(11); // 去掉"Used Time: ",只保留数字 usedTime = Integer.parseInt(data); // 将数字转换为整数 } } } textAlign(CENTER); textSize(32); text("Click Count: " + clickCount, width/2, height/2 - 50); text("Used Time: " + usedTime + "s", width/2, height/2 + 50); } ``` 3. 将Arduino和计算机连接,上传Arduino代码并打开Processing程序,你就可以看到鼠标点击次数和使用时长的实时记录了。 注意:在运行程序之前,确保你已经选择了正确的串口端口。如果你使用的是Mac电脑,串口端口通常为`/dev/cu.usbmodem`开头的一个字符串。如果你使用的是Windows电脑,串口端口通常为`COM`开头的一个数字。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你好呀zws

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值