Питание состояние выходов Arduino Pro mini рип

anton_kulibin
Offline
Зарегистрирован: 28.10.2012

Есть связка Arduino Pro Mini и драйвер двигателей http://ru.aliexpress.com/item/3-36V-Dual-15A-H-Bridge-DC-Motor-Driver-Peak-30A-IRF3205-For-Robot-Smart-Car/938370821.html. Питание моторов от 12В проМини от 5В.

Проблема в том что при перезагрузке ардуины моторы вращаются, до инициализации. Потом все встает на место.

Все что знал перепробовал может кто подскажет

 

#include <MySigningNone.h>
#include <MyTransportNRF24.h>
#include <MyTransportRFM69.h>
#include <MyHwATMega328.h>
#include <MySensor.h>
#include <SPI.h>
#include <SimpleTimer.h>
#include <Bounce2.h>

#define SN "Garage_actuator"
#define SV "1.0"
#define NODE_ID 28
#define CHILD_ID 0


MyTransportNRF24 radio(RF24_CE_PIN, RF24_CS_PIN, RF24_PA_LEVEL);  
MyHwATMega328 hw;
MySensor gw(radio, hw);

MyMessage msgPort(1, V_STATUS);


#define CLOSE_PIN 7  //геркон остановки штора закрыла
#define OPEN_PIN  8  //геркон остановки штора-открыта
#define REMOTE_BUTTON1 2 //кнопка управления в гараже
#define DIR1_MOTOR1 6  // врашение мотора в одну сторону
#define PWM_MOTOR1 5 // врашение мотора в другую сторону

bool last_light_state = false;
Bounce debouncer = Bounce(); 
int oldValue=0;
bool state;

SimpleTimer timer;

boolean lastTrip;

void setup()  
{   
   //PinMode for Motor
  pinMode(CLOSE_PIN, INPUT);
  pinMode(OPEN_PIN, INPUT);
  pinMode(DIR1_MOTOR1, OUTPUT);
  digitalWrite(CLOSE_PIN,HIGH);
  pinMode(PWM_MOTOR1, OUTPUT);
  digitalWrite(OPEN_PIN,HIGH);
  pinMode(REMOTE_BUTTON1, INPUT);
  digitalWrite(PWM_MOTOR1, 0);
  digitalWrite(DIR1_MOTOR1, 0);
  
  Serial.begin(115200);
  Serial.println("Hello!");
  
  // Initialize library and add callback for incoming messages
   // The third argument enables repeater mode.
  gw.begin(incomingMessage, NODE_ID, true);
   // Send the Sketch Version Information to the Gateway
  gw.sendSketchInfo(SN, SV);


 

  gw.present(1, S_BINARY); // GaragePort
 // gw.present(CHILD_ID, S_RGB_LIGHT);
  debouncer.attach(REMOTE_BUTTON1);
  debouncer.interval(5);

}


void loop() 
{
   
  timer.run();
  debouncer.update();
  // Get the update value
  int value = debouncer.read();
  get_command(value);
  oldValue = value;
  gw.process();
} 


/*
 * MyMessage levelDisplayBoard(S_LEVEL_DISPLAY_ID, V_DISTANCE);
levelDisplayBoard.setDestination(N_LEVEL_DISPLAY_ID);
int dist = getDistance();
gw.send(levelDisplayBoard.set(dist));
*/


void incomingMessage(const MyMessage &message) {
  // We only expect one type of message from controller. But we better check anyway.
  int  CLICK = message.getBool();
  get_command(CLICK);
}


void get_command(int incomming){
  Serial.print("open:");
  Serial.println(digitalRead(OPEN_PIN));
  Serial.print("close:");
  Serial.println(digitalRead(CLOSE_PIN));

  if ((incomming ==1)&&(digitalRead(OPEN_PIN) == 1)) {
    reverse(1, 1, 255);
  } else
  if ((incomming ==1)&&(digitalRead(CLOSE_PIN) == 1)) {
    reverse(0, 2, 255);
  } 
}

void reverse(int direction, int mode, int PWR) {
 int CLICK=0;
  switch(mode) {
  case 1:
  Serial.println(F("open"));
while ((digitalRead(OPEN_PIN)!=0)){
        analogWrite(PWM_MOTOR1, 255);
        digitalWrite(DIR1_MOTOR1, 0);
          }
        analogWrite(PWM_MOTOR1, 0);
        digitalWrite(DIR1_MOTOR1, 0);
        Serial.println(F("STOP"));
break;

case 2:
   Serial.println(F("close"));
while ((digitalRead(CLOSE_PIN)!=0)){
        analogWrite(PWM_MOTOR1, 255);
        digitalWrite(DIR1_MOTOR1, 1);
           }
        analogWrite(PWM_MOTOR1, 0);
        digitalWrite(DIR1_MOTOR1, 0);
           Serial.println(F("STOP"));

break;

}

}

 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Попробовать сопротом подтянуть вывод PWM к GND.

anton_kulibin
Offline
Зарегистрирован: 28.10.2012

Помогло. Спасибо