Не могу разобраться почему не работает код

Gidra
Offline
Зарегистрирован: 19.05.2021

Здравствуйте, нужна помощь, не понимаю почему не работает код

Должно быть так что при -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);
    }

 

b707
Offline
Зарегистрирован: 26.05.2017

Gidra пишет:

Здравствуйте, нужна помощь, не понимаю почему не работает код

Должно быть так

отлично, как оно должно быть - вы рассказали, теперь расскажите, как этот код работает на самом деле

Gidra
Offline
Зарегистрирован: 19.05.2021

А на самом деле он просто отказывается работать при любом значении s кроме 255, если s=255 он работает при полных оборотах.

И не при тех значениях меняет свое направление, то есть не при +20, а например при +40

b707
Offline
Зарегистрирован: 26.05.2017

а плата какая - Уно?

У Уно на 4 и 7 пине нет PWM, соответственно у вас всегда подается или полные обороты, или нуль

Gidra
Offline
Зарегистрирован: 19.05.2021
b707
Offline
Зарегистрирован: 26.05.2017

Gidra пишет:

Я могу прикрепить ссылку на тинкеркад

с какой целью? Вы лучше на вопрос о типе ардуины ответьте

Gidra
Offline
Зарегистрирован: 19.05.2021

Да, исправил, спасибо, теперь хотя бы подает признаки жизни, но почему то не выполняет все условия, то есть при обороты не ограничиваются

Gidra
Offline
Зарегистрирован: 19.05.2021

Да, уно, я не видел, уже исправил с пинами ошибку

 

b707
Offline
Зарегистрирован: 26.05.2017

ну дальше разбирайтесь со своими пропорциями, для меня так они выглядят очень сомнительными, там запросто может оказаться ошибка или выход за диапазон.

И не понятно, зачем у вас величина S рассчитывается с такими огромными коэффициентами и в double - множители можно сократить на тысячу, а вещественный тип тут не нужен, все равно фунция map() считает в целых

Gidra
Offline
Зарегистрирован: 19.05.2021

Спасибо, все заработало, я ошибся, основная проблема была с пинами. Все работает, огромное спасибо.