Питание состояние выходов Arduino Pro mini рип
- Войдите на сайт для отправки комментариев
Пнд, 29/02/2016 - 16:35
Есть связка 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;
}
}
Попробовать сопротом подтянуть вывод PWM к GND.
Помогло. Спасибо