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

там разгорелся нешуточный спор, в коде нет процедуры begin() в которой должен настраиваться и инициализироваться пин…так как может быть рассинхронизм настройка пина позже инициализации, но в данном контексте всё должно отрабатывать по фэншую…но это не точно )))

1 лайк

А что за глубокая мысль прячется за таким необычным способом инициализации в строках 12-15?

красиво жеж? на код надо смотреть как на произведение искусства )

Говорящая игрушка:

  • Глупый кот!
  • Зато красивый.)

1 лайк

ты жеж разбираешься в хороших винах вроде, не ну если не являешь поклонником Ренуара можно и в лоб написать, но не эстетично, буквально сухарь математик )))

const byte feuer1Pin = 2; //{2};
const byte feuer2Pin = 3; //{3};
const unsigned long KURZ = 1250; //{1250};
const unsigned long LANG = 4000; //{4000};

я не учу, у нас свободная страна кто бы что ни говорил, мне нравятся фигурные скобки )))
PS можно сказать что только из-за них я еще увлекаюсь ардуино

Впредь только вот так:

const byte feuer1Pin {2};
const byte feuer2Pin {3};
const unsigned long KURZ {1250};
const unsigned long LANG {4000};

class feuerClass {
 private:  
  byte pin;
  byte step;
  byte blinkType;
  unsigned long lastChange = { 0 };
  unsigned long delta = { KURZ };
 public:
   feuerClass(byte aPin,byte blinkT){{{
     {{{ pin = aPin; }}}
     {{{ pinMode(pin,OUTPUT); }}}
     {{{ blinkType = blinkT; }}}
     {{{ step = 0; }}}
   }}}
   void blink() {{{
      {{{ if (millis()-lastChange > delta) {{{
        {{{ lastChange = millis(); }}}
        {{{ digitalWrite(pin, !(step % 2)); }}}
        {{{ delta = (step == 3) ? LANG : KURZ; }}}
        {{{ if (blinkType == 4) {{{
          {{{ Serial.print(step); }}}
          {{{ Serial.print('\t'); }}}
          {{{ Serial.print(delta); }}}
          {{{ Serial.println(step % 2 ? "\tAus" : "\tAn"); }}}
        }}}}}}
        {{{ step++; }}}
        {{{ step %= blinkType; }}}
      }}}}}}
   }}}

};

feuerClass feuer1(feuer1Pin,2);
feuerClass feuer2(feuer2Pin,4);

void setup() {{{
   {{{ Serial.begin(115200); }}}
}}}

void loop() {{{
  {{{ feuer1.blink(); }}}
  {{{ feuer2.blink(); }}}
}}}
1 лайк

Это перебор, всего должно быть в меру, а то попрут меня из дзен-буддистов ссаными тряпками )

#include <avr/io.h>
int main() { DDRB |= (1 << 5);
while(1) { PINB = (1 << 5);
for(volatile long i = 0; i < 200000; i++); }
}
//Скетч использует 200 байт (0%) памяти устройства. Всего доступно 32256 байт.
//Глобальные переменные используют 0 байт (0%) динамической памяти, оставляя 2048 байт для локальных переменных. Максимум: 2048 байт.
int main() {
asm("sbi 0x04, 5"); // DDRB |= (1<<5)
while(1) {
asm("sbi 0x03, 5"); // PINB = (1<<5) - toggle
for(volatile int i = 0; i < 30000; i++); }
}
//Скетч использует 172 байт (0%) памяти устройства. Всего доступно 32256 байт.
//Глобальные переменные используют 0 байт (0%) динамической памяти, оставляя 2048 байт для локальных переменных.
//Максимум: 2048 байт.
#include <avr/io.h>
#include <util/delay.h>
int main() {
DDRB |= (1 << 5);
while(1) {
PINB = (1 << 5);
_delay_ms(500);
}
}
//Скетч использует 158 байт (0%) памяти устройства. Всего доступно 32256 байт.
//Глобальные переменные используют 0 байт (0%) динамической памяти, оставляя 2048 байт для локальных переменных. 
//Максимум: 2048 байт.


//без загрузчика 14 байт
.include "m328Pdef.inc"
.org 0
    sbi DDRB,5
loop:
    sbi PINB,5
    ldi r18,100
d1: ldi r17,200
d2: dec r17
    brne d2
    dec r18
    brne d1
    rjmp loop

//без загрузчика 10 байт
.org 0
    sbi DDRB,5
loop:
    sbi PINB,5
    ldi r17,255
d1: dec r17
    brne d1
    rjmp loop

//все, больше не сокращается))) но последние два размера в байтах не точные

Конечно не точные. Вот здесь, например, 12 байт получается
К тому же blink - мигание, значит заметно глазу…

наверное, я просто поделился еще блинками, читал тему давно, и не перечитывал, так что возможно даже кто то публиковал уже некоторые…

Я о том, что, на моё имхо , частота блинка должна быть заметна глазу.
А то, можно и так сделать))

//без загрузчика 6 байт
.org 0
    sbi DDRB,5
loop:
    sbi PINB,5
    rjmp loop

Здесь 6 байтов!

а еще меньше ужать ?)))

Это сами уже, я не знаю как))

А включить и устроить reset? При перезагрузке погаснет и снова. Пока там бутлоадер прочешется, мне кажется, уже заметно на глаз будет. Нет? Если так можно, то получится и чтобы заметно было и, возможно, ещё на байтик короче.

3 лайка

Да, после ресет пины будут какое-то время настроены INPUT, диод светить не будет(здесь экономим), но, после старта всё равно нужна будет пауза
P.S.
А если паузу всё равно делать - её можно и на вкл. использовать, и на выкл.
То есть , по сути, никакой экономии нет.

это после какого ресет?

Я про AVR говорю. Там вроде один ресет. Если нет - поправь

Чёт не понял. Там же на ардуине бутлоадер чуть не секунду думает о чём-то. Чем это не пауза?