мы жеж дилетанты, слово воткнуть у нас имеет другие ассоциации
Для полноты картины ассемблера не хватает. @dedivan , непорядок!
Не могу удержаться и процитирую классиков : " Тут было все : арбузные груди, нос – обухом, расписные щеки и мощный затылок." (с)
да хрен с ним с ассемблером этим, посмотрите до чего эти изуверцы докатились
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
мне уже того…
Если есть sei()
то где кли() ?
А если нет кли, зачем сеи?
да, в концепции ардуиновских setup, loop оно не надо, видимо где то “за кадром” в sreg разрешается бит I глобальных прерываний.
но яжьь тебя запутал
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);
}
Тут ошибка или я не догоняю чего?
А что смущает?
В структуре For третье выражение. Переменная обнуляется.
Аааа! Кажись понял))) так и должно быть. Для этого и static. Цикл не выполняется, но переменная увеличивается каждый проход loop, так?
Затейник)
Я это понимаю как:
Цикл выполняется каждый проход луп, инициирована _t нулем, а статик даёт ей «преимущество» не инициализироваться каждый проход.
Но могу ошибаться, я лишь любитель…
Каждую 1 мс оба цикла не выполняются, одновременно с этим переменные растут. Через 500мс цикл сработает и снова обнулит переменную, заодно выполнив один проход, дёргая пин.
эттт точно
// блинк 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(); будет происходить регулярно без задержек. Как вариант , можно извлечь предыдущую лямду и засунуть туда уже выполнение двух. Старой и дополнительной.
Мужики, хватит засирать тему, написанную, чтобы быть простым примером для новичков.
Предлагаю кардинально почистить её и впредь не гадить в такие темы.