Вывести синусоиду на дисплей
- Войдите на сайт для отправки комментариев
Помогите вывести на дисплей синусоиду или пилу. Дисплей 12864b v2.0 и ардуино UNo. В идеале надо чтобы высота и длина пилы или синуса менялись от значения на потенциометре. Но буду рад если объясните как вывести движущийся синус. Заранее спасибо. Прикладываю скетч. Смог нарисовать пилу. Но как только пытаюсь сдвинуть получаю неразбериху на дисплее.
#include <Arduino.h>
#include <SPI.h>
#include <U8g2lib.h>
int x1=0;
U8G2_ST7920_128X64_1_SW_SPI u8g2(U8G2_R0, /* clock=*/ 13, /* data=*/ 11, /* CS=*/ 12, /* reset=*/ 8);
void setup(void) {
u8g2.begin();
}
void loop(void) {
u8g2.firstPage();
do {
u8g2.drawLine(0+x1, 32, 20+x1, 5);
u8g2.drawLine(20+x1, 5, 40+x1, 32);
u8g2.drawLine(40+x1, 32, 60+x1, 5);
u8g2.drawLine(60+x1, 5, 80+x1, 32);
u8g2.drawLine(80+x1, 32, 100+x1, 5);
u8g2.drawLine(100+x1, 5, 120+x1, 32);
u8g2.drawLine(120+x1, 32, 140+x1, 5);
delay(10);
x1=x1+5;
u8g2.drawLine(0+x1, 32, 20+x1, 5);
u8g2.drawLine(20+x1, 5, 40+x1, 32);
u8g2.drawLine(40+x1, 32, 60+x1, 5);
u8g2.drawLine(60+x1, 5, 80+x1, 32);
u8g2.drawLine(80+x1, 32, 100+x1, 5);
u8g2.drawLine(100+x1, 5, 120+x1, 32);
u8g2.drawLine(120+x1, 32, 140+x1, 5);
delay(200);
u8g2.drawLine(0+x1, 32, 20+x1, 5);
u8g2.drawLine(20+x1, 5, 40+x1, 32);
u8g2.drawLine(40+x1, 32, 60+x1, 5);
u8g2.drawLine(60+x1, 5, 80+x1, 32);
} while ( u8g2.nextPage() );
delay(1000);
}
Kelean1, вы не с того конца взялись за задачу. Сначала Вам нужно научиться программно рассчитывать синусоиду по заданным осям x и y. Формулу самостоятельно написать трудновато, но её можно найти на нашем форуме. Результат работы функция должна записать в буффер-массив длиной x. Затем написать функцию вывода буффера на дисплей.
А зачем! Хотим лететь на Марс - строим ракету направленую носом на Марс! Зачем еще сопроматы с астрономией учить. Вы бы еще Си поучить ТС посоветовали;) Если он со школьным образованием не может график синуса по координатам построить, то какие могут быть буферы? Да тут код в тему вставить по правилам непосильно.
Мне нужно встроить дисплей в существующий макет, и создать видимость изменения сигнала. Сам макет представляет собой усилитель на биполярном транзисторе и наглядно показывает как меняется ток в схеме. И так как это макет для наглядности, процесов протекающих в настоящем усилителе нет, но есть их визуализация. И дисплей нужен как доп визульный эффект отображающий сигнал на входе и выходе. Поэтому синус или пила здесь не более чем рисунок. Вывести я ее вывел но вот задать движение не получается.
Kelean1, ваше уточнение конечно вносит ясность в цель задумки, но алгоритм воплощения всё тот-же: расчёт формы -буфер- вывод.
Сначала Вам нужно научиться программно рассчитывать синусоиду по заданным осям x и y. Формулу самостоятельно написать трудновато, но её можно найти на нашем форуме.
?!?
Мне кажется, человеку не способному самостоятельно написать подобную формулу на данном форуме (да и на любом программистском тоже) делать нечего.
Результат работы функция должна записать в буффер-массив длиной x. Затем написать функцию вывода буффера на дисплей.
?!?
Зачем лишний буфер?
Рисовать прямо в процессе счета (или считать в процессе отрисовки).
У Ардуины не так много памяти, чтобы разбрасываться ею на ненужные буфера.
[quote=andriano]
Мне кажется, человеку не способному самостоятельно написать подобную формулу на данном форуме (да и на любом программистском тоже) делать нечего.
[quote]
Вам не кажется. Так и есть.
andriano, Logik, как вы суровы рябята! Я думаю 99% форума не напишут эту формулу :)
dimax, у Вас что-то не сходятся цифры.
Лоджик, Евгений, Пингвин и я эту формулу напишут. Мне, честно говоря, даже неудобно такое предполагать, но если даже Вы не сможете (а о чем я еще должен думать, когда Вы говорите о 99%?), все равно на форуме не наберется 400 человек постоянных членов. Ну а тех, кто регистрируется только для того, чтобы написать пару сообщений, получить отлуп и больше никогда здесь не показываться, считать вряд ли следует.