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В стабилизированный? Ток? У тебя в скетче реле есть. От ЮСБ вместо них у тебя светодиоды включены? Схему включения покажи.