Wie kann ich eine dynamische Variable mit einem Literal in Mathematica vergleichen?

  • Ich mache ein Mathematica-Notebook und möchte einen Wecker machen. Etwas wie das:

     SetAttributes[Horas, HoldRest] 
    
    (* Get System Hour *)
    Hours = Dynamic[Refresh[DateList[][[4]], UpdateInterval -> 1]];  
    
    SetAttributes[Mins, HoldRest] 
    
    (* Get System Mins *)
    Mins = Dynamic[Refresh[DateList[][[5]], UpdateInterval -> 1]]; 
    
    If[
      SameQ[ToString[Hours], ToString[alarmh]] 
        && SameQ[ToString[Mins],ToString[alarmm]],   
      Quiet@EmitSound[Sound[SoundNote["D", 1,"Tinklebell"]]]
    ];
     

    alarmm und alarmh sind Variablen, die der Benutzer aus einer Listbox Wenn die Variablen aus der Listbox mit der Systemstunde identisch sind, möchte ich eine Glocke läuten.

    Das Problem ist, dass ich sie nicht vergleichen kann, wenn ich eine dynamische Variable mache , aber wenn ich das mache:

     Refresh[DateList[][[5]], UpdateInterval -> 1];
     

    Ich kann zwischen ihnen vergleichen, aber die Zeit wird nicht aktualisiert. ..

    Wie kann ich es aktualisieren lassen?

    15 March 2012
    Mr.Wizard
2 answers
  • Manipulieren funktioniert. Dieser einfache Alarm ertönt für 1 Minute oder kürzer, wenn Sie auf reset drücken:

     Manipulate[If[Refresh[DateList[], UpdateInterval -> 1][[4 ;; 5]] == 
     {hours, minutes} && oo, EmitSound[Sound[SoundNote["C", 1]]]];
     Text@Style[DateString[], 20], {{hours, 0}, Range[25] - 1}, {{minutes, 0}, 
     Range[61] - 1}, {{oo, True, "alarm"}, {True -> "ON", False -> "OFF"}}]
     

    Wie kann ich eine dynamische Variable mit einem Literal in Mathematica vergleichen?

    14 March 2012
    Chris Jester-Young
  • Einstellen des Alarms in einer Minute:

     {alarmh, alarmm} = Date[][[{4, 5}]] + {0, 1};
     

    Definieren einer zeitgesteuerten Aufgabe. Es wird einmal pro Sekunde ausgeführt:

     myTask =
      CreateScheduledTask[
       If[
         Date[][[{4, 5}]] == {alarmh, alarmm},
         EmitSound[Sound[SoundNote[]]]
         ];, 
      1];
     

    Beachten Sie, dass dies eine ganze Minute lang klingelt, sobald die eingestellte Zeit erreicht ist Die Aufgabe wird 60-mal in der von Ihnen eingestellten Minute ausgeführt. Es ist einfach, den Code zu aktualisieren, um dieses Verhalten zu ändern.

    Starten Sie die Task:

     StartScheduledTask[myTask];
     

    Entfernen Sie es, wenn es nicht mehr nützlich ist. Entweder diese Aufgabe:

     RemoveScheduledTask[myTask];
     

    ... oder alle Aufgaben, die möglicherweise ausgeführt werden:

     RemoveScheduledTask[ScheduledTasks[]];
     

    Aufgrund Ihrer Kommentare scheint es, dass das Problem, das Sie wirklich haben, die Verwendung der dynamischen Werte ist der Stunden und Minuten Variablen. Sie haben diese Variablen der ziemlich komplexen, aber meist unsichtbaren Ausgabe von Dynamic zugewiesen. Wenn Sie die Zuweisungen innerhalb von Dynamic verschieben, ist dies OK. Sehen Sie den Unterschied hier:

     s1 = Dynamic[Date[][[6]], UpdateInterval -> 1]
    Dynamic[s2 = Date[][[6]], UpdateInterval -> 1]
    Dynamic[{s1, Head[s1], s2, Head[s2]}]
     

    Wie kann ich eine dynamische Variable mit einem Literal in Mathematica vergleichen?

    14 March 2012
    Sjoerd C. de Vries