Помогите, как улучшить / исправить скетч

сам код
задача в следующем ;
1 - нужно избавиться от задержек кода (delay -но сама задержка выполнения кода нужна _плавное затухание питания)
2- добавить условия для отключение операции(добавить ограничение по данным с датчика-потенциометра–своеобразное ограничение диапазона действия)

const int potencX=A0;
const int potencY=A1;
const int potencZ=A2;
const int deadzone=120;
const int vilet=A4;
const int naklon=A5;

int dlinna;
int opus;


int Zos;
int Yos;
int Xos;

int Setup;
int ShagX=0;
int ShagY=0;
int ShagZ=0;
unsigned long time;
unsigned long time2;


void setup(){
  pinMode(12,INPUT_PULLUP); //кнопка работы джойстиков
  pinMode(A3,OUTPUT);       //сигнал для клапана отбора гидравлики
  pinMode(2,OUTPUT);        //питание для верхних джойстиков

Serial.begin(9600);
}


void loop() {
  dlinna=analogRead(vilet);
  dlinna=map(dlinna,540,699,100,0);
  
  opus=analogRead(naklon);

int butt0=!digitalRead(12);

     if(!digitalRead(12)==HIGH){                                   // При включенной кнопке на джойстике сверху
                                                                   //отсюда начинается плавное управление джойстиками сверху
    digitalWrite(2,HIGH);
     Xos=analogRead(potencX);
 
                if (Xos>502+deadzone){
                         Xos=map(Xos,502+deadzone,1010,0,60);
                         Xos=constrain(Xos,0,60);
                         Setup=Xos*1.5;
                         for(ShagX=0;ShagX<=Setup;ShagX++);{if (millis()-time>10){
                                  time=millis();
                                  analogWrite(3,ShagX);
                                  digitalWrite(A3,HIGH);           //включение отбора гидравлики на стрелу
                                  }}
 
                }else if(Xos<502-deadzone){
                         Xos=map(Xos,502-deadzone,0,0,-24);
                         Setup=Xos*3;
                         for(ShagX=0;ShagX>=Setup;ShagX--);{if (millis()-time>10){
                                  time=millis();
                                  analogWrite(5,-ShagX);
                                  digitalWrite(A3,HIGH);          //включение отбора гидравлики на стрелу
                                  }}
                 }else {analogWrite(3,0);
                       analogWrite(5,0);}
    Yos=analogRead(potencY);
         if (Yos>505+deadzone){
                         Yos=map(Yos,502+deadzone,1010,0,40);
                         Yos=constrain(Yos,0,60);
                         Setup=Yos*1.5;
                         for(ShagY=0;ShagY<=Setup;ShagY++);{if (millis()-time>10){
                                  time=millis();
                                  analogWrite(6,ShagY);
                                  digitalWrite(A3,HIGH);          //включение отбора гидравлики на стрелу
                                  }}
 
                }else if(Yos<505-deadzone){
                         Xos=map(Yos,502-deadzone,0,0,-40);
                         Setup=Xos*1.5;
                         for(ShagY=0;ShagY>=Setup;ShagY--);{if (millis()-time>10){
                                  time=millis();
                                  analogWrite(9,-ShagY);
                                  digitalWrite(A3,HIGH);          //включение отбора гидравлики на стрелу
                                  }}
                } else {analogWrite(6,0);
                       analogWrite(9,0);}
                       


    Zos=analogRead(potencZ);
                if (Zos>505+deadzone){
                         Zos=map(Zos,505+deadzone,1010,0,50);
                         Zos=constrain(Zos,0,50);
                         Setup=Zos*1.5;
                         for(ShagZ=0;ShagZ<=Setup;ShagZ++);{if (millis()-time>20){
                                  time=millis();
                                  analogWrite(10,ShagZ);
                                  digitalWrite(A3,HIGH);          //включение отбора гидравлики на стрелу
                                  }}
 
                }else if(Zos<505-deadzone){
                         Zos=map(Zos,502-deadzone,0,0,-50);
                         Setup=Zos*1.5;
                         for(ShagZ=0;ShagZ>=Setup;ShagZ--);{if (millis()-time>20){
                                  time=millis();
                                  analogWrite(11,-ShagZ);
                                  digitalWrite(A3,HIGH);
                                  }}
                 }else {analogWrite(10,0);
                       analogWrite(11,0);}
               
     }  else  {                                                    //отсуда начинается плавное затухание на управление от джойстиков
                digitalWrite(2,LOW);
                 for(ShagX<=91;ShagX>0;ShagX--) { 
                   analogWrite(3,ShagX-1);
                   delay(40);}  
                 for(-ShagX>=-67;ShagX<0;ShagX++){
                   analogWrite(5,-ShagX);
                   delay(80); } 


                 for(ShagY<=53;ShagY>0;ShagY--)
                 { analogWrite(6,ShagY);
                   delay(100);}  
                 for(-ShagY>=-53;ShagY<0;ShagY++){
                   analogWrite(9,-ShagY);
                   delay(100); } 
                   
                 for(ShagZ<=76;ShagZ>0;ShagZ--)
                 { analogWrite(10,ShagZ);
                   delay(80);}  
                 for(-ShagZ>=-76;ShagZ<0;ShagZ++){
                   analogWrite(11,-ShagZ-1);
                   delay(80); }     
                       
                 if(ShagX==0){digitalWrite(A3,LOW);}     //Отключение отбора гидравлики по оси(вверх/вниз)
                 if(ShagY==0){digitalWrite(A3,LOW);}     //Отключение отбора гидравлики по оси(влево/вправо)
                 if(ShagZ==0){digitalWrite(A3,LOW);}     //Отключение отбора гидравлики по оси(раздвинуть/сдвинуть)
            } 
   
                       

                           
Serial.print(Xos);
Serial.print("   /X");
Serial.print(ShagX);
Serial.print("...../");
Serial.print(Yos);
Serial.print("...../Y");
Serial.print(ShagY);
Serial.print("...../");
Serial.print(Zos);
Serial.print("...../Z");
Serial.print(ShagZ);
Serial.print("____/butt");
Serial.print(butt0);
Serial.print("____/dlinna");
Serial.print(dlinna);
Serial.print("____/opus");
Serial.println(opus);

  
}

И?

В приведённом тексте не содержится ни вопроса, ни просьбы. Или это написано просто для нашей информации? Спасибо, принято к сведению.

И, да, кстати, нафига плодить одну и ту же тему? Чем прошлая не устроила?

не получилось исправить вставленный код, просьба в шапке темы , предложения по улучшению\исправлению по перечисленным пунктам 1 и 2…

В шапке про какую-то схему, а в тексте ни о какой схеме не говорится и никакая схема не приведена.

Впрочем, дело хозяйское.

1 лайк

схема - имелось ввиду скетч,с правильной терминологией пока сложно .
данный скетч пишется для управления Автовышкой на базе грузовой машины
за основу взято плавное управление за счет ШИМ
установка имеет 6 клапанов - 6 функций
2 джойстика (потенциометра) для управления ШИМ-ом- за счет задания математического умножения данных с потенциометра, конвертируемых под переменную (повышаемую или понижаемую)для вывода шим сигнала
и плавного “затухания” питания на клапане при отключении функции(управления на клапане)

мой вопрос и был как избавиться от делэй что бы не тормозить код … ибо мне пока не понятно как его изменить чтобы сохранить “затухание” функции при отключении
и хочется добавить условия чтобы ограничить ту или иную функцию операясь на показания датчиков(потенциметров) угла наклона и вылета стрелы.

Даже если закрыть глаза на неправильно вставленную точку с запятой, эта конструкция всё равно не будет работать. Т.е. нельзя просто вместо делей вставить миллис, надо существенно переделывать код.

Посмотрите здесь, может поможет
https://forum.arduino.ru/t/primer-blink-migaem-svetodiodom/9361

https://forum.arduino.ru/t/zaderzhka-v-funkczii/8783

Б-ть, люди, что с вами не так? Ты неделю поразбирался с Ардуиной и полез в гидравлику автовышки? Мосье - идиот, или самоуверенный идиот?

5 лайков

вот что с вами не так …вот этого не понять . раз считаете себя грамотным - так подскажите что дельное а не распаляйтесь на всякого рода ругательства и оскорбления. На сколько мне известно форум и создан для обсуждения …а не для оскорблений
Да будет вам известно с гидравликой я работаю 5 лет ; что и как открывается и работает знаю по опыту ,еще я электрик с почти 10-летним стажем …
пусть программирование для меня пока сложно

спасибо ,ознакомлюсь
да к слову - скетч работает я его лишь дописываю(и без точки с запятой скетч "залипает " в круге for- и действие не имеет плавного набора как планировалось)

ты для начала 6-ю светлодиодиками без delay помигай, с разными интервалами

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

Стоит попробовать использовать химическое умножение, а лучше - энтомологическое.

IMHO с такими просьбами нужно в платный раздел.

Публикация скетча не избавляет от необходимости публикации принципиальной электрической схемы.
И - да, словесное описание схемы не заменяет саму схему.

По вопросу:

Сравните между собой варианты:

  • blink,
  • blink without delay.

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

Объясните, что Вы под этим понимаете.

И это тоже поясните. Что значит “ограничить функцию”?

Откуда Вам это известно? Можно конкретную ссылочку?

Напишите своими словами, что это значит.

ТС поставьте себя на место ардуино и опишите как бы вы лично управляли вышкой - хотя бы в течение одной секунды ?!

Честное слово, понимал бы что все кому не лень будут пытаться поднять меня насмех …не стал бы писать.

Эта запись равноценна использованию delay(), так как программа “стоит на месте” (ничего не делает) и просто крутит цикл.

Подсказываю:
Не стоит лезть в управление автовышкой

  1. всего неделю поизучав Ардуино
  2. используя для управления дешевый китайский ширпотреб.

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

2 лайка

Во-оот! То есть ещё не всё потеряно? Ростки понимания проклёвываются? Это же здорово!

Короче я понял ,оставляю чат с"умными" людьми пойду “тупить” и делать дела. Тема закрыта