Ви не увійшли.
А чому не використати просто шим на будь яких портах з заповненням 50 це ж те саме буде? ось бібліотека і генеруй хоч на 5 портів
Є альтернативи tone() на таймерах. Вони зазвичай для одного піна, але не має бути проблем зробити для двох, не думає, що будуть проблеми з продуктивістю.
https://github.com/wlindley/Arduino/tree/master/libraries/NewTone
https://github.com/daniel-centore/arduino-tone-library
Ну і плюс мабуть не викликати той новий tone на кожному кроці loop а тільки коли frequency змінюється.
Якщо підтвердите, що хоч одна з тих бібліотек для вас працює для одного піна - можу за донат на ЗСУ змінити ваш код і код у бібліотеці що працює.
а також щоби ця частота була на виходах 26 та 36, як відомо, tone() може працювати одночасно тільки на одному порті, тому треба зробти якесь швидке перекидання чи якийсь інший фокус, щоби вона була на цих двух портах.
припаяйте перемичку
Здається у вас реальна проблема тільки з tone. Його можна замінити на таймери наче (і наче tone всередині працює на таймерах).
https://bitbucket.org/teckel12/arduino-new-tone/src/master/ ось код, наприклад. Наче не складно його змінити, щоб не на одному а на двох пінах працювало. Тупо замінити усі *pin* змінні на дві штуки і робити усе двічі, навряд чи продуктивності не вистачить. Ну але я не тестив чи той код взагалі працює) І вам треба буде мабуть викликати той NewTone(pin1, pin2, frequency) не на кожному кроці loop, а тільки коли частота змінилась.
Думаю можу це зробити за донат на ЗСУ, якщо ви підтвердите, що той код працює для вас як є для одного піна.
Доброго дня. Є стандартний екран з енкодером RepRapDiscountFullGraphicSmartController, плата RAMPS та Mega 2560.
Також є такий скетч, який робить наступне - генерується частота за допомогою tone() та виводиться на екран, частота регулються потенціометром. Переробити треба так, щоби частота змінювалась не потенциометром, а енкодером в діапазоні від 1000 до 10000герц з кроком 500гц, а також щоби ця частота була на виходах 26 та 36, як відомо, tone() може працювати одночасно тільки на одному порті, тому треба зробти якесь швидке перекидання чи якийсь інший фокус, щоби вона була на цих двух портах.
#include <U8glib.h>
#define DOGLCD_CS 16
#define DOGLCD_MOSI 17
#define DOGLCD_SCK 23
#define BTN_EN1 31
#define BTN_EN2 33
#define pson 5
const int potPin = A1;
const int StepA = 26;
const int StepB = 36;
int potValue = 0;
int frequency = 1000;
U8GLIB_ST7920_128X64_1X u8g(DOGLCD_SCK, DOGLCD_MOSI, DOGLCD_CS);
void setup(void) {
u8g.begin();
pinMode(StepA, OUTPUT);
pinMode(StepB, OUTPUT);
pinMode(pson, OUTPUT);
u8g.setColorIndex(1);
}
void loop() {
u8g.firstPage();
do {
u8g.setFont(u8g_font_unifont);
u8g.setPrintPos(30, 30);
u8g.print(frequency);
u8g.print(" Hz");
} while (u8g.nextPage());
potValue = analogRead(potPin);
frequency = map(potValue, 0, 1023, 1000, 10000);
tone(StepA, frequency);
tone(StepB, frequency);
digitalWrite(pson, HIGH);
}