Arduino с неработающим IF
- Войдите на сайт для отправки комментариев
Втр, 25/05/2021 - 10:40
Всех приветствую. Есть скетч программы по управлению Реверсом и Переключением передач для лодочного мотора:
//гав
#include <Servo.h>
Servo servo_kpp;
Servo servo_throtle;
/*=================Номера пинов подключения серво и др. оборудования==================*/
#define SERVO_KPP 2
#define SERVO_TRO 3
#define MODE_SW 4 //Пин подключения тумблера для переключения режимов работы
#define PIN_ENG_STAT 10 //Пин подключения сигнального выхода с двигателя
/*================================================================*/
/*=================Диапазон значений потенциометра КПП============*/
#define MAX_R_POT 0
#define MIN_R_POT 460
#define MIN_N_POT 480
#define MAX_N_POT 520
#define MIN_F_POT 540
#define MAX_F_POT 1024
/*================================================================*/
/*=================Диапазон значений потенциометра Дросселя============*/
#define DROS_POT_MIN_R 40
#define DROS_POT_MAX_R 440
#define DROS_POT_MIN_F 560
#define DROS_POT_MAX_F 960
/*=====================================================================*/
/*=================Диапазон значений ШИМ КПП============*/
#define MAX_R_PWM 500
#define MIN_R_PWM 1400
#define MIN_N_PWM 1450
#define MAX_N_PWM 1550
#define MIN_F_PWM 1600
#define MAX_F_PWM 2500
/*================================================================*/
/*=================Диапазон значений ШИМ Дросселя============*/
#define DROS_PWM_MIN_R 1000
#define DROS_PWM_MAX_R 1400
#define DROS_PWM_MIN_F 1600
#define DROS_PWM_MAX_F 2000
/*=====================================================================*/
/*=================Значения положений серво КПП в микросекундах==================*/
#define R_DEG 600
#define N_DEG 1500
#define F_DEG 2400
/*===============================================================================*/
/*=================Значения положений MIN-MAX дросселя в микросекундах==================*/
#define DROS_MIN 600
#define DROS_MAX 2400
/*======================================================================================*/
#define DELAY_DROS 1000 //Delay перед поворотом дросселя после включения передач (В милисекундах)
/*=================Диапазон значений КПП (Задаётся в цикле в зависимости от выбранного переключателя)============*/
int MIN_R;
int MAX_R;
int MIN_N;
int MAX_N;
int MIN_F;
int MAX_F;
/*================================================================*/
/*=================Системные (НЕ ТРОГАТЬ)=============================*/
boolean delay_stat = 1;
int valpot2 = 0;
/*
int valpot; // переменная для хранения значения потенциометра
int valpwm; // переменная для хранения значения ШИМ
*/
int val; //Значение зависимое от выбора переключателя (Между ШИМ или потенциметром)
int POT=A0; // Аналоговый вход A0 для подключения потенциометра
int PWM=5; // Аналоговый вход A0 для подключения источника ШИМ
bool stat_sw; // Переменная состояния переключателя (Между ШИМ и Потенциометром)
byte stat = 0; // Переменная состояния дросселей (Всего два типа: 0 - серво не работает, 1 - серво работает в реверсе 2 - серво работает в форварде
int angleservo_forward = 0; // переменная для хранения угла поворота сервы с потенциометра
int angleservo_rewerse = 0; // переменная для хранения угла поворота сервы с потенциометра
int angleservo_forward_pwm = 0; // переменная для хранения угла поворота сервы с шим
int angleservo_rewerse_pwm = 0; // переменная для хранения угла поворота сервы с шим
/*=====================================================================*/
void setup() {
servo_kpp.attach(SERVO_KPP);
servo_throtle.attach(SERVO_TRO);
Serial.begin(115200);
servo_kpp.write(0);
servo_throtle.write(0);
pinMode(MODE_SW, INPUT);
}
void loop() {
if (MODE_SW == 1) {
stat_sw = 1; //Если высоко, то потенциометр
}
else if (MODE_SW == 0) {
stat_sw = 0; //Если низкое то ШИМ
}
Serial.println(digitalRead(MODE_SW));
Serial.println(stat_sw);
if (stat_sw == 1) {
val = analogRead(POT); // чтение данных потенциометра
Serial.print("Val = ");
Serial.println(val);
MIN_R = MIN_R_POT;
MAX_R = MAX_F_POT;
MIN_N = MIN_N_POT;
MAX_N = MAX_N_POT;
MIN_F = MIN_F_POT;
MAX_F = MAX_F_POT;
}
else {
val = pulseIn(PWM, HIGH); // чтение данных ШИМа
Serial.print("VAL ");
Serial.println(val);
MIN_R = MIN_R_PWM;
MAX_R = MAX_F_PWM;
MIN_N = MIN_N_PWM;
MAX_N = MAX_N_PWM;
MIN_F = MIN_F_PWM;
MAX_F = MAX_F_PWM;
}
angleservo_forward=map(val,MIN_F,MAX_F,DROS_MIN,DROS_MAX); //Значение сервопривода ДРОССЕЛЯ при фоварде
angleservo_rewerse=map(val,MAX_R,MIN_R,DROS_MAX,DROS_MIN); //Значение сервопривода ДРОССЕЛА при реверсе
//===========================Инструкция для Фоварда===========================//
if (val >= MIN_F) {
servo_throtle.writeMicroseconds(F_DEG);
Serial.println("Forward");
if (delay_stat == 1) {
delay(DELAY_DROS);
delay_stat = 0;
}
stat = 1;
}
//===========================Инструкция для Нейтрали===========================//
else if (val >= MIN_N) {
if (val <= MAX_N) {
servo_throtle.writeMicroseconds(N_DEG);
Serial.println("Neutral");
delay_stat = 1;
stat = 0;
}
}
//===========================Инструкция для Реверса===========================//
else if (val <= MIN_R) {
servo_throtle.writeMicroseconds(R_DEG);
Serial.println("Reverse");
if (delay_stat == 1) {
delay(DELAY_DROS);
delay_stat = 0;
}
stat = 2;
}
if (stat == 1) {
servo_kpp.writeMicroseconds(angleservo_forward);
}
else if (stat == 2) {
servo_kpp.writeMicroseconds(angleservo_rewerse);
}
else if (stat != 1) {
servo_kpp.writeMicroseconds(DROS_MIN);
}
}
В начале блока loop должен работать цикл:
if (MODE_SW == 1) {
stat_sw = 1; //Если высоко, то потенциометр
}
else if (MODE_SW == 0) {
stat_sw = 0; //Если низкое то ШИМ
}
По какой-то причине, он не работает (Было проверено благодаря выводу значения). Точнее не присваивается значение переменной stat_sw которое должно. Всем коллективом обломали голову, надеемся на вашу помощь..
//...тут куча глупой фигни.... if (MODE_SW == 1) { stat_sw = 1; //Если высоко, то потенциометр } else if (MODE_SW == 0) { stat_sw = 0; //Если низкое то ШИМ }По какой-то причине, он не работает
Интересно, а как в твоих влажных фантазиях должно это работать????
--------------------
Чтобы подгнившие извилины не мучал: ты забыл digitalRead() написать ;))))))))))))))))
If сломался... срочно в ремонт :)
Слышал что нибудь про pinMode, digitalRead , digitalWrite ? Веб странички наверное красивые рисуешь :))))
Пока писал про веб странички, Граф меня опередил :(
Реально, мозг подгнил.. Забыл про digitalRead :). Усталость и выгорание даёт о себе знать. Спасибо)
Пока писал про веб странички, Граф меня опередил :(
Мазл тов! ;)))))
Мазл тов! ;)))))
Мин сезне котлыйм :)))
Мазл тов! ;)))))
Мин сезне котлыйм :)))
ә нәрсә белән?