Пример Blink. Мигаем светодиодом

Именно так все эти экраны и работают.

→ модераторам - тема про blink если че, может почистить последние несколько сообщений?

надо возродить раздел - избавляемся от спама вместе, или как он там звался.

Вот-вот!
Надо завести отдельный раздел что-то типа “Художественное творчество” и туда помещать подобную тематику.

Вторая ( лучшая из нескольких вариантов, не ассемб.), которая для сравнения - около 110мс или 9 кадров в секунду.
Экран 160*128.
Всё это уже было. (с)

А где код?

https://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/st7735-160-na-128-podsvetka-barakhlit?page=8
В этой теме надо искать, обсуждали все варианты скоростей вывода. Как и первопричины их значений.

Помню я эту тему.
Вот только вменяемого сравнения скорости в ней не помню. Помню только, что мой код на 8 МГц 328 работал быстрее, чем Ваш на 16 МГц 328. Причем, быстрее - в разы.
Поэтому корректно говорить не о преимуществе кода написанного на Ассемблере над кодом, написанным на Си, а о преимуществе грамотного кода над откровенно неграмотным.
Я сам немножко зациклен на скорости вывода на экран, поэтому у меня нет ни одного цветного дисплея с последовательным интерфейсом. Так что у себя запустить Ваш код с целью вылизать его по скорости я не могу. А если бы смог, уверен, что скорость вывода не отличалась бы (либо была выше) от ассемблерного варианта.

Я не говорю о преимуществах, грамотности и т.д., я сказал о самом быстром, мной проверенным. Других вариантов мне не давали.

andriano
В Proteus есть модель. В той теме есть и диаграммы … быстрее выводить нельзя.
fast
Это вывод SCL 8 мГц.

Я не настолько хорошо знаю Ассемблер AVR (точнее сказать - совсем не знаю), чтобы по нему в точности восстановить алгоритм. Поэтому мое “либо была выше” относится исключительно к гипотетическому случаю, что в программе есть неоптимальности. Если нет - так нет.

VID_20230205_092941

//имитатор 20 светодиодов на цветном дисплее st7735 128*160
//
#include "svetodiod_.h"
void setup() {
 fun_setup();
}
void loop() {
led_(0,white); // ВКЛЮЧАЕМ СВЕТОДИОД №0 белым
delay(250);
led_(19,yellow); // ВКЛЮЧАЕМ СВЕТОДИОД №19 жёлтым
delay(250);
leds_off();//выключаем все светодиоды
delay(500); 
led_(4,orange); // ВКЛЮЧАЕМ СВЕТОДИОД №4 оранжевым
delay(250);
led_(4,off); // ВЫКЛЮЧАЕМ СВЕТОДИОД №4 
delay(250);
}
введите или вставьте сюда код

Вот примерно так можно оставить пример кода, убрав остальное практически бездумно в файл с расширением .h

Теперь переписать на millis() и заставить каждый светодиод мигать со своей частотой.

1 лайк

Грохните уже половину сообщений не в тему

//имитатор 20 светодиодов на цветном дисплее st7735 128*160
//групповой блинк
#include "svetodiod_.h"
long Y[20];//моменты переключения
int t[20]={127,220,380,500,550,600,660,180,240,400,490,560,620,700,745,800,333,444,777,999};//длительности
bool flag[20];//флаги состояний
uint16_t color[]={green,yellow,orange,blue,
 green,yellow,orange,blue,green,yellow,orange,blue,
 green,yellow,orange,blue,green,yellow,orange,blue};//цвета

void setup() {
 fun_setup();
 }
void loop() {
 for(int i=0;i<20;i++){
 if(millis()-Y[i]>t[i]){
 Y[i]=millis();flag[i]=!flag[i];
 if(flag[i]){led_(i,color[i]);}else{led_(i,off);}
 }
 }
 }

VID_20230207_112140

1 лайк

Вот как это видит искусственный интеллект chatGPT:
Q: blink without delay arduino

A:
The delay() function used in the previous code will pause the program and prevent it from doing any other tasks during that time. If you want to blink an LED without using the delay() function, you can use the millis() function to keep track of time and turn the LED on and off at specific intervals. Here is an example of how to blink an LED without delay in Arduino:

const int ledPin = 13; // LED connected to digital pin 13
int ledState = LOW; // current state of the LED
unsigned long previousMillis = 0; // time when the LED was last updated
const long interval = 1000; // interval at which to blink (milliseconds)

void setup() {
  pinMode(ledPin, OUTPUT); // set the digital pin as output
}

void loop() {
  unsigned long currentMillis = millis(); // get the current time

  if (currentMillis - previousMillis >= interval) { // check if it's time to blink
    previousMillis = currentMillis; // save the last time you blinked the LED

    if (ledState == LOW) {
      ledState = HIGH; // turn the LED on
    } else {
      ledState = LOW; // turn the LED off
    }

    digitalWrite(ledPin, ledState); // update the LED state
  }
}

1 лайк

Боюсь, он скоммуниздил этот код из интернета

1 лайк

А он ещё русофоб, скоммуниздил не с нашего сайта. :grinning:

Да не, просто комменты перевел на язык вопрошающего

1 лайк