ШИМ пины. Не могу подать ШИМ сигнал.

Mihan Теоретик
Offline
Зарегистрирован: 29.12.2020

Вопрос такой! Почему в случае скетча "мотор2" я не могу подать шим сигнал на выводы. (указаны в скетче) А в случае скетча "тест ШИМ" могу?

Насколько я понял т.к. в первом случае команда analoglWrite находится под условием. А во втором нет, но я не уверен. Ардуино и все выводы полностью исправны это проверенно отдельно. Проблема в скетче я думаю. При этом с командой digitalWrite такой проблемы нет.
Как исправить? Т.е. как сделать так, чтобы я мог подать ШИм сигнал в первом скетче "мотор2"?         

       !!! Вот скетч "мотор2"  !!!

#include <Servo.h> // бодключаем биюлиотеку сервопривода

Servo Servo1;; // Обозначаем номер сервопривода и их кол-во

void setup() 
{
  Servo1.attach(11); // оповещаем ардуйни, что подключен сервопривод к 5 цифровому пину
  Servo1.write(90); // cтавим в изначальное нулевое положение

  pinMode(2, OUTPUT); // обозначаем вывод управляющего вывода для двигателя к 2 и 3(ШИМ), для драйвера L9110 
  pinMode(3, OUTPUT); // т.е. в данном слцчае на один двигатель по 2 управляющих вывода
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);

  Serial.begin(9600); // подключаем командную строку на скорости 9600
}

void loop() 
{
   if (Serial.available() > 0) // это херота заставляет ардуйню проверять не появилось ли чего в буфере памяти
   {
     int a = Serial.read(); // когда в памяти что-то появилось, то мы создаем переменную "a" и присваиваем ей то что отправили по командной строке
     {
       if (a == 'W')
       digitalWrite(2,0); // если а = "W", то тогда на выводы подается сигнал от которого зависит скорость мотора(x) "условные 255"
       analogWrite(3,255);
       digitalWrite(4,0);
       analogWrite(5,255);
       digitalWrite(7,0);
       analogWrite(6,255);
       digitalWrite(8,0);
       analogWrite(9,255);
       if (a == 'V')
       digitalWrite(2,0);
       analogWrite(3,200);
       digitalWrite(4,0);
       analogWrite(5,200);
       digitalWrite(7,0);
       analogWrite(6,200);
       digitalWrite(8,0);
       analogWrite(9,200);
       if (a == 'v')
       digitalWrite(2,0);
       analogWrite(3,130);
       digitalWrite(4,0);
       analogWrite(5,130);
       digitalWrite(7,0);
       analogWrite(6,130);
       digitalWrite(8,0);
       analogWrite(9,130);
       if (a == 'w')
       digitalWrite(2,0);
       analogWrite(3,65);
       digitalWrite(4,0);
       analogWrite(5,65);
       digitalWrite(7,0);
       analogWrite(6,65);
       digitalWrite(8,0);
       analogWrite(9,65);
       if (a == 's')
       digitalWrite(2,1);
       analogWrite(3,150);
       digitalWrite(4,1);
       analogWrite(5,150);
       digitalWrite(7,1);
       analogWrite(6,150);
       digitalWrite(8,1);
       analogWrite(9,150);
       if (a == 'S')
       digitalWrite(2,1);
       analogWrite(3,10);
       digitalWrite(4,1);
       analogWrite(5,10);
       digitalWrite(7,1);
       analogWrite(6,10);
       digitalWrite(8,1);
       analogWrite(9,10);
       if (a == 'T')
       digitalWrite(2,0);
       analogWrite(3,0);
       digitalWrite(4,0);
       analogWrite(5,0);
       digitalWrite(7,0);
       analogWrite(6,0);
       digitalWrite(8,0);
       analogWrite(9,0);

        
       if (a == 'Y')
       Servo1.write(90);
       if (a == '0') Servo1.write(40);
       if (a == '1') Servo1.write(60);
       if (a == '2') Servo1.write(80);
       if (a == '3') Servo1.write(90);
       if (a == '4') Servo1.write(100);
       if (a == '5') Servo1.write(120);
       if (a == '6') Servo1.write(140); //Ставим на нужный угол от 40 до 140, т.к. сервопривод блять не может в 360
     }
   }
}
           !!!  Вот "тест ШИМ"  !!!
#include <Servo.h> // бодключаем биюлиотеку сервопривода

Servo Servo1;; // Обозначаем номер сервопривода и их кол-во

void setup() 

{
pinMode(2, выход);
pinMode(3, выход);
pinMode(4, выход);
pinMode(5, выход);
pinMode(7, выход);
pinMode(6, выход);
pinMode(8, выход);
pinMode(9, выход);
pinMode(10, выход);
pinMode(11, выход);
pinMode(12, выход);
pinMode(13, выход);

pinMode(A2, выход);
pinMode(A3, выход);
pinMode(A4, выход);
pinMode(A5, выход);

Serial.begin(9600); // подключаем командную строку на скорости 9600
}

void loop() 

{
analogWrite(2120);
analogWrite(3,120);
analogWrite (4,120);
analogWrite (5120);
analogWrite (6,120);
analogWrite(7,120);
analogWrite(8,120);
analogWrite(9,120);
analogWrite(10,120);
analogWrite(11,120);
analogWrite(12,120);
analogWrite(13,120);

analogWrite(A2, 60);
analogWrite(A3, 60);
analogWrite(A4, 200);
analogWrite(A5, 200);
}

 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Mihan Теоретик пишет:
Насколько я понял т.к. в первом случае команда analoglWrite находится под условием.
Под каким условием и какая команда? Пишите номера строк.

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

Если Вы вот про это (и ему подобное по всему коду):

       if (a == 'V')
       digitalWrite(2,0);
       analogWrite(3,200);
       digitalWrite(4,0);
       analogWrite(5,200);
       digitalWrite(7,0);
       analogWrite(6,200);
       digitalWrite(8,0);
       analogWrite(9,200);

то, "под условием" здесь находится только строка №2. Строки же №№3-9 ни под каким условием не находятся и выполняются всегда, при каждом проходе loop.