Skocz do zawartości

Niedziałająca komunikacja Bluetooth przy podłączonym zewnętrznym zasilaniu.


Lolheadshootpl

Pomocna odpowiedź

Witam. Jest w trakcie projektu w którym używam modułu HC-05 oraz dwóch modułów mosfet. Cały projekt jest oparty na arduino nano.

1. Podłączam arduino do komputera poprzez kabel usb wszystko działa, komunikacja jest prawidłowa mosfety się załączają>
2.Podłączam arduino do zasilacza labolatoryjnego (do pinów Vin i gnd oczywiście) i już nie ma komunikacji, można się połączyć z modułem ale nie da się sterować mosfetami)
3. Podłączam jednocześnie usb i zasilacz labolatoryjny i dzieje się to samo co w pkt.2.
Wszystkie masy są połączone w jeden punkt,zasilam moduł HC-05 z pinu 5V arduino, wszystkie napięcia są poprawne, na wejściu zasilania dałem kondensatory 470uF i 1uF i nic nie pomogły. Męcze się z tym cały dzień i już nie mam pojęcia o co chodzi. Z góry dziękuje.


PS.Dodałem z ciekawości do kodu zwykłe miganie diodą na arduino i to działa zarowna na zasilaniu usb jak i zewnętrznym.

#include <Adafruit_NeoPixel.h>
#include <SoftwareSerial.h>

#define LED_PIN_1 6    // Pin dla pierwszej taśmy LED (24 diody)
#define LED_PIN_2 8    // Pin dla drugiej taśmy LED (8 diod)
#define NUM_LEDS_1 24  // Liczba diod w pierwszej taśmie LED
#define NUM_LEDS_2 8   // Liczba diod w drugiej taśmie LED

Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(NUM_LEDS_1, LED_PIN_1, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(NUM_LEDS_2, LED_PIN_2, NEO_GRB + NEO_KHZ800);

SoftwareSerial bt(2, 3); /* (Rx, Tx) */

bool ledState = false;      // Stan diod LED
bool pump1State = false;    // Stan pompy 1
bool pump2State = false;    // Stan pompy 2

bool pump1Toggle = false;   // Stan przełącznika pompy 1
bool pump2Toggle = false;   // Stan przełącznika pompy 2

unsigned long lastBlinkTime = 0;  // Czas ostatniego mignięcia diodą
bool ledBlinkState = false;       // Stan migania diodą

void setup() {
  strip1.begin();
  strip1.show();
  
  strip2.begin();
  strip2.show();
  
  bt.begin(9600);
  
  pinMode(4, OUTPUT);  // Set pin 4 as an output (pompa 1)
  pinMode(7, OUTPUT);  // Set pin 7 as an output (pompa 2)
  pinMode(LED_BUILTIN, OUTPUT);  // Ustawienie pinu wbudowanej diody LED jako wyjście
}

void loop() {
  handleLEDs();
  handlePumps();
  handleBluetoothCommands();
  
  // Blink LED
  unsigned long currentMillis = millis();
  if (currentMillis - lastBlinkTime >= 1000) {  // Migaj co sekundę
    lastBlinkTime = currentMillis;
    ledBlinkState = !ledBlinkState;  // Odwrócenie stanu migania
    digitalWrite(LED_BUILTIN, ledBlinkState);  // Włączanie lub wyłączanie migania diodą
  }
}

void handleLEDs() {
  static unsigned long lastRainbowTime = 0;
  unsigned long currentMillis = millis();

  if (currentMillis - lastRainbowTime >= 50) {
    lastRainbowTime = currentMillis;
    
    if (ledState) {
      rainbowEffect();
    } else {
      clearLEDs();
    }
  }
}

void handlePumps() {
  if (pump1State || pump1Toggle) {
    digitalWrite(4, HIGH);
  } else {
    digitalWrite(4, LOW);
  }
  
  if (pump2State || pump2Toggle) {
    digitalWrite(7, HIGH);
  } else {
    digitalWrite(7, LOW);
  }
}

void handleBluetoothCommands() {
  if (bt.available()) {
    String command = bt.readStringUntil('\n');
    command.trim();
    
    if (command == "F") {
      pump1Toggle = !pump1Toggle;
    } else if (command == "B") {
      pump2Toggle = !pump2Toggle;
    } else if (command == "led on") {
      ledState = true;
    } else if (command == "led off") {
      ledState = false;
      clearLEDs();
    }
  }
}

void rainbowEffect() {
  static int rainbowIndex = 0;

  for (int i = 0; i < NUM_LEDS_1; i++) {
    uint32_t color = Wheel((i + rainbowIndex) % 256);
    strip1.setPixelColor(i, color);
  }
  
  for (int i = 0; i < NUM_LEDS_2; i++) {
    uint32_t color = Wheel((i + rainbowIndex) % 256);
    strip2.setPixelColor(i, color);
  }
  
  strip1.show();
  strip2.show();
  
  rainbowIndex = (rainbowIndex + 1) % 256;
}

void clearLEDs() {
  for (int i = 0; i < NUM_LEDS_1; i++) {
    strip1.setPixelColor(i, strip1.Color(0, 0, 0));
  }
  
  for (int i = 0; i < NUM_LEDS_2; i++) {
    strip2.setPixelColor(i, strip2.Color(0, 0, 0));
  }
  
  strip1.show();
  strip2.show();
}

uint32_t Wheel(byte WheelPos) {
  if (WheelPos < 85) {
    return strip1.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if (WheelPos < 170) {
    WheelPos -= 85;
    return strip1.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
    WheelPos -= 170;
    return strip1.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}

 

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.