- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前,我使用 3 个触摸电容传感器、2 个共阳极 RGB LED 和 Arduino。 Sen0将具备三个条件:
然后,当 Sen0 按 0 时,如果我按 Sen1 1,红色应该亮起。当 sen0 在 press0 时,如果我按 sen2,两个红色 LED 应该亮起。
Sen0 at press1 如果我按 sen1,它应该点亮 1 个绿色 LED,如果我按 sen2,它应该点亮两个绿色 LED。
Sen0 at press2 如果我按 sen1,它应该点亮 1 个蓝色 LED,如果我按 sen2,它应该点亮 2 个蓝色 LED。
感谢您的帮助!我还添加了代码草图。
代码:
[1]: /image/wjKW7.png
最佳答案
以下是根据我们目前所知的一些观察结果。
我相信电容式触摸传感器不会返回高/低结果,除非它们是“数字电容式触摸传感器”。非数字可能会返回模拟值,因此您可能需要使用 AnalogRead 函数。
在这种情况下,您的代码可能会显示如下内容:
senVal1 = analogRead(sen1);
if (senVal1 > 800) {
// Do sensor is touched stuff
}
此外,假设您的 LED 通过阴极连接到 Arduino(即低电平 = ON),那么您似乎永远不会关闭任何 LED。也就是说没有这样的代码:
digitalWrite(LEDX, HIGH);
因此,结果可能是所有 LED 都会亮起并保持亮起状态。
最后,您可能想引入一些去抖和/或尚未放手。考虑以下因素:
void loop() {
// read the state of the sensor0 value:
senState0 = digitalRead(sen0); // This appears to be in the wrong place!!!!
// check if the sensortouch is pressed.
// if it is, the sensorState is HIGH:
if ( senState0 == HIGH ) {
if (sentouchCount1 % numberOfLED1 == 0 ){
digitalWrite(LEDR,LOW);
digitalWrite(LEDR1,LOW);
}
循环函数每秒将被调用多次(例如每秒数千次)。您的逻辑实际上是“Sensor0 按下了吗?”。该测试每秒执行很多很多次。因此,涉及“sentouchCount1”的测试每秒将执行很多次。
假设您实际上通过在某处添加 1 来更改sentouchCount1 的值,这将快速循环 if 语句的所有可能值,导致所有 LED 看起来立即打开。
但是,您没有更改sentouchCount1的值,因此只有第一个if打开LEDR并且LEDR1可能被激活。
哦,关于“还没有放手”这一点,请考虑以下代码:
boolean isPressed = false;
loop() {
if (senState0 == HIGH && !isPressed) {
// do stuff when we detect that the switch is pressed
isPressed = true; // Make sure we don't keep doing this for the entire
// duration the user is touching the switch!
} else if (senState0 == LOW && isPressed) {
isPressed = false; // User has let go of the button, so enable the
// previous if block that takes action when the user
// presses the button.
} // You might need to search "debouncing a switch", but I do not think this is required for capacative touch sensors (especially digital ones).
根据我下面的评论,您可能需要执行以下操作:
boolean isSensor1Touched = false;
void loop() {
// read the state of the sensor0 value:
senState0 = digitalRead(sen0); // This appears to be in the wrong place!!!!
// check if the sensortouch is pressed.
// if it is, the sensorState is HIGH:
if ( senState0 == HIGH && ! isSensor1Touched) {
sentouchCount1++;
isSensor1Touched = true;
if (sentouchCount1 % numberOfLED1 == 0 ){
digitalWrite(LEDR,LOW);
digitalWrite(LEDR1,LOW);
}
if (sentouchCount1 % numberOfLED1 == 1 ){
digitalWrite(LEDG,LOW);
digitalWrite(LEDG1,LOW);
}
if (sentouchCount1 % numberOfLED1 == 2){
digitalWrite(LEDB,LOW);
digitalWrite(LEDB1,LOW);
}
} else if (senState0 == LOW && isSensor1Touched) {
isSensor1Touched = false;
}
// Then repeat for other sensors...
关于c - 三个传感器,带 2 个 RGB LED Arduino,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56107735/
嘿,我 wounderd 如果有什么。我可以继续阅读以改进此代码的突击队吗?至少它现在可以工作,但需要做一些微调:) 如您所见,代码非常困惑且难以阅读。希望有人能帮忙。 提前谢谢。 int potPi
我使用 AVR 作为微 Controller ,ATMEGA8 作为处理器(在微 Controller 内部)。带有微 Controller 的电路板有 4 个 LED。我能够刻录程序并点亮 LEDS
谁能解释一下两者之间的关系 LED 像素密度, LED像素高度和宽度 , 和 分辨率在创建模拟器时方法很详细。。并在启动时再次默认值:皮肤尺寸、密度;缩放密度以实现大小? 最佳答案 像素密度:每英寸像
我有一个由大小为 64*64 的 LED 组成的阵列。每个 LED 都可以点亮各种颜色,并且可以非常快速地改变颜色。我的最终目标是:对于网络摄像头接收到的每一帧,我希望能够从帧中“提取”LED 数组,
我正在使用 Arduino Uno 软件进行编码,但遇到了问题。我试图以随机顺序打开 8 个 LED,然后立即将它们全部关闭。我的问题是 LED 会多次点亮相同的 LED,但最终不会全部点亮。这使得电
当我使用Ethernet.begin(mac,ip)时,LED灯不会打开和关闭。但是当我不使用那条线时它就可以工作。但我需要使用以太网和 UPP 模块来打开和关闭。我怎样才能? 板卡型号:以太网08T
我试图顺时针和逆时针方向点亮我的 LED 灯。我使用mpu6050作为LED的方向控制。我检查了我的 mpu6050 驱动代码,它们没问题。顺时针方向工作时效果很好,所有 LED 灯均呈红色亮起。像这
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
我是一名优秀的程序员,十分优秀!