多个霍尔传感器相互干扰(或其他代码问题)


#include <Wire.h>
#include "MH_TCS34725.h"
#include <FastLED.h>
MH_TCS34725 tcs = MH_TCS34725(TCS34725_INTEGRATIONTIME_154MS, TCS34725_GAIN_1X);
#define NUM_LEDS 10                                                             //灯珠数量
#define DATA_PIN 10                                                              //引脚定义
#define LED_TYPE WS2812                                                          //灯带型号
#define COLOR_ORDER GRB                                                          //输入芯片手册排列数序
uint8_t max_bright = 30;                                                          //亮度
CRGB leds[NUM_LEDS];  
uint16_t r, g, b, c;

int shake = 5;
int shakeSensor = 6;
int endSensor = 7;
int yanmoSensor = 8;
int key = 9;
int keystate = 0;
int beforestate = 0;

void setup() {  
  Serial.begin(9600);
  delay(10);
  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
  FastLED.setBrightness(max_bright);
  pinMode(shake,INPUT); 
  pinMode(shakeSensor,INPUT);
  pinMode(endSensor,INPUT);
  pinMode(yanmoSensor, INPUT); 
  pinMode(key,INPUT);

    if (tcs.begin())
    {
        Serial.println("Found sensor"); //是否连接
    }
    else
    {
        Serial.println("No TCS34725 found ... check your connections"); //未找到
        while (1);
    }
}

void loop()
 {  
//研磨图片
  int yanmoStatus = digitalRead(yanmoSensor); 
  int shakeValue = digitalRead(shake);
  if (yanmoStatus == 1) 
  {
   while (shakeValue == HIGH){
   Serial.write("1");
   delay(500);
  }
  }
//吸取颜色
  keystate = digitalRead(key);
  if(keystate==LOW)
  {
   tcs.getRGBC(&r, &g, &b, &c); //获取颜色
    r = r > 500 ? 500 : r;    
    g = g > 500 ? 500 : g;
    b = b > 500 ? 500 : b;
    r = map(r, 100, 500, 0, 255); //等比例缩小
    g = map(g, 100, 500, 0, 255);
    b = map(b, 100, 500, 0, 255);
    CRGB myRGB(r, g, b); //显示RGB颜色
    delay(10);
    fill_solid(leds, NUM_LEDS, myRGB); //全部点亮
    FastLED.show();   
    Serial.print(" r=");
    Serial.print(r);
    Serial.print(" g=");
    Serial.print(g);
    Serial.print(" b=");
    Serial.print(b);
    Serial.println(""); 
  }
//摇晃
  int shakeStatus = digitalRead(shakeSensor); 
  if (shakeStatus == 1) 
  {
   while(shakeValue == HIGH){
   Serial.write("3");
   delay(500);
  }
  }
//撒粉填充
  if (shakeStatus == 0 && yanmoStatus == 0) 
  {
   while (shakeValue == HIGH){
   Serial.write("4");
   delay(500);
  }
  }
//放回TX
  int endStatus = digitalRead(endSensor); 
   if (endStatus == 1 && shakeStatus == 1) 
  {
   Serial.write("5");
   delay(500);
  }
}

全部代码如上图所示,只用一个霍尔,根据两种不同状态向串口发送数据是正常的。但是连接三个霍尔之后串口就比较紊乱,请问有什么解决办法或者代码是否有问题。

连接多个霍尔传感器时,可能会发生干扰导致串口数据紊乱。为了解决这个问题,你可以尝试以下几个方法:

  1. 使用电容隔离器隔离每个霍尔传感器的信号线,以减少干扰。

  2. 将每个霍尔传感器的信号线分别连接到Arduino的不同引脚上,以避免信号线之间的干扰。

  3. 在代码中增加一些延迟,以确保每个霍尔传感器的信号都被正确地读取。可以使用delay()函数或者其他的延迟方式。

你也可以尝试更换不同的串口通信方式或者使用其他传感器来代替霍尔传感器,以减少干扰。