I2C, SoftwareSerial и PCINT на Attiny85 DigiSpark

А event кто «внешней» объявлять будет?

а надо?
скетч компилируется без предупреждений

Да? Ну главное чтобы еще и работало )))

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

Я правильно понимаю, что в SoftwareSerial.cpp необходимо только добавить alert(); ?
Или где-то ещё есть изменения?

P.S. Что-то “меня терзают смутные сомнения…” :slight_smile:
На предмет того, что этим костылём я заодно сломаю нахрен Serial…
“Костыль” попробую. Если что-то не устроит, буду думать, как вообще отказаться от прерывания.
Мне оно не критично, т.к. для тиньки и блока управления это событие носит “информационный характер”.
Микросекунды в данном случае, не важны… Главное, чтобы реле сработало, когда нужно.
А это выполнено аппаратно.

там же в обработчике прерывания смотри

В самом скетче (.ino) что ли? Это я видел и изменил.

Вообщем, попробовал скомпилить… Скомпилилось, но…

C:\Users\RYZEN\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\libraries\SoftwareSerial\SoftwareSerial.cpp:48:14: warning: ISO C++ forbids declaration of 'alert' with no type [-fpermissive] extern alert(); ^ C:\Users\RYZEN\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\libraries\SoftwareSerial\SoftwareSerial.cpp:379:6: warning: always_inline function might not be inlinable [-Wattributes] void SoftwareSerial::setRxIntMsk(bool enable) ^~~~~~~~~~~~~~ C:\Users\RYZEN\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.3.3\libraries\SoftwareSerial\SoftwareSerial.cpp:124:6: warning: always_inline function might not be inlinable [-Wattributes] void SoftwareSerial::recv() ^~~~~~~~~~~~~~
Заливать пока не стал… Пытаюсь сообразить, как убрать варнинг.

у меня под ядром 1.4.0 предупреждений нет

в файле библиотеки SoftwareSerial.cpp

Где-то я накосячил, походу… Переписал ещё раз заново, всё скомпилилось без варнингов.
Залил, запустил. После старта, сериал не работает до момента “алерт”.
Потом начинает работать, как обычно…
ALERT на INA что-то тоже наизнанку работает - пока ток меньше критического, на пине “1”.
Ну и наоборот. Но это не из-за костыля, с самого начала было так.
Проверяю, где я накосячил с конфигурацией INA…

логику в файле SoftwareSerial правь, в личку отписал, как должно быть

Так?

#if defined(PCINT0_vect)
ISR(PCINT0_vect)
{
   if (PINB&(1<<PINB1)) 
   {
     alert();
     return;
   } else { 
    SoftwareSerial::handle_interrupt();
  }
}
#endif

похоже да

Что ж ты сразу не сказал?!
Просто состояние пина в loop мониторь и всё!!!

1 лайк

Чего тут соображать, вставьте void перед словом alert, тоже мне бином ньютона.

Петрович, а есть какой-то способ, чтобы библиотеку SoftwareSerial засунуть в папку скетча и она не конфликтовала с библиотекой в ядре?

А что " " и <> не работает ?

1 лайк

не, это не работает, в своих проектах для nano я использовал альтернативные библиотеки софтового сериала

Странно, а у меня всегда работает.
Я даже перешел полностью на “”, потому что в 1.8.х их использование означает - «сначала ищем в папке проекта, если не нашли - в ядре».

оно там есть и конфликтует, можно конечно переименовать к примеру MySoftwareSerial в папке скетча, как вариант (не пробовал)

СХРЕНАЛИ оно будет конфликтовать???!!!
Если нашлось в папке - её и используем. Не нашлось - ищем в ядре. Где конфликт то???