Arduino Mega 2560 вырубается без причины.

Desinger
Offline
Зарегистрирован: 07.06.2021

Доброго времени суток!
У меня необычная проблема... я на ардуинке сделал ЧПУ с i2c экраном. Но после нескольких повторов программы у меня просто или на экран выводиться кряказябра, ардуинка перезагружаеться, или просто перестаёт работать. Когда отключить экран и загрузить простенькую програмку всё ок. Или мозги не могут код выполнить... или я не знаю... Всё спаяно красиво и работает. К ардуинке подключены Реле.
Очень нужна ваша помощь!
Заранее спасибо.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

реле на отдельном питании? или все вместе с МК питается?
посадить на отдельный БП + опторазвязки с реле.

rkit
Offline
Зарегистрирован: 23.11.2016

ЧПУ с экраном, а подключено только реле. Фантастика.

b707
Offline
Зарегистрирован: 26.05.2017

Desinger - надо схему и код. иначе досвиданья. решайте проблему сами

Desinger
Offline
Зарегистрирован: 07.06.2021

Реле на отдельном БП и на октопаре. Код сейчас дам.

Desinger
Offline
Зарегистрирован: 07.06.2021
//including libs
#include <Wire.h> 
//defining pins
#define PISTON1 51
#define PISTON2 52
#define ZASHYM 53
#define SENSOR_DOWN 50
#define SENSOR_UP 43
#define SENSOR_FORWARD 49
#define SENSOR_BACKWARD 48
#define PUSK_STOP 46
#define STOP_ALL 47
#define VIBRATY 45
#define PERELIK 44

//setting booleans
boolean zUp = false;
boolean puskWasUp = true;
boolean vibratyWasUp = true;
boolean perelikWasUp = true;
boolean sensorLoop = true;
String choosen;
String scrolled = "defaultCMD";
int scrll;

void setup() {
  //init lcd
  //selscting pinMode for all pins
  pinMode(PISTON1, OUTPUT);
  pinMode(PISTON2, OUTPUT);
  pinMode(ZASHYM, OUTPUT);
  pinMode(PUSK_STOP, INPUT_PULLUP);
  pinMode(STOP_ALL, INPUT_PULLUP);
  pinMode(VIBRATY, INPUT_PULLUP);
  pinMode(PERELIK, INPUT_PULLUP);
  pinMode(SENSOR_DOWN, INPUT_PULLUP);
  pinMode(SENSOR_UP, INPUT_PULLUP);
  pinMode(SENSOR_FORWARD, INPUT_PULLUP);
  pinMode(SENSOR_BACKWARD, INPUT_PULLUP);
}

int defaultCMD(int piston, int sensor1, int sensor2){
  digitalWrite(piston, true);
  digitalWrite(ZASHYM, true);
  delay(500);
  //Cheking for DownSensor
  do {
    boolean sensor = digitalRead(sensor1);
    if(sensor){
      delay(10);
      sensor = digitalRead(sensor1);
      if(sensor){
          digitalWrite(piston,false);
          break;
      }
    }
    boolean puskIsUp = digitalRead(PUSK_STOP);
    if(puskWasUp && !puskIsUp){
      delay(10);
      puskIsUp = digitalRead(PUSK_STOP);
      if(!puskIsUp){
        digitalWrite(piston,false);
        digitalWrite(ZASHYM, false);
        break;
      }
    }
    puskWasUp = puskIsUp;
  } while(sensorLoop);
  //Cheking for UpSensor
  do {
    boolean sensorUp = digitalRead(sensor2);
    if(sensorUp){
      delay(10);
      sensorUp = digitalRead(sensor2);
      if(sensorUp){
          digitalWrite(ZASHYM, false);
          break;
      }
    }
    boolean puskIsUp = digitalRead(PUSK_STOP);
    if(puskWasUp && !puskIsUp){
      delay(10);
      puskIsUp = digitalRead(PUSK_STOP);
      if(!puskIsUp){
        digitalWrite(ZASHYM, false);
        break;
      }
    }
    puskWasUp = puskIsUp;
  } while(sensorLoop);
}

int thirdCMD( int piston){
  digitalWrite(piston,true);
  delay(500);
  do {
    boolean puskIsUp = digitalRead(PUSK_STOP);
      if(puskWasUp && !puskIsUp){
        delay(10);
        puskIsUp = digitalRead(PUSK_STOP);
        if(!puskIsUp){
          digitalWrite(piston,false);
          break;
        }
      }
      puskWasUp = puskIsUp;
  } while(sensorLoop);
}

int fifthCMD(int piston, int sensor2){
  digitalWrite(piston, true);
  digitalWrite(ZASHYM, true);
  delay(500);
  //Cheking for DownSensor
  do {
    boolean sensor = digitalRead(sensor2);
    if(sensor){
      delay(10);
      sensor = digitalRead(sensor2);
      if(sensor){
          digitalWrite(PISTON1,false);
          break;
      }
    }
    boolean puskIsUp = digitalRead(PUSK_STOP);
    if(puskWasUp && !puskIsUp){
      delay(10);
      puskIsUp = digitalRead(PUSK_STOP);
      if(!puskIsUp){
        digitalWrite(piston,false);
        break;
      }
    }
    puskWasUp = puskIsUp;
  } while(sensorLoop);
}

void loop() {
  boolean perelikIsUp = digitalRead(PERELIK);
  boolean vibratyIsUp = digitalRead(VIBRATY);
  boolean puskIsUp = digitalRead(PUSK_STOP);
  if(perelikWasUp && !perelikIsUp){
    delay(10);
    perelikIsUp = digitalRead(PERELIK);
    if(!perelikIsUp){
      if(scrolled == "secondCMD"){
        scrolled = "thirdCMD";
      } else if(scrolled == "thirdCMD"){
        scrolled = "fourthCMD";
      } else if(scrolled == "fourthCMD"){
        scrolled = "fifthCMD";
      } else if(scrolled == "fifthCMD"){
        scrolled = "sixthCMD";
      } else if(scrolled == "sixthCMD"){
        scrolled = "defaultCMD";
      } else if(scrolled == "defaultCMD"){
        scrolled = "secondCMD";
      }
    }
  }
  if(vibratyWasUp && !vibratyIsUp){
    delay(10);
    vibratyIsUp = digitalRead(VIBRATY);
    if(!vibratyIsUp){
      if(scrolled == "thirdCMD"){
        choosen = "secondCMD";
      } else if(scrolled == "fourthCMD"){
        choosen = "thirdCMD";
      } else if(scrolled == "fifthCMD"){
        choosen = "fourthCMD";
      } else if(scrolled == "sixthCMD"){
        choosen = "fifthCMD";
      } else if(scrolled == "defaultCMD"){
        choosen = "sixthCMD";
      } else if(scrolled == "secondCMD"){
        choosen = "defaultCMD";
      }
    }
  }
  if(puskWasUp && !puskIsUp){
    delay(10);
    puskIsUp = digitalRead(PUSK_STOP);
    if(!puskIsUp){
      if(choosen == "secondCMD"){
        defaultCMD(52,49,48);
      } else if(choosen == "thirdCMD"){
        thirdCMD(51);
      } else if(choosen == "fourthCMD"){
        thirdCMD(52);
      } else if(choosen == "fifthCMD"){
        fifthCMD(51,50);
      } else if(choosen == "sixthCMD"){
        fifthCMD(52,49);
      } else if(choosen == "defaultCMD"){
        defaultCMD(51,50,43);
      }
    }
  }
  perelikWasUp = perelikIsUp;
  vibratyWasUp = vibratyIsUp;
  puskWasUp = puskIsUp;
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Где тут Экран?

Desinger
Offline
Зарегистрирован: 07.06.2021

Я его отключил в коде. Потому что думал что это изза него.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Desinger пишет:
Код сейчас дам.

А схему? Вам же сказали

b707 пишет:

надо схему и код. иначе досвиданья. решайте проблему сами

FoxJone
Offline
Зарегистрирован: 19.04.2019

Пробежал бегло, но мне почему то кажется, что это не ЧПУ...

Я правильно понял, вот это вот управляет станком с числовым программным управлением?

И таки да. Надо схему.