用uno开发板连接超声波传感器控制WS2812灯带-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 770|回复: 7

[未解决] 用uno开发板连接超声波传感器控制WS2812灯带

[复制链接]
发表于 2022-3-31 22:27 | 显示全部楼层 |阅读模式
棘手问题,我用uno开发板连接超声波传感器控制WS2812灯带,原本应该是代码上传到开发板,插上电源,我触发超声波传感器灯带才亮,离开传感器感应范围就熄灭,但是现在的效果是插上电源不用传感器灯带就亮了,我把传感器都拔掉了也不影响它继续亮,是不是代码缺少什么控制传感器的语句啊求求朋友们帮帮忙看一看
#include<Adafruit_NeoPixel.h>
#ifdef __AVR__
#include<avr/power.h>
#endif

#define PIN 6
#define NUMPIXELS 120
Adafruit_NeoPixel pixels(NUMPIXELS,PIN,NEO_GRB+NEO_KHZ800);
#define DELAYVAI 500

int TrigPin = 8;
int EchoPin = 9;
int val;

void setup()
{
  Serial.begin(9600);
  pinMode(TrigPin,OUTPUT);
  pinMode(EchoPin,INPUT);
  pinMode(PIN,OUTPUT);
  #if defined(_AVR_ATtiny85_)&&(F-CPU == 16000000)
  clock_prescale_set(clock_div_1);
  #endif
  pixels.begin();
}

void loop()
{
  digitalWrite(TrigPin,LOW);
  delayMicroseconds(2);
   digitalWrite(EchoPin,HIGH);
  delayMicroseconds(10);
  int cm = pulseIn(EchoPin,HIGH)/20.0;
  cm = (int(cm*100.0))/100.0;
  Serial.println(cm);
   Serial.println("cm");
   delay(1);
   if(58>=cm)
{
  for(int i=0;i<NUMPIXELS;i++){
    pixels.setPixelColor(i,pixels.Color(random (48,238),random (113,255),random (62,241)));
    pixels.show();
    delay(2);
  }
}
else{
  for(int i=0;i<NUMPIXELS;i++){
     pixels.setPixelColor(i,pixels.Color(0,0,0));
    pixels.show();
    delay(2);
  }
}
}

发表于 2022-4-1 08:39 | 显示全部楼层
你这测距的公式不对吧,一般不都是这样吗  cm = pulseIn(EchoPin, HIGH) / 58.00;  
按你的算法,算出来距离变成了原来的3倍
发表于 2022-4-1 08:43 | 显示全部楼层
你设的触发距离是58,实际上是174cm,然后你懂的
 楼主| 发表于 2022-4-1 11:33 | 显示全部楼层
myself1820 发表于 2022-4-1 08:39
你这测距的公式不对吧,一般不都是这样吗  cm = pulseIn(EchoPin, HIGH) / 58.00;  
按你的算法,算出来距 ...

可是只是修改后面的数值依然没有任何变化哎,依然是超声波完全没有控制,通上电源灯带就直接亮了,之前做过测距这个传感器是没有问题的
 楼主| 发表于 2022-4-1 11:34 | 显示全部楼层
myself1820 发表于 2022-4-1 08:43
你设的触发距离是58,实际上是174cm,然后你懂的

我可能不太懂
发表于 2022-4-1 14:40 | 显示全部楼层
大哥,你超声波测距的程序写错了。看看这个帖子https://www.arduino.cn/forum.php ... 5%E5%A3%B0%E6%B3%A2
EchoPin是接收的,你写的digitalWrite(EchoPin,HIGH);

你参考下面的
digitalWrite(TrigPin, LOW); //低高低电平发一个短时间脉冲去TrigPin
delayMicroseconds(2);
digitalWrite(TrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
cm = pulseIn(EchoPin, HIGH) / 58.0; //将回波时间换算成cm
cm = (int(cm * 100.0)) / 100.0; //保留两位小数
 楼主| 发表于 2022-4-1 16:42 | 显示全部楼层
myself1820 发表于 2022-4-1 14:40
大哥,你超声波测距的程序写错了。看看这个帖子https://www.arduino.cn/forum.php?mod=viewthread&tid=1069 ...

好的谢谢你,问题已将解决啦
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 11:57 , Processed in 0.076366 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表