Всем привет. Я новичек и делаю свой первый проект на Arduino Uno (AVR_ATmega328), в котором используются: библиотека IR.Remote (использует timer 0), библиотека AF.Motor для MotorShield с 4 выходами на моторы (наверно, использует timer 1) библиотека tone.cpp (использует timer 2). Суть проблемы: при использовании функции tone не работают 2 выхода(1,2) на шилде с моторами. Выходы (3,4) в свою очередь исправно работают, (я предполагаю, что они используют timer 1) Если же функцию tone не использовать, то timer 2 освобождается и все выходы на моторчики работают исправно. Вопрос заключается в следующем - как побороть проблему, не отказываясь от функции tone?
Нужно использовать первый таймер на всю катушку, и выставлять на нём PWM сразу для 4 ног софтварно. У меня есть примерчик для двух ног, ещё две сделаете по аналогии Код (Text): #include "TimerOne.h" byte pwmFreq = 0; // счетчик для PWM byte motorSpeed1 = 0; //Значение шим 1 byte motorSpeed2 = 0; // шим 2 void setup() { Timer1.initialize(4); // это можно бы и увеличить Timer1.attachInterrupt( timerIsr ); pinMode(9, OUTPUT); pinMode(10, OUTPUT); } void loop() { for (int i=0; i<255; ++i) // выставляем значения для ШИМа { motorSpeed1=i; motorSpeed2=255-i; delay(100); } } void timerIsr() //Прерывание таймера. Здесь мы делаем PWM на 1-м таймере { if (motorSpeed1 < pwmFreq) digitalWrite(9, LOW); else digitalWrite(9, HIGH); if (motorSpeed2 < pwmFreq) digitalWrite(10, LOW); else digitalWrite(10, HIGH); ++pwmFreq; }