Nach Zustandswechsel nur 1 mal senden

Was heißt bei dir einmal senden? du willst ja sicher jeden Tag an und ausschalten

Dein Ansatz war schon richtig. Du musst anstatt der map-Funktion deine Switchcase-Variable mit if-Anweisungen festlegen. Ich weiß jetzt nicht, was für werte dein Sensor liefert aber du kannst es z.b. so machen:

if (ldr_value < 200) range =0; //dunkel
if (ldr_value > 400 && ldr_value < 600) range =1; //mittel
if (ldr_value > 800) range = 2; // hell

if (old_range != range) {
old_range = range;
switch (range) {
case 0:
case 1:
case 2:
}
}

Damit sollte es eigentlich funktionieren. Mit einer Mittelwertbildung von ldr_value kannst du die Funktion nochmals stabilisieren. Das Prinzip ist hier unter dem Stichwort Glätten (Smoothing) erklärt.

http://creativecoding.uni-bayreuth.de/tools/arduino/arduino-patterns/

Wenn das noch nicht geht musst du mit mills() arbeiten und zeitdifferenzen festlegen, in denen geschaltet werden darf.