Kod wygląda dobrze, nie wiem czemu to działa tylko raz. Ewentualnie możesz spróbować zmienić pin przekaźnika na inny niż 0 i 1, bo z doświadczenia wiem, że na tych pinach takie rzeczy dziwne mogą się dziać, nawet jeśli nie korzysta się z seriala.
A czy to musi być zrobione na zasadzie odcinania zasilania? Czy wystarczy "zwykły" reset? Nie wiem czy masz arduino, czy jakiś inny mikrokontroler, obojętnie, jest pin RESET i podanie na niego stanu niskiego powoduje reset mikrokontrolera. Więc zamiast przekaźnika, mógłbyś podawać z attiny2313 stan niski na pin reset co godzinę przez określony czas. Można zrobić nawet tak, że nie potrzeba drugiego mikrokontrolera, tylko zrobić taki reset na tym samym. Pin reset połączyć z innym pinem w tym samym mikrokontrolerze i na tym pinie co określony czas podawać stan niski. Tylko żeby delaye nie wpływały na program, to zamiast nich skorzystać z millis(). Kolejny jeszcze łatwiejszy sposób, bez drugiego mikrokontrolera i bez łączenia pinu z resetem, można zrobić
reset programowy. Czyli też najlepiej korzystając z millis() co określony czas robić ten reset programowo.
http://www.instructables.com/id/two-way ... /?ALLSTEPS
Jeszcze taka jedna rzecz, bo można się zdziwić. Kiedy ustawisz pin jako wyjście i nie ustawisz na nim żadnego stanu, to najczęściej na takim pinie jest stan niski. Ale nie zawsze, czasami jest stan wysoki. Dlatego dla pewności w setup po ustawieniu w pinMode() danego pinu jako wyjście, powinno się też ustawić na nim odpowiedni stan przez digitalWrite().