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

мы жеж дилетанты, слово воткнуть у нас имеет другие ассоциации

Для полноты картины ассемблера не хватает. @dedivan , непорядок!

Не могу удержаться и процитирую классиков : " Тут было все : арбузные груди, нос – обухом, расписные щеки и мощный затылок." (с)

да хрен с ним с ассемблером этим, посмотрите до чего эти изуверцы докатились :grin:

   import time
    from pyfirmata import Arduino

    # Define the port where Arduino is connected
    port = 'COM37'  # Replace with your port

    # Establish a connection with the Arduino
    board = Arduino(port)

    # Set up the pin modes
    led_pin = board.get_pin('d:9:o')

    # Blink the LED
    while True:
        led_pin.write(1)  # Turn the LED on
        time.sleep(1)  # Delay for 1 second
        led_pin.write(0)  # Turn the LED off
        time.sleep(1)  # Delay for 1 second

1 лайк

мне уже того…

Если есть sei() то где кли() ?
А если нет кли, зачем сеи?

да, в концепции ардуиновских setup, loop оно не надо, видимо где то “за кадром” в sreg разрешается бит I глобальных прерываний.
но яжьь тебя запутал :rofl: :joy:

add
ват глянул в main она зовет init а там прям в начале

void init()
{
	// this needs to be called before setup() or some functions won't
	// work there
	sei();
	
	// on the ATmega168, timer 0 is also used for fast hardware pwm
	// (using phase-correct PWM would mean that timer 0 overflowed half as often
	// resulting in different millis() behavior on the ATmega8 and ATmega168)
#if defined(TCCR0A) && defined(WGM01)
	sbi(TCCR0A, WGM01);
	sbi(TCCR0A, WGM00);
#endif.
...

Всё таки тема сисек лямбда функции не раскрыта, осталось полная уверенность, что для чего-то важного это придумали

Да, засрать мозги мы умеем.



#define blink(x,y)  every(x) toggle(y)
#define every(x) for (static uint16_t _t; ++_t >= x; _t = 0) 
#define toggle(y)  digitalWrite(y , !digitalRead(y))

#define LED 13
#define LED1 14

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(LED1, OUTPUT);
}

void loop() {
  delay(1);
  blink(500, LED);
  blink(600, LED1);
}
1 лайк

Тут ошибка или я не догоняю чего?

А что смущает?

В структуре For третье выражение. Переменная обнуляется.
Аааа! Кажись понял))) так и должно быть. Для этого и static. Цикл не выполняется, но переменная увеличивается каждый проход loop, так?
Затейник)

Я это понимаю как:
Цикл выполняется каждый проход луп, инициирована _t нулем, а статик даёт ей «преимущество» не инициализироваться каждый проход.
Но могу ошибаться, я лишь любитель…

Каждую 1 мс оба цикла не выполняются, одновременно с этим переменные растут. Через 500мс цикл сработает и снова обнулит переменную, заодно выполнив один проход, дёргая пин.

эттт точно :laughing:

// блинк 1 секунда

int main() {
  asm volatile
  (
    "  sbi   0x04, 5\n"
    "1:\n"
    "  sbi   0x03, 5\n"
    "  ldi   r25, hi8(1000)\n"
    "  ldi   r24, lo8(1000)\n"
    "  call  d\n"
    "  jmp   1b\n"

    "d:\n"
    "  ldi   r31, hi8(4000)\n"
    "  ldi   r30, lo8(4000)\n"
    "2:\n"
    "  sbiw    r30, 1\n"
    "  brne    2b\n"
    "  sbiw    r24, 1\n"
    "  brne    d\n"
    "  ret\n"
  );
}

Green), спасибо, больше вики не буду засорять.
andriano, на таймере именно масштабируемый асинхронный блинк вышел. Достаточно экземпляры класса для каждого светодиода сделать. Так мы не зависим от времени выполнения loop.видео.
b707. Спасибо. Если прерывания лишние то вместо функции TICKER_UPDATE { ticker_1.update();} лучше в loop делать проверку сравнением с millis?
void loop { ticker_1.update();}. В таком случае любая задержка все сломает. Как тут быть? Полагаю отказаться от задержек.
ЕвгенийП, что не так с лямбдой? вместо нее вызов любой функции внешней можно написать.
ua6em, согласен что вариант с классами без прерываний больше по памяти ROM/RAM 1064/19 против 860/15. На 3 светодиода класс без прерываний 1290/39 против класики (с массивами по 3 элемента) 954/42. Как понять что разница большая?

Ну то есть мы можем один экземпляр сделать статическим, а другой время от времени создавать на стеке?

Ну например лямду вставить в обработчик прерывания по таймеру. Это значит что ticker_1.update(); будет происходить регулярно без задержек. Как вариант , можно извлечь предыдущую лямду и засунуть туда уже выполнение двух. Старой и дополнительной.

Мужики, хватит засирать тему, написанную, чтобы быть простым примером для новичков.

Предлагаю кардинально почистить её и впредь не гадить в такие темы.

5 лайков