Не могу разобраться почему не работает код
- Войдите на сайт для отправки комментариев
Ср, 19/05/2021 - 01:34
Здравствуйте, нужна помощь, не понимаю почему не работает код
Должно быть так что при -14 по цельсию левый мотор крутиться влево с 7500 О/М, а правый стоит.
При +20 левый стоит, а правый крутиться в диапозоне от 0 до 7500 о/м
При +80 оба крутятся вправо с 7500 о/м
Левый должен менять обороты от 7500 до 0 и от 0 до 7500 в зависимости от температуры
const int EN=7;
const int EN2=4;
const int LMotor1=5; // Вход 1 управления двигателем
const int LMotor2=3; // Вход 2 управления двигателем
const int RMotor1=6;
const int RMotor2=9;
double x;
double val;
double maxSpeed = 7500.0;
void setup()
{
pinMode(EN2, OUTPUT);
pinMode(EN, OUTPUT);
pinMode(LMotor1, OUTPUT);
pinMode(LMotor2, OUTPUT);
pinMode(RMotor1, OUTPUT);
pinMode(RMotor2, OUTPUT);
analogWrite(EN,255);
analogWrite(EN2,255);
}
void loop(){
double s=(255.0*maxSpeed)/16000.0;
val = analogRead(A4);
val = constrain(val, 76, 268);
if (val<145)
{
x=map(val,76,145,-s,0);
digitalWrite(LMotor1,HIGH);
digitalWrite(LMotor2,LOW);
analogWrite(EN,-x);
}
if (val==76)
{
digitalWrite(RMotor1,LOW);
digitalWrite(RMotor2,LOW);
}
if (val>76)
{
digitalWrite(RMotor2,HIGH);
digitalWrite(RMotor1,LOW);
x=map(val,76,268,0,s+1);
analogWrite(EN2,x);
}
if (val>145)
{
digitalWrite(LMotor2,HIGH);
digitalWrite(LMotor1,LOW);
x=map(val,145,268,0,s+1);
analogWrite(EN,x);
}}
if (val==145)
digitalWrite(LMotor1,LOW);
digitalWrite(LMotor2,LOW);
}

Здравствуйте, нужна помощь, не понимаю почему не работает код
Должно быть так
отлично, как оно должно быть - вы рассказали, теперь расскажите, как этот код работает на самом деле
А на самом деле он просто отказывается работать при любом значении s кроме 255, если s=255 он работает при полных оборотах.
И не при тех значениях меняет свое направление, то есть не при +20, а например при +40
а плата какая - Уно?
У Уно на 4 и 7 пине нет PWM, соответственно у вас всегда подается или полные обороты, или нуль
Я могу прикрепить ссылку на тинкеркад
https://www.tinkercad.com/things/7sz1icyRoxe-copy-of-dvigateli/editel?sharecode=A_M4NgtjdIELazQZD5uwOOysH5ZcaZEsOYwflPvkSto
Я могу прикрепить ссылку на тинкеркад
с какой целью? Вы лучше на вопрос о типе ардуины ответьте
Да, исправил, спасибо, теперь хотя бы подает признаки жизни, но почему то не выполняет все условия, то есть при обороты не ограничиваются
Да, уно, я не видел, уже исправил с пинами ошибку
ну дальше разбирайтесь со своими пропорциями, для меня так они выглядят очень сомнительными, там запросто может оказаться ошибка или выход за диапазон.
И не понятно, зачем у вас величина S рассчитывается с такими огромными коэффициентами и в double - множители можно сократить на тысячу, а вещественный тип тут не нужен, все равно фунция map() считает в целых
Спасибо, все заработало, я ошибся, основная проблема была с пинами. Все работает, огромное спасибо.