#c #arduino #arduino-c
#c #arduino #arduino-c
Вопрос:
Привет, у меня проблема :
датчик состояния = шаги датчика «ЕСЛИ » кто-нибудь » делает шаги сейчас = импульс » = весь код выполняется «отлично, хорошо, я доволен», но если датчик LOW a не обнаружил никакого движения при загрузке кода = сломался, остановите все, даже если он находится в конце или на полпути, он остановится, когданет трафика «» (stage_sensor == HIGH) «», я понятия не имею, как это исправить//
Пожалуйста, помогите или предложите
РЕДАКТИРОВАТЬ: могут быть синтаксические ошибки (не согласованы), но я просто хотел представить проблему, система работает только в режиме «если», и это проблема, я не знаю, как исправить
#include <AccelStepper.h> //accelstepper library
// #define light
// #define move_sensor
// #define pump_water
// #define fan_blowing
// #define fan_extractor
// #define blue
// #define red
// #define green
const byte limitSwitch_1 = 26;
const byte limitSwitch_2 = 25;
bool switchFlipped = false;
bool previousFlip = true;
int switchCounter;
int newSpeed;
int state_sensor = 0; // <--- stage sensor //
int light = 2;
int blue = 3;
int red = 4;
int green = 5;
int fan_blowing = 6;
int water_pump = 8;
int move_sensor = 9;
int fan_extractor = 10;
AccelStepper stepper(1, 22, 23);
void setup()
{
pinMode(water_pump, OUTPUT);
pinMode(light, OUTPUT);
pinMode(fan_blowing, OUTPUT);
pinMode(fan_extractor, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(move_sensor, INPUT);
pinMode(limitSwitch_1, INPUT_PULLUP); //pin 1 engine (IF touch)
pinMode(limitSwitch_2, INPUT_PULLUP); //pin 2 engine (IF touch)
Serial.begin(9600);
stepper.setMaxSpeed(1000);
stepper.setAcceleration(100);
stepper.setSpeed(1000);
delay(500);
}
void loop()
{
digitalWrite(light, HIGH);
digitalWrite(blue, HIGH);
state_sensor = digitalRead(sensor_move);
if (state_sensor == HIGH) // <--- stage sensor IF anyone move = all code run but if sensor LOW did not detect movement all code broke stop all //
{
digitalWrite(blue, LOW);
digitalWrite(red, HIGH);
stepper.runSpeed();
engine();
}
}
void engine()
{
if(digitalRead(limitSwitch_1) == LOW)
{
switchCounter ;
delay(1000);
newSpeed = -1 * (1000 (switchCounter * 200));
stepper.setSpeed(newSpeed);
}
if(digitalRead(limitSwitch_2) == LOW)
{
switchCounter ;
delay(1000);
newSpeed = -1 * (1000 (switchCounter * 200));
stepper.stop();
fans();
}
}
void fans()
{
digitalWrite(red, HIGH);
{
digitalWrite(fan_blowing, HIGH);
digitalWrite(fan_extractor, HIGH);
delay(1000);
digitalWrite(water_pump, HIGH);
}
delay(1000);
digitalWrite(red, LOW);
digitalWrite(water_pump, LOW);
digitalWrite(green, HIGH);
delay(1000);
digitalWrite(fan_blowing, LOW);
digitalWrite(fan_extractor, LOW);
digitalWrite(green, LOW);
digitalWrite(blue, HIGH); //this blue RGB light "ON" but if sensor_steps "ON" = active cycle , blue light led off
delay(1000);
}
Комментарии:
1. Если вы нажмете переключатель 1, двигатель перейдет на скорость 2, а если вы нажмете переключатель 2, двигатель перейдет на скорость 1? Я правильно вас понимаю?
2. Если да, то при каком условии вы хотите, чтобы двигатель остановился?
Ответ №1:
Что вы могли бы сделать, это настроить глобальную переменную «stage»:
#include <AccelStepper.h> //accelstepper library
const byte limitSwitch_1 = 26;
const byte limitSwitch_2 = 25;
bool switchFlipped = false;
bool previousFlip = true;
int switchCounter;
int newSpeed;
int stage;
AccelStepper stepper(1, 22, 23);
void setup()
{
pinMode(limitSwitch_1, INPUT_PULLUP);
pinMode(limitSwitch_2, INPUT_PULLUP);
Serial.begin(9600);
stepper.setMaxSpeed(1000);
stepper.setAcceleration(100);
stepper.setSpeed(1000);
delay(500);
stage = 0;
}
void loop()
{
stepper.runSpeed();
runner();
}
void runner()
{
if(stage == 0 amp;amp; digitalRead(limitSwitch_1) == LOW)
{
switchCounter ;
delay(5000);
newSpeed = -1 * (1000 (switchCounter * 200));
stepper.setSpeed(newSpeed);
stage;
}
if(stage == 1 amp;amp; digitalRead(limitSwitch_2) == LOW)
{
stepper.setSpeed(1000);
delay(1000);
stepper.setSpeed(0);
stage;
}
if (stage == 2) {
// do next thing, then stage;, etc.
}
}
Комментарии:
1. @MrH4ze Все, что вы хотите сделать дальше. Если вы хотите впоследствии запустить вентилятор, именно здесь вы должны выполнить цикл для его запуска.