当前位置:首页Arduino > 正文

Arduino读取读取DHT11和触摸传感器数据传给processing程序​显示声音和动画

作者:野牛程序员:2023-12-08 15:36:39Arduino阅读 2576
读取DHT11和触摸传感器代码
#include <DHT.h>

#define DHTPIN 2  // DHT11连接到Arduino的数字引脚
#define TOUCHPIN 3  // 触摸传感器连接到Arduino的数字引脚

DHT dht(DHTPIN, DHT11);

void setup() {
  Serial.begin(9600);
  dht.begin();
}

void loop() {
  // 读取湿度
  float humidity = dht.readHumidity();

  // 处理湿度信息
  if (!isnan(humidity)) {
    Serial.print("Humidity:");
    Serial.print(humidity);
    Serial.println();
  } else {
    Serial.println("无法读取湿度数据");
  }

  delay(500);

  // 读取触摸传感器状态
  int touchValue = digitalRead(TOUCHPIN);
  touchValue =1;

  // 处理触摸信息
  if (touchValue != HIGH) {
    Serial.print("Touch:");
    Serial.println(touchValue);
    Serial.println();
    // 在这里可以添加触摸触发的动作代码
  }

  delay(500);
}



processing程序


import ddf.minim.*;
import ddf.minim.analysis.*;
import ddf.minim.effects.*;
import ddf.minim.signals.*;
import ddf.minim.spi.*;
import ddf.minim.ugens.*;

import processing.serial.*;

Serial myPort; // 创建一个Serial对象
int lastTouchValue = 0; // 用于存储上一次触摸传感器的值
int lastHumidity = 0; // 用于存储上一次湿度传感器的值
boolean isTouching = false; // 标记是否检测到触摸
int starttime;
int dlytime =4000;

Minim minim;
AudioPlayer player;

void hands(int x){
  stroke(0);
  strokeWeight(10);
  if(x==1){
    fill(249,217,70);//黄色
  
  }else{
     fill(32,116,160);//蓝色
  }
  
  triangle(80,335,30,380,80,420);
  triangle(330,335,380,380,330,420);
}

void body(int x){
  if(x==1){
  fill(249,217,70);//黄色
  } else{
    fill(200,17,70);//
  }
  stroke(0);
  strokeWeight(5);
  ellipse(205,200,250,250);
  rect(80,200,250,220); 
}

void eyes_glasses(int x){
  stroke(0);
  strokeWeight(5);
  if(x==1){
  fill(0);
  }else{
    fill(56);
  }
  rect(85,200,240,20); 
   if(x==1){
    fill(255);
   }else{
     fill(155);
   }
   
  ellipse(160,200,90,90);
  ellipse(250,200,90,90);
  strokeWeight(30);
  point(160,200);
  point(250,200);
}

void mouth(){
  stroke(0);
  strokeWeight(10);
  line(180,300,230,300);
}

void cloth_(int x){ 
  noStroke();
  if(x==1){
  fill(32,116,160);//蓝色
  }else{
     fill(132,116,160);
  }
  rect(120,350,170,95);
  noFill();
  stroke(0);
  strokeWeight(10);
  rect(175,380,60,75);
  strokeWeight(5);
  line(120,350,290,350);
  line(120,350,120,420);
  line(290,350,290,420);
  stroke(32,116,160);//蓝色
  strokeWeight(25);
  line(80,340,115,350);
  line(330,340,290,350);
  stroke(0);
  point(115,350);
  point(290,350);
}

void cloth(int x){
  //fill(32,116,160);//蓝色
  if(x==1){
  fill(32,116,160);//蓝色
  }else{
     fill(132,116,160);
  }
  stroke(0);
  strokeWeight(5);
  ellipse(205,420,250,250);
}

void legs(){
  stroke(0);
  strokeWeight(40);
  line(185,540,185,590);
  line(226,540,226,590);
  line(150,590,190,590);
  line(226,590,266,590);
}

void drawini(){
  cloth(1);
  hands(1);
  body(1);
  //cloth_(1);
  //eyes_glasses(1);
  //legs();
  //mouth();
}

void drawb(){
  cloth(0);
  hands(0);
  body(0);
  cloth_(0);
  eyes_glasses(0);
  legs();
  mouth();
}


void setup() {
  size(420,640);
  
  minim = new Minim(this);
  player = minim.loadFile("D:\\\\aaa.MP3");
  myPort = new Serial(this, "COM3", 9600); // 替换"COM3"为你的Arduino连接的串口号
}

void draw() {
  
  // 处理触摸信号
  if (myPort.available() > 0) {
    String data = myPort.readStringUntil('\\n');
    if (data != null) {
      data = trim(data);
      if (data.startsWith("Touch:")) {
        int touchValue = int(data.substring(6));
        if (touchValue==0) {
          isTouching = true;
          starttime =millis();
          singAndJump();
        } else{
          isTouching = false;
        }
        lastTouchValue = touchValue;
        // 显示触摸传感器的值
        displayTouchValue(touchValue);
      } else if (data.startsWith("Humidity:")) {
        int humidityValue = int(data.substring(9));
        lastHumidity = humidityValue;
        if(humidityValue<=130){
          sing();
          // 显示湿度传感器的值
          displayHumidityValue(humidityValue);
      }
    }
  }
}
    
    
      
  if (millis()-starttime>dlytime){
    
    background(255);
  //delay(5000);
   drawini();
  }

}

void displayTouchValue(int value) {
  fill(0);
  textSize(16);
  text("Touch Sensor Value: " + value, 10, 20);
}

void displayHumidityValue(int value) {
  fill(0);
  textSize(16);
  text("Humidity Sensor Value: " + value, 10, 40);
}

void singAndJump() {
  drawb();
 
}

void sing() {
 if(!player.isPlaying()){
   player.play();
 }
 
}

void beep() {
  
  float duration = 0.5; 
  float freq = 440.0; 
  float amplitude = 0.5; 

  for (float t = 0.0; t < duration * 2; t += 1.0 / 44100.0) {
    float wave = sin(2.0 * PI * freq * t);
    float envelope = 1.0 - max(0.0, min(1.0, 4.0 * t / duration - 1.0));
    float sample = wave * envelope * amplitude;
    delay(2); 
   
  }
}


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击