Hallo Community,
ich habe grade kurz mal ein Lichtsensor geschrieben für den Programmierblock ...
Der Einbau ist relativ einfach was ihr benötigt ist ...
- Ein Programmierbaren block + Ein Zeitblock zu wiederholten ausführen ( Tipp 30 Sekunden reichen )
- Eine Solar Anlage ( Ein panel reicht)
- Ein Zeitblock mit den Namen "FREIER NAME (Sensor:SunIsDown)" .. wichtig die klammern mitschreiben
- Ein Zeitblock mit den Namen "FREIER NAME (Sensor:SunIsUp)" .. wichtig die klammern mitschreiben
! Zu Info der FREIER NAME kann selber gewählt werden .. ich brauche nur die texte mit der Klammer
Im Workshop ist es mir einfach immer zu viel arbeit das alles hoch zu laden .. Bilder u.s.w das wird also noch folgen vllt.
Alles anzeigen
ich habe grade kurz mal ein Lichtsensor geschrieben für den Programmierblock ...
Der Einbau ist relativ einfach was ihr benötigt ist ...
- Ein Programmierbaren block + Ein Zeitblock zu wiederholten ausführen ( Tipp 30 Sekunden reichen )
- Eine Solar Anlage ( Ein panel reicht)
- Ein Zeitblock mit den Namen "FREIER NAME (Sensor:SunIsDown)" .. wichtig die klammern mitschreiben
- Ein Zeitblock mit den Namen "FREIER NAME (Sensor:SunIsUp)" .. wichtig die klammern mitschreiben
! Zu Info der FREIER NAME kann selber gewählt werden .. ich brauche nur die texte mit der Klammer
Im Workshop ist es mir einfach immer zu viel arbeit das alles hoch zu laden .. Bilder u.s.w das wird also noch folgen vllt.
Quellcode
- /**
- * Einfach zu Benutzen
- *
- * benötigt nur ein Solar Panel
- * Name: Timer block (Sensor:SunIsDown)
- * Name: Timer block (Sensor:SunIsUp)
- *
- */
- static string TIMER_SUN_IS_DOWN = "(Sensor:SunIsDown)";
- static string TIMER_SUN_IS_UP = "(Sensor:SunIsUp)";
- // Über 20.0 wird die Sonne als "Anwesend" erkannt
- static float IS_OVER = 20;
- // No change
- string nextTrigger = "";
- void Main(string argument)
- {
- if(SunSensor())
- { // Sun Up
- if(nextTrigger == "ToUp" || nextTrigger == ""){
- List<IMyTerminalBlock> triggerTimer = new List<IMyTerminalBlock>();
- GridTerminalSystem.SearchBlocksOfName(TIMER_SUN_IS_UP,triggerTimer);
- if(triggerTimer.Count >= 1)
- {
- for (int z = 0; z < triggerTimer.Count; z++)
- {
- if (triggerTimer[z] is IMyTimerBlock)
- {
- IMyTimerBlock Block = (IMyTimerBlock) triggerTimer[z];
- Block.GetActionWithName("TriggerNow").Apply(Block);
- Echo("Timer: "+ TIMER_SUN_IS_UP +" Down");
- }
- }
- }
- nextTrigger = "ToDown";
- }
- } else
- { // Sun Down
- if(nextTrigger == "ToDown" || nextTrigger == ""){
- List<IMyTerminalBlock> triggerTimer = new List<IMyTerminalBlock>();
- GridTerminalSystem.SearchBlocksOfName(TIMER_SUN_IS_DOWN,triggerTimer);
- if(triggerTimer.Count >= 1)
- {
- for (int z = 0; z < triggerTimer.Count; z++)
- {
- if (triggerTimer[z] is IMyTimerBlock)
- {
- IMyTimerBlock Block = (IMyTimerBlock) triggerTimer[z];
- Block.GetActionWithName("TriggerNow").Apply(Block);
- Echo("Timer: "+ TIMER_SUN_IS_DOWN +" Down");
- }
- }
- }
- nextTrigger = "ToUp";
- }
- }
- string PBinfoText = " Last run time "+ElapsedTime.TotalSeconds+" seconds ago \n";
- PBinfoText += "nextTrigger:"+nextTrigger+"\n";
- PBinfoText += "\n";
- Echo(PBinfoText.ToString());
- }
- bool SunSensor()
- {
- float power = 0f;
- List<IMyTerminalBlock> Solar = new List<IMyTerminalBlock>();
- GridTerminalSystem.GetBlocksOfType<IMySolarPanel>(Solar);
- for (int i = 0; i < Solar.Count; i++)
- {
- var block = Solar[i] as IMySolarPanel;
- string value = "";
- string type = "";
- System.Text.RegularExpressions.Regex matchthis = new System.Text.RegularExpressions.Regex(@"^.+\n.+\:\s?([0-9\.]+)\s(.*)\n.+$");
- System.Text.RegularExpressions.Match match = matchthis.Match(block.DetailedInfo);
- if (match.Success)
- {
- value = match.Groups[1].Value;
- type = match.Groups[2].Value;
- }
- float.TryParse(value, out power);
- if (type == "W")
- {
- power /= 1000;
- }
- if (type == "MW")
- {
- power *= 1000;
- }
- if(power > IS_OVER){
- Echo(power.ToString());
- return true;
- }
- }
- Echo(power.ToString());
- return false;
- }
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Xeracles ()