там разгорелся нешуточный спор, в коде нет процедуры begin() в которой должен настраиваться и инициализироваться пин…так как может быть рассинхронизм настройка пина позже инициализации, но в данном контексте всё должно отрабатывать по фэншую…но это не точно )))
А что за глубокая мысль прячется за таким необычным способом инициализации в строках 12-15?
красиво жеж? на код надо смотреть как на произведение искусства )
Говорящая игрушка:
- Глупый кот!
- Зато красивый.)
ты жеж разбираешься в хороших винах вроде, не ну если не являешь поклонником Ренуара можно и в лоб написать, но не эстетично, буквально сухарь математик )))
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(); }}}
}}}
Это перебор, всего должно быть в меру, а то попрут меня из дзен-буддистов ссаными тряпками )
#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? При перезагрузке погаснет и снова. Пока там бутлоадер прочешется, мне кажется, уже заметно на глаз будет. Нет? Если так можно, то получится и чтобы заметно было и, возможно, ещё на байтик короче.
Да, после ресет пины будут какое-то время настроены INPUT, диод светить не будет(здесь экономим), но, после старта всё равно нужна будет пауза
P.S.
А если паузу всё равно делать - её можно и на вкл. использовать, и на выкл.
То есть , по сути, никакой экономии нет.
это после какого ресет?
Я про AVR говорю. Там вроде один ресет. Если нет - поправь
Чёт не понял. Там же на ардуине бутлоадер чуть не секунду думает о чём-то. Чем это не пауза?

