Проблемы с программным обеспечением. Только при подключении к розетке

Мой код:

#include <SoftwareSerial.h>
SoftwareSerial bluetooth(2,3);
// Output
int redPin = 6;   // Red LED, 
int grnPin = 11;  // Green LED,
int bluPin = 5;  // Blue LED, 

// Color arrays
int black[3]  = { 0, 0, 0 };
int white[3]  = { 100, 100, 100 };
int red[3]    = { 100, 0, 0 };
int green[3]  = { 0, 100, 0 };
int blue[3]   = { 0, 0, 100 };
int yellow[3] = { 40, 95, 0 };
int dimWhite[3] = { 30, 30, 30 };
// etc.

// Set initial color
int redVal = black[0];
int grnVal = black[1]; 
int bluVal = black[2];

int wait = 10;      // 10ms internal crossFade delay; increase for slower fades
int hold = 0;       // Optional hold when a color is complete, before the next crossFade
int r = 0;
int g = 0;
int b = 0;
char mode = '\0';
// Initialize color variables
int prevR = redVal;
int prevG = grnVal;
int prevB = bluVal;

// Set up the LED outputs
void setup()
{
  pinMode(redPin, OUTPUT);   // sets the pins as output
  pinMode(grnPin, OUTPUT);   
  pinMode(bluPin, OUTPUT); 

 Serial.begin(9600);
 delay(1000);
 bluetooth.begin(115200);
 delay(100);
 bluetooth.print("$$$");
 delay(100);
 bluetooth.println("U,9600,N");
 bluetooth.begin(9600);
 delay(100);
 analogWrite(redPin, 0); 
 analogWrite(grnPin, 0);      
 analogWrite(bluPin, 0); 
 Serial.println("Bluetooth initiated.");
}

void printHEX() {
  Serial.print(r, HEX);
  Serial.print(g, HEX);
  Serial.println(b, HEX);
  bluetooth.print(r, HEX);
  bluetooth.print(g, HEX);
  bluetooth.println(b, HEX);
}

// Main program: list the order of crossfades
void loop()
{
  //Read from bluetooth and write to usb serial
  while(bluetooth.available())
  {
    if(mode == '\0') {
      mode = (char)bluetooth.read();
    }
    if(mode == 'c'){
      int r1 = bluetooth.parseInt();
      int g1 = bluetooth.parseInt();
      int b1 = bluetooth.parseInt();
      if (bluetooth.read() == '\n') {
        if(r1 != r || g1 != g || b1 != b) {
          r = r1;
          g = g1;
          b = b1;
          analogWrite(redPin, r);
          analogWrite(grnPin, g);      
          analogWrite(bluPin, b); 
          printHEX();
          mode = '\0';
        } else {
          printHEX();
          mode = '\0';
        }
      }
  } else if(mode == 'p') {
    if (bluetooth.read() == '\n') {
      printHEX();
      mode = '\0';
    }
  }
}

  //Read from usb serial to bluetooth
  if(Serial.available())
  {
    char toSend = (char)Serial.read();
    bluetooth.print(toSend);
  }
}

Если я запускаю этот код, все работает отлично. То есть, пока я не подключу его к источнику питания и больше ничего.

Если я подключаю его к источнику питания, программа не запускается (нет ответа Bluetooth). Если я подключаю его к usb и питанию или только к usb, программа работает. Если я отключу USB после подключения USB и источника питания, программа все еще работает! Я пытался отлаживать столько, сколько мог, но я не знаю, где ошибка. Блок питания рассчитан на 12 В 2 Ампера для освещения светодиодных лент.

Обновление: я обнаружил, что если я нажму кнопку сброса после включения питания, все начнет работать. Есть ли способ автоматически перезагрузить arduino при запуске???


person Andres S    schedule 18.08.2014    source источник


Ответы (1)


Я думаю, что вы используете arduino leonardo.

Попробуйте это в самом начале установки:

while(!Serial){}
while(!bluetooth){}

Arduino leonardo через некоторое время подготовит последовательный порт и может вызвать некоторые проблемы.

person Mohammad Reza Hashemi    schedule 22.09.2014
comment
К сожалению, я не использую Leonardo (использую duemilanove). Но Serial не моя проблема. Ардуино, похоже, делает это внутри. Я бы ХОТЕЛ, если бы это было не так, потому что серийный номер недоступен. Так и застревает в ожидании. Прошло много времени, а я до сих пор не нашел ответа. - person Andres S; 23.09.2014