ШИМ пины. Не могу подать ШИМ сигнал.
- Войдите на сайт для отправки комментариев
Вопрос такой! Почему в случае скетча "мотор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);
}
Я вот не вижу в Вашем скетче ни одного вызова 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.