coolwolf / 18/04/2019

NodeMCU Lua gpio.trig() kullanımı

grpio.trig fonksiyonu ile genel kullanım giriş/çıkışlarının durumlarına göre tetikleme yapabilirsiniz. Aşağıda her bir tetikleme modununun nasıl çalıştığını anlatmaya çalıştım.

up: Pin voltajı eksiden artıya değiştiğinde tetiklenir. Bir kez tetiklendiğinde, eksi görüp tekrar artı görmediği sürece tetiklenmez. Yani tekrar tetiklenmesi için pin girişinin eksi olması ve tekrar artı olması gerekir.
Örnek Kod:

local GirisPini=1 
gpio.mode(GirisPini,gpio.INT) 

local function PinUp(durum, zaman) 
 print("PinUp Durum:"..durum.." Zaman:"..zaman)    
 print("..................")  
end
 
gpio.trig(GirisPini, "up", PinUp)

down: Pin voltajı artıdan eksiye döndüğünde tetiklenir. Bir kez tetiklendiğinde tekrar tetiklenmesi için pin değerinin yeniden bir kez artı ve tekrar eksi olması gerekir.
Örnek Kod:

gpio.mode(GirisPini,gpio.INT) 

local function PinDown(durum, zaman) 
 print("PinDown Durum:"..durum.." Zaman:"..zaman)    
 print("..................")  
end
 
gpio.trig(GirisPini, "down", PinDown)

both: Pin voltajı değiştiğinde tetiklenir. Eksiden artıya veya artıdan eksiye her değiştiğinde tetiklenir.
Örnek Kod:

gpio.mode(GirisPini,gpio.INT) 

local function PinBoth(durum, zaman) 
 print("PinBoth Durum:"..durum.." Zaman:"..zaman)    
 print("..................")  
end
 
gpio.trig(GirisPini, "both", PinBoth)

low: Pin voltajı eksi olduğu sürece sürekli tetiklenir. Yukarıdakilerin tamamı bir kez tetiklenirken, low ve high sürekli olarak tekrar eder.

local GirisPini=1
gpio.mode(GirisPini,gpio.INT)

tamponsure=300
zamanfarki=0
sonokuma=0

local function PinLow(durum, zaman)
    --sürekli tekrar etmemesi için 300 milisaniyelik aralıklarla kontrol etsin
    zamanfarki=(zaman-sonokuma)/1000
    if zamanfarki




high: Pin voltajı artı olduğu sürece sürekli tetiklenir.

local GirisPini=1
gpio.mode(GirisPini,gpio.INT)

tamponsure=300
zamanfarki=0
sonokuma=0

local function PinHigh(durum, zaman)
    --sürekli tekrar etmemesi için 300 milisaniyelik aralıklarla kontrol etsin
    zamanfarki=(zaman-sonokuma)/1000
    if zamanfarki




coolwolf / 24/01/2019

Online / Offline UPS farkı nedir ?

Offline UPS: Girişinde elektrik olduğu sürece devreye girmez. Girişindeki elektriği doğrudan çıkışa verir. Bu arada da kendi akülerini şarj eder. Elektrik voltajı belli bir değerin altına düştüğünde şebeke beslemesini kesip, kendi üzerindeki akülerden çıkış verir. 220V kullanan cihazlar genellikle 190 V’a kadar düzgün çalışırlar. Bu durumda offline UPS 200 Voltun altını algıladığı anda birkaç milisaniye içinde devreye girer.
Verdiğim voltaj değerleri yaklaşık örnek değerlerdir. Farklı marka UPS’ler farklı değerler kullanabilir.


Online UPS: Sürekli devrededir. Çıkış voltajı daima 220V olur. UPS devre tasarımına göre;
1. belli bir voltaja kadar regülatör olarak çalışır. Yani aküler devreye girmez. Kendi üzerindeki trafolar yardımı ile elektriği 220 Volta ayarlar. Tabi ortalama UPS boyutlarındaki bir cihaz için bu regülatörlük görevi sadece 10V civarında giriş farkı için yapılabilir.
2. Sürekli olarak aküden çalışır. Bir yandan da akülerini şarj eder. Laptoplar bu tür UPS’lere mükemmel örneklerdir. Elektriğe taktığınız anda hem sizin çalışmanızı sağlar, hem de aküsünü şarj eder. Elektrik gittiğinde de sizi kendi bataryasından çalıştırır.

coolwolf / 15/01/2019

AndroidStudio 3.3 Could not find method testImplementation() Error

AndroidStudio 3.3 güncellemesi yaptıktan sonra günlerce bu sorunu çözmeye uğraştım. Android ve Java ile ilgili ne varsa silip tekrar kurduğum halde sürekli alttaki hatayı aldım.

Could not find method testImplementation() for arguments [junit:junit:4.12] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

En sonunda testImplementation ibaresini testCompile olarak değiştirdim. Ardından androidTestImplementation ibarelerini de androidTestCompile yaptım.

Android Sudio’nun son sürümünü kullananlar zaten bilecektir, Implementation yerine Compile yazıldığında, Compile term is outdated and the message says “It will be removed at the end of 2018” hatası alınıyor.

2018 çoktan geçti 🙂

Compile yazarak sorunumu çözdüm. Ama bir süre sonra jeton düştü. Bu nalet olası Java’nın oldum olası Türkçe harflerle sorunu olmuştur. Implementation’un baş harfi I, halbuki bu Java küçük i’yi İ olarak istiyor. Bunun derdi bu olmasın. Şunu testİmplementation şeklinde yazayım bakalım ne olacak. Veeeee, tahmin ettiğim gibi oldu. Hatasız çalıştı.

Bu durumda, Türkçe Windows kullanılıyorsa (karakter setinde İ harfi kullanan diğer dillerde de geçerlidir bence), alttaki build.grade dosyasında bulunan alttaki kodu

testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

şu şekilde değiştirmek sorunu çözecektir:

    testİmplementation 'junit:junit:4.12'
    androidTestİmplementation 'com.android.support.test:runner:1.0.2'
    androidTestİmplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

Umarım başkalarının da günlerini ziyan etmemesinde katkım olmuştur.

coolwolf / 27/09/2018

MVC’de Controller açıklamaları eklemek ve bu açıklamaları listelemek

Controller adının üzerine Description attribute ekliyoruz:

[Description("Benim Çok Çalışan Kontrollerim")]
public class MyController : Controller
{
}

ardından uygulamamızdaki tüm controller’leri ve içlerindeki metodları listelemek için aşağıdaki fonksiyonu kullanabiliriz:
 

Assembly assembly = Assembly.GetExecutingAssembly();
IEnumerable types = assembly.GetTypes().Where(type => typeof(Controller).IsAssignableFrom(type)).OrderBy(x => x.Name);
List _controllers = new List();
List _methods = new List();
foreach (Type cls in types)
{
	AttributeCollection attributes =TypeDescriptor.GetProperties(this)[cls.Name].Attributes;
	DescriptionAttribute myAttribute = (DescriptionAttribute)attributes[typeof(DescriptionAttribute)];
	_controllers.Add(new SelectListItem() { Text= myAttribute.Description, Value= cls.Name.Replace("Controller", "") });
	IEnumerable memberInfo = cls.GetMethods(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public).Where(m => !m.GetCustomAttributes(typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute), true).Any()).OrderBy(x => x.Name);
	foreach (MemberInfo method in memberInfo)
	{
		if (method.ReflectedType.IsPublic && !method.IsDefined(typeof(NonActionAttribute)))
		{
			_methods.Add(new SelectListItem() { Text=method.Name.ToString() });
		}
	}
}

coolwolf / 13/04/2018

SyncFusion Toolbar Visual Studio’da görünmezse yapılacaklar

Komut Satırını yönetici olarak başlatın.
Aşağıdaki dizine girin.

C:\Program Files (x86)\Syncfusion\Essential Studio\16.1.0.32\Utilities\ToolBoxInstallers>
ToolboxInstallerConsole_VS2017.exe

dosyasını (veya sizin Visual Studio sürümünüze uygun olanı) aşağıdaki parametrelerle çalıştırın.

C:\Program Files (x86)\Syncfusion\Essential Studio\16.1.0.32\Utilities\ToolBoxInstallers\ToolboxInstallerConsole_VS2017.exe reinstall 4.6 ASP.NET,WPF,WindowsForms

1. Parametre reinstall, ToolBar’ı tekrar kurduruyor.
2. Parametre 4.6 framework sürümü
3. ASP.NET,WPF,WindowsForms hangi platformlar için toolbar kurulacağını belirtiyor.

coolwolf / 22/03/2018

MVC @Html.DropDownList SelectedValue does not work

I am new to mvc. When i create @Html.DropDownList, i see sometimes i can set SelectedValue but sometimes i can not.
I tried many solutions like creating “<select” manually, passing generic List<>, passing List<SelectListItem>, passing SelectList etc.
But no success. Razor View does no select the item which i want.
After days of searching, i found a blog entry which solve my problem.
My controller side was like that:

public ActionResult Liste(int? MyValue)
{
	if (MyValue== null || MyValue == 0) MyValue = 1;
	List<SelectListItem> _sl = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Select(v => new SelectListItem{Text = v.ToString(),Value = ((int)v).ToString()}).ToList();
	foreach(SelectListItem _itm in _sl)
	{
		if (_itm.Value == MyValue.Value.ToString()) _itm.Selected = true;
	}
	ViewBag.ProductType= _sl;
	ViewBag.SelValue= MyValue;
	return View();
}

and my Razor View was like that:

@Html.DropDownList("ProductType", (List<SelectListItem>)ViewBag.ProductType, new { @class = "form-control" })

normally there is no problem. Problem occurs only when i try to set selected item. This completely works.
So what is the problem then?
The problem is: The name of dropdown and viewbag constant is same. 
When i change my controller to this:

public ActionResult Liste(int? MyValue)
{
	if (MyValue== null || MyValue == 0) MyValue = 1;
	List<SelectListItem> _sl = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Select(v => new SelectListItem{Text = v.ToString(),Value = ((int)v).ToString()}).ToList();
	foreach(SelectListItem _itm in _sl)
	{
		if (_itm.Value == MyValue.Value.ToString()) _itm.Selected = true;
	}
	ViewBag.MyProdList= _sl;
	ViewBag.SelValue= MyValue;
	return View();
}

and View to this:

@Html.DropDownList("ProductType", (List<SelectListItem>)ViewBag.MyProdList, new { @class = "form-control" })

everything works.
I wonder, why did i not understand this before.
If anyone face same problem, i hope he/she find this blog entry and not spent lot of time as i spent.

coolwolf / 01/05/2017

ESP8266, ESP12, ESP13 İlk Programımızı yazalım

NodeMCU Firmware atmadıysanız, öncelikle buradaki yazıyı takip ederek firmware atabilirsiniz.
İlk işimiz ESPlorer’i  buradan indirip, içindeki ESPlorer klasörünü ZIP’ten çıkaralım. Bu klasörde bulunan ESPlorer.bat dosyasına çift tıklayarak ESPlorer programını çalıştıralım.
Dikkat !!! ESPlorer’in çalışması için bilgisayarınızda JAVA yüklü olmalıdır.
İlk işimiz credentials.lua isimli bir dosya oluşturalım ve içine ESP’mizi bağlayacağımız erişim noktasının bilgilerini yazalım:

-- Credentials
SSID = "ERISIM-NOKTASI-ADI"
PASSWORD = "WIFI-PAROLASI"

Ardından init.lua isimli bir dosya oluşturalım ve içine aşağıdakileri yazalım:

-- load credentials, 'SSID' and 'PASSWORD' declared and initialize in there
dofile("credentials.lua")
function startup()
    if file.open("init.lua") == nil then
        print("init.lua deleted or renamed")
    else
        print("Running")
        file.close("init.lua")
        -- the actual application is stored in 'application.lua'
        -- dofile("application.lua")
    end
end
print("Connecting to WiFi access point...")
wifi.setmode(wifi.STATION)
wifi.sta.config(SSID, PASSWORD)
-- wifi.sta.connect() not necessary because config() uses auto-connect=true by default
tmr.create():alarm(1000, tmr.ALARM_AUTO, function(cb_timer)
    if wifi.sta.getip() == nil then
        print("Waiting for IP address...")
    else
        cb_timer:unregister()
        print("WiFi connection established, IP address: " .. wifi.sta.getip())
        print("You have 3 seconds to abort")
        print("Waiting...")
        tmr.create():alarm(3000, tmr.ALARM_SINGLE, startup)
    end
end)

Şimdi ESPlorer arcılığı ile her iki dosyayı da ESP2mize yükleyelim.
Öncelikle Com Port numarasını seçip, baud ayarını da yaptıktan sonra Connect Butonuna basıyoruz.

Aşağıdakine benzer bir çıktı alıyorsanız işlem tamamdır:

PORT OPEN 115200
Communication with MCU..Got answer! Communication with MCU established.
AutoDetect firmware...
Can't autodetect firmware, because proper answer not received (may be unknown firmware).
Please, reset module or continue.
tail 12
chksum 0xd5
ho 0 tail 12 room 4
load 0x3ffe8000, len 2212, room 12
tail 8
chksum 0x36
load 0x3ffe88a4, len 136, room 0
tail 8
chksum 0x5b
csum 0x5b

Şimdi ESPlorer penceresinin en altındaki butonları tıklayarak iletişim kurup kuramadığımıza bakalım.
Mesela Chip Info butonuna bastığınızda alttaki gibi bir çıktı almalısınız:

=node.info()
2	0	0	927018	1458400	4096	2	80000000
>

Artık iletişim kurabildiğimize göre yukarıda oluşturduğumuz iki dosyayı ESP’ye yükleyelim.
Bunun için ESPlorer’ın sol alt tarafında bulunan upload butonunu kullanacağız.

Önce creditentals, sonra da init dosyasını gönderiyoruz.
Run butonuna bastığınızda kodunuz çalışacaktır.

coolwolf / 01/05/2017

ESP Firmware nasıl oluşturulur ve nereden indirilir ?

ESP’niz için hazır firmwareler indirebileceğiniz gibi, en çok kullanılan yöntem olan kendinize özel firmware oluşturma yöntemini de kullanabilirsiniz. Bunun için NodeMCU Cloud Build Service sayfasına eposta adresinizi yazdıktan sonra alt kısımda bulunan seçenekleri ihtiyacınıza göre işaretleyip Start Your Build butonuna tıklayınız.

Buradaki seçeneklerden hepsini seçmek zorunda değilsiniz. Gördüğünüz gibi bazıları zaten kendiliğinden seçilmiş durumdadır. Bunlara ek olarak eklemek istrediğiniz modüller varsa build’inize dahil edebilirsiniz. Hangi modülün ne işe yaradığı hemen sağındaki kitap işaretine tıklayarak ulaşabileceğiniz sayfada açıklanmıştır.
Birkaç dakika içinde firmware’niz eposta adresinize gelecektir.

coolwolf / 24/04/2017

Server 2012 Uzak Masaüstü ile Barkod Yazıcısına RAW Yazdırma Sorunu

Server 2012’ye uzak masaüstü ile bağlanıyor ve RAW yazdırma yöntemi ile yazdıramıyorsanız aşağıdaki adımları uygulayabilirsiniz.
Çalıştır’dan gpedit.msc yazıp entera basın ve Group Policy Editörünü açın.
Açılan ekranda:
Computer Cofiguration -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Printer Redirection anahtarını açın.

Buradaki “User Remote Desktop Easy Print printer driver first” satırına çift tıklayın.
Not Configured olan değeri Disabled olarak değiştirin.

Sunucuyu kapatıp açtığınızda RAW yazıcınıza yazdırabileceksiniz.