Pcden Seri Port + Role Acip Kapama
-
düşündüm de en mantıklısı rs485....pc ye usb/485 adaptör alacaksın karşıya minik picli bir devre istediğin gibi oynarsın onunla :P
-
RootB bunu yazdı
helal olsun lan size elektroniğin amına koymuşsunuz ikiniz de. güzel konu olmuş.
helala akşam akşam siktiler harbi :)
sayın mürit böle ufak ufak şeyler yaparak büyücen. japonlar yapmış oluyo yapınca. onlar yapamadıklarını ya da ameleleiklerini sölüyolar mı. adım adım giicen sağlam basıcan.
-
Hocalar şimdi PCyi açınca TV yi açan, PCyi sleep yada hibernate edince (hala hdmi kanalındaysam) TVyi kapayan bi program yazdım.
LG led TVsi olan seri porttan TVyi yönetmek isteyen manyak varsa kullanabilir.
Röle kontrolune gelmedim fakat burdaki TVonoff fonksiyonuna koyacam roleyide
using System; using System.Text; using System.Globalization; using System.Threading; namespace HolyOne { public class LGTV:System.IO.Ports.SerialPort { public byte SetId { get; set; } public LGTV(string portname) { SetId = 1; DefaultPersistRetryCount = 3; this.PortName = portname; this.BaudRate = 9600; this.DataBits = 8; this.Parity= System.IO.Ports.Parity.None; this.StopBits= System.IO.Ports.StopBits.One; this.ReadTimeout = 5500; this.RtsEnable = true; this.NewLine = "\r\n";//\r } public delegate void LogHandler(object sender, string msg); public event LogHandler OnLog; public enum Channel { analog = 0x22, av1 = 0x20, av2 = 0x21, component = 0x40, rgbpc = 0x60, hdmi1 = 0x90, hdmi2 = 0x91, hdmi3 = 0x92, hdmi4 = 0x93 }//kb 01 enum // public int writewaitms = 1000; // public int readwaitms = 0; public bool lgCmd(string cmd , int cmdid) { string tosend = cmd + ' ' + SetId.ToString("X2") + ' ' + cmdid.ToString("X2"); return lgCmd(tosend); } public bool lgCmd(string cmdtxt) { NewLine = "\n"; if (!this.IsOpen) try { this.Open(); } catch (Exception x) { Log("Err: " + x.Message); return false; } try { this.WriteLine(cmdtxt); this.BaseStream.Flush(); // this.DiscardOutBuffer(); Log("TX : " + cmdtxt); } catch (Exception x) { Log("Err: " + x.Message); return false; } return true; } public void Log(string str) { if ( OnLog != null) { OnLog (this, str); } //Console.WriteLine(str); } public int? lgAskCmd(string cmdtxt) { int? result=null; try { string r = (lgWriteRead(cmdtxt)); if (r.Contains("OK")) { string afterok = r.Substring(r.LastIndexOf("OK") + 2); result = int.Parse( afterok, NumberStyles.HexNumber); } } catch { } return result; } public int DefaultPersistRetryCount { get; set; } public int lgAskcmdPersist(string cmd, int cmdid) { string cmdtxt = cmd + ' ' + SetId.ToString("X2") + ' ' + cmdid.ToString("X2"); return lgAskcmdPersist(cmdtxt); } public int lgAskcmdPersist(string cmdtxt ) { int maxtry = DefaultPersistRetryCount; int? result = null; while (result == null && maxtry > 0) { result = lgAskCmd(cmdtxt); maxtry--; System.Windows.Forms.Application.DoEvents(); } if (result == null) return -1;else return (int)result; } public string lgWriteRead(string cmd , int cmdid) { string tosend = cmd + ' ' + SetId.ToString("X2") + ' ' + cmdid.ToString("X2"); return (lgWriteRead(tosend)); } public string lgWriteRead(string cmdtxt) { try { string result = ""; if (lgCmd(cmdtxt)) { Thread.Sleep(600); result = DoReadLine(); } return result; } finally { try { this.DiscardInBuffer(); this.DiscardOutBuffer(); } catch { } } } public string DoReadLine() { NewLine = "x"; try { string s = this.ReadLine(); // this.DiscardInBuffer(); Log("RX : " + s); return s; } catch (Exception x) { Log("Error:" + x.Message); return ""; } } public bool SetOnOff(bool state){ if (state) return ( lgAskcmdPersist("ka", 0x01)>=0) ; else return (lgAskcmdPersist("ka", 0x00) >= 0); } public int GetOnOff() { return lgAskcmdPersist("ka", 0xff); } public int Zap(Channel ch) { return (lgAskcmdPersist("xb", (byte)ch) ); } } } -
Ha piyasada birkaç LG tv servis modu kontrol kodu var c# için, siz denemeden söyliim hepsi eski ve ilkeller. Çoğu hiç çalışmıyor ama holy yazdı azimle.
Yukarıdaki LGTV classı bu da onunla yaptığım kontrol
void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e) { if (e.Mode == PowerModes.Suspend) EndDevices(); else if (e.Mode == PowerModes.Resume) StartDevices(); } private void StartDevices() { lg.DefaultPersistRetryCount = 3; int onoff = lg.GetOnOff(); FirstOnOffState = onoff;//saved it if (onoff >= 0) { bool turnedon = true; if (onoff == 0) { turnedon = lg.SetOnOff(true); Console.WriteLine("TV turned on."); } else if (onoff == 1) Console.WriteLine("TV was already on."); if (turnedon) { HolyOne.LGTV.Channel ch; if (Enum.TryParse<HolyOne.LGTV.Channel>(zapchname, out ch)) { lg.Zap(ch); Console.WriteLine("TV zapped to " + ch.ToString()); } } } Console.WriteLine("Completed startup process"); } private void EndDevices() { /* if (FirstOnOffState == 0) { Console.WriteLine("TV was off earlier, close then"); lg.SetOnOff(false); } else if (FirstOnOffState == -1) { Console.WriteLine("TV was not reachable, if it can be reached, then close"); lg.DefaultPersistRetryCount = 1; if (lg.GetOnOff() == 1) lg.SetOnOff(false); } else { Console.WriteLine("TV was open before, so it stays open"); }*/ int CurrentChid = lg.lgAskcmdPersist("xb", 0xff); if (CurrentChid > 0) { HolyOne.LGTV.Channel ch; if (Enum.TryParse<HolyOne.LGTV.Channel>(zapchname, out ch)) { int chint = (int)ch; if (chint == CurrentChid) { lg.SetOnOff(false); Console.WriteLine("Tv was still on PC so turn off TV"); } else Console.WriteLine("TV switched to another source, dont close TV"); } } try { if (lg.IsOpen) lg.Close(); } catch { } } -
Sıra geldi roleye onuda paralelden takayım akım korumalı roleli paralel port aparatları varmış.
Şimdi aracı devre koysam çok kastıracak zaten işsiz diolar =)
-
SharpShooter bunu yazdıX10n bunu yazdı
arduino ve linkteki shield yardımcı olabilir.
http://www.open-electronics.org/input-output-shield-for-arduino/
edit: düzeltme
aynen arduino candır
Hocam arduinoları siparis ettim 2 ay geçti hala çinden çıkamadı
-
cok iyi anlamam elktronikten ama mantiken su olmazmi bu pic kodlama kartini modifiye ederek yapilamazmi? hem usb driver yazmaya gerenk yok hemde pic degistirme imkani olan bise olur ama derleyici nekadar hizli atar o da soru isareti
-
http://sourceforge.net/projects/libusbdotnet/ şimdi bunu indirdim vid ve pid girdim. taktığım cihazı tanıdı ona seri port açtı.
Usbden gelen sanal com üzerinden mi haberleşmeliyim yoksa daha guzel bir standardı varmı bunun
-
Programlama bilmek ne kdar guzel yaaa istedigin seyi hemen yaz, ohhh valla...
Helal olsun seyhim....Kiskandim seni vallahi...
-
HolyOne bunu yazdı
Ama usb olacaksa driver mi yazacaz ona bide, PC nasıl anlıyor? o pic için hazır driver falan mı var?
USB portu ile iletisim kurabilmen icin usb cihazinin VID(VendorID) ve PID(ProductID) numarasini alman yeterli.
CreataFileA apisi ile usbye baglanabilir, ReadFile ile veri okuyabilir, WriteFile ile de yazabilirsin.
Ornek Bir Delphi Snippet'i
Function ConnectToUSB:boolean;
var
Aygit : String;
Handle : Cardinal;
begin
Aygit:='\?\USB#Vid_TARIKAT&Pid_1453#5&1234567&0&1#{ abcde-efgh-blah-blah-blah}';
Handle:=CreateFile(PAnsiChar(Aygit), GENERIC_WRITE OR GENERIC_READ,
FILE_SHARE_WRITE OR FILE_SHARE_READ, NIL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED OR FILE_ATTRIBUTE_NORMAL, 0);
if Handle <> INVALID_HANDLE_VALUE then
BEGIN
Result:=True;
END
ELSE
BEGIN
Result:=False;
END;
end;
wh0 tarafından 14/Kas/12 01:15 tarihinde düzenlenmiştir
