azzz, ti credevi una sorta di Babbusauro superstite? 
Ma no, ma vedo anche qua da me che giovani bravi ingegneri digitali c'è nè tanti, ma nessuno che conosce bene l'elettronica 'gnorante. Addirittura ho qualche giovane delle scuole professionali che dà dei punti a certi ingegneri, quanto a capacità di "aggeggiamento elettronico". Ma la colpa, ovviamente, è del sistema scolastico, moltro lontano dalle esigenze di Azienda. I più bravi sono sempre quelli che hanno un percorso da autodidatta, che va oltre quanto appreso a scuola. Il nostro è un mestiere per appassionati. Chi sceglie Elettronica, così tanto per... fa poca o nessuna strada.
Tonando al circuito:

questo prosegue con un Trigger di Schmitt con CD40106..

..per squadrare bene l'onda (dal Transistor esce molto lontana dall'essere quadra) e adattarsi al livello di tensione dellATMega. Se ne mettono due in cascata per recuperare la fase corretta.
Poi si entra dentro il piedino 4 (a memoria mi pare il D2 = INT0) e si apre un'istanza di INTERRUPT sul fronte di salita (RISE), e da lì si fa partire il contatore di ritardo di un impulso tipo:
digitalWrite(outTriac, HIGH); // accende il TRIAC
delayMicroseconds(5); // rimane a 1 per 5 uSec
digitalWrite(outTriac, LOW); // il TRIAC CMQ NON SI SPEGNE fino al successivo passaggio per lo zero
Il delay è un tempo critico, perchè va considerata la capacità del gate del TRIAC, e non sempre 5 uSec sono sufficienti ad accenderlo. Con certi TRIAC sono dovuto salire fino a 10 uSec. Cmq sui Datasheet si trova il Tmin per l'impulso di accensione.
Considerando che una semionda a 50Hz dura 10 mSec, il tempo di ritardo va da 0 uS, fino a non oltre 8-9000 uS, pena il non-sganciamento del TRIAC al passaggio per lo zero.
Ovviamente si può legare il tempo di ritardo ad una variabile, magari manipolabile da un ingresso analogico (potenzimetro) o come nel mio caso, una variabile AJAX che prende il valore da uno slider su una pagina Web il valore di dimmer (il progetto Domo- BaBBuino!)