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 которое должно. Всем коллективом обломали голову, надеемся на вашу помощь..
По какой-то причине, он не работает
Интересно, а как в твоих влажных фантазиях должно это работать????
--------------------
Чтобы подгнившие извилины не мучал: ты забыл digitalRead() написать ;))))))))))))))))
If сломался... срочно в ремонт :)
Слышал что нибудь про pinMode, digitalRead , digitalWrite ? Веб странички наверное красивые рисуешь :))))
Пока писал про веб странички, Граф меня опередил :(
Реально, мозг подгнил.. Забыл про digitalRead :). Усталость и выгорание даёт о себе знать. Спасибо)
Пока писал про веб странички, Граф меня опередил :(
Мазл тов! ;)))))
Мазл тов! ;)))))
Мин сезне котлыйм :)))
Мазл тов! ;)))))
Мин сезне котлыйм :)))
ә нәрсә белән?