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

发布于:2024-04-21 ⋅ 阅读:(179) ⋅ 点赞:(0)

第三篇更新了!!!

前面两篇我们详细地从数学上讲解了如何判断一个鼠标点击点是否在三角形、圆、椭圆、矩形内,这一期我们主要简单从代码上解决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);}
    }

}

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


网站公告

今日签到

点亮在社区的每一天
去签到