Arduino Mega при питании от внешнего БП перезагружается
- Войдите на сайт для отправки комментариев
Вс, 31/01/2016 - 23:11
Ситуация следующая, к Ардуино мега подключениы 5 ультазвуковых дальномера HY-SRF05. При работе от USB все работает так как надо, но при включении от внешнего БП 12V каждые несколько секунд происходит перезагрузка. Может есть специалисты, подскажите в чем косяк.
#include <NewPing.h>
#define MAX_DISTANCE 50 // Maximum distance we want to ping for (in centimeters). Maximum sensor distance is rated at 400-500cm.
#define LAMP_RELE 6
#define SCULL_RELE1 7
#define SCULL_RELE2 8
#define SCULL_RELE3 9
#define INIT_PORT 5 //порт инициализации
#define OPEN_PORT 3 //порт принудительного открытия
#define STATUS_PORT 4 //порт состояния
int right_min[] = {25,0,25,0,0,25}; // 0 1 2 3 4 5
int right_max[] = {28,0,28,0,0,28}; // c,o,c,o,o,c ; o - open; c- close
int old_state[] = {-1,-1,-1,-1,-1,-1}; //запоминаем предыдущее состояние
int open_scull=1;
int distance=0;
unsigned long int time_delay=0;
NewPing sonar[6]={NewPing(22, 23, MAX_DISTANCE),
NewPing(24, 25, MAX_DISTANCE),
NewPing(26, 27, MAX_DISTANCE),
NewPing(28, 29, MAX_DISTANCE),
NewPing(30, 31, MAX_DISTANCE),
NewPing(32, 33, MAX_DISTANCE)};
void lamp_flash() { //функция включения лампы.включает но не чаще одного раза в 0.5 сек после последнего включения
if(millis()-time_delay>500){
digitalWrite(LAMP_RELE,LOW);
time_delay=millis();
}
}
void setup() {
pinMode(LAMP_RELE,OUTPUT); digitalWrite(LAMP_RELE,HIGH);
pinMode(SCULL_RELE1,OUTPUT); digitalWrite(SCULL_RELE1,HIGH);
pinMode(SCULL_RELE2,OUTPUT); digitalWrite(SCULL_RELE2,HIGH);
pinMode(SCULL_RELE3,OUTPUT); digitalWrite(SCULL_RELE3,HIGH);
pinMode(STATUS_PORT,OUTPUT); digitalWrite(STATUS_PORT,LOW);
pinMode(INIT_PORT,INPUT_PULLUP); digitalWrite(INIT_PORT,HIGH);
pinMode(OPEN_PORT,INPUT_PULLUP); digitalWrite(OPEN_PORT,HIGH);
pinMode(13,OUTPUT);
digitalWrite(13,HIGH); delay(500);digitalWrite(13,LOW);
}
void loop() {
/*
if(digitalRead(OPEN_PORT)==LOW){
digitalWrite(SCULL_RELE1,LOW);
digitalWrite(SCULL_RELE2,LOW);
digitalWrite(SCULL_RELE3,LOW);
digitalWrite(STATUS_PORT,HIGH);
}
*/
if(digitalRead(STATUS_PORT)==LOW){
delay(50); // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
open_scull=1;
for(int n=0;n<6;n++){
// unsigned int uS1 = sonar[n].ping(); // Send ping, get ping time in microseconds (uS).
// distance = sonar[n].convert_cm(uS1);
distance = sonar[n].ping_cm();
if(abs(old_state[n]-distance)>20){ //проверяем что предыдушее состояние поменялось больше чем на 10 - если да то включаем лампы
lamp_flash();
old_state[n] = distance;
}
if(distance > right_max[n] || distance < right_min[n]) {
open_scull=0;
}
}
if(open_scull==1) {
digitalWrite(SCULL_RELE1,LOW); delay(300);
digitalWrite(SCULL_RELE2,LOW);delay(300);
digitalWrite(SCULL_RELE3,LOW);
digitalWrite(STATUS_PORT,HIGH);
}
}
if(millis()-time_delay>100){ // через 0.5 секунды после включения лампы гасим ее
digitalWrite(LAMP_RELE,HIGH);
}
/*
if(digitalRead(INIT_PORT)==LOW) {
setup();
}
*/
}
БП на 12В стабилизированный? Ток? У тебя в скетче реле есть. От ЮСБ вместо них у тебя светодиоды включены? Схему включения покажи.