Вывести синусоиду на дисплей

Kelean1
Offline
Зарегистрирован: 22.10.2018

Помогите вывести на дисплей синусоиду или пилу. Дисплей 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);

}

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Kelean1, вы не с того конца взялись за задачу. Сначала Вам нужно научиться программно рассчитывать синусоиду по заданным  осям x и y. Формулу самостоятельно написать трудновато, но её можно найти на нашем форуме.  Результат работы функция должна записать в буффер-массив длиной x. Затем написать функцию вывода буффера на дисплей.

Logik
Offline
Зарегистрирован: 05.08.2014

А зачем! Хотим лететь на Марс - строим ракету направленую носом на Марс! Зачем еще сопроматы с астрономией учить. Вы бы еще Си поучить ТС посоветовали;) Если он со школьным образованием не может график синуса по координатам построить, то какие могут быть буферы? Да тут код в тему вставить по правилам непосильно.

Kelean1
Offline
Зарегистрирован: 22.10.2018

Мне нужно встроить дисплей в существующий макет, и создать видимость изменения сигнала. Сам макет представляет собой усилитель на биполярном транзисторе и наглядно показывает как меняется ток в схеме. И так как это макет для наглядности, процесов протекающих в настоящем усилителе нет, но есть их визуализация. И дисплей нужен как доп визульный эффект отображающий сигнал на входе и выходе. Поэтому синус или пила здесь не более чем рисунок. Вывести я ее вывел но вот задать движение не получается.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Kelean1, ваше уточнение конечно вносит ясность в цель задумки, но алгоритм воплощения всё тот-же:  расчёт формы -буфер- вывод.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

dimax пишет:

Сначала Вам нужно научиться программно рассчитывать синусоиду по заданным  осям x и y. Формулу самостоятельно написать трудновато, но её можно найти на нашем форуме.

?!?

Мне кажется, человеку не способному самостоятельно написать подобную формулу на данном форуме (да и на любом программистском тоже) делать нечего.

Цитата:

  Результат работы функция должна записать в буффер-массив длиной x. Затем написать функцию вывода буффера на дисплей.

?!?

Зачем лишний буфер?

Рисовать прямо в процессе счета (или считать в процессе отрисовки).

У Ардуины не так много памяти, чтобы разбрасываться ею на ненужные буфера.

Logik
Offline
Зарегистрирован: 05.08.2014

[quote=andriano]

Мне кажется, человеку не способному самостоятельно написать подобную формулу на данном форуме (да и на любом программистском тоже) делать нечего.

[quote]

 

Вам не кажется. Так и есть. 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

andriano, Logik,  как вы суровы рябята! Я думаю 99% форума не напишут эту формулу :)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

dimax, у Вас что-то не сходятся цифры.

Лоджик, Евгений, Пингвин и я эту формулу напишут. Мне, честно говоря, даже неудобно такое предполагать, но если даже Вы не сможете (а о чем я еще должен думать, когда Вы говорите о 99%?), все равно на форуме не наберется 400 человек постоянных членов. Ну а тех, кто регистрируется только для того, чтобы написать пару сообщений, получить отлуп и больше никогда здесь не показываться, считать вряд ли следует.