Что нового

[Элементы GUI] Как правильно сделать лампочку?

Jan-Jak

Новичок
Сообщения
45
Репутация
1
Здрасти всем. Решил я переехать в деревню. Так вот встал вопрос: Научить дом уму. Но я совершенно не умею работать с окнами и GUI. Помогите нарисовать графический интерфейс. И первые для меня грабли это простая лампочка, но только она должна читать режим из реестра.
Код:
#include <GUIConstantsEx.au3>

Global $hButton, $hButton1
Local $icon
GUICreate("")
$hButton = GUICtrlCreateButton("Включить", 50, 150, 100, 25)
$hButton1 = GUICtrlCreateButton("Выключить", 150, 150, 100, 25)
GUISetState()
Func clip()
$f = RegWrite ( "HKEY_CURRENT_USER\Software\Houm\image\$image", "$image1", "REG_SZ" ,'\On.Ico')
        $icon  = @ScriptDir & RegRead ( "HKEY_CURRENT_USER\Software\Houm\image\$image", "$image1" )
      GUICtrlCreateIcon($icon, 20, 0, 20, 32, 32)          
EndFunc 
Func clip1()
$g = RegWrite ( "HKEY_CURRENT_USER\Software\Houm\image\$image", "$image1", "REG_SZ" ,'\Off.Ico')
        $icon  = @ScriptDir & RegRead ( "HKEY_CURRENT_USER\Software\Houm\image\$image", "$image1" )
      GUICtrlCreateIcon($icon, 20, 0, 20, 32, 32)          
EndFunc 


While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
            Case $hButton
            clip()
           Case $hButton1
            clip1()
        EndSwitch
WEnd
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Попробуйте так
Код:
#include <GUIConstantsEx.au3>
Local $iconOn=@ScriptDir&"\on.ico",$iconOff=@ScriptDir&"\off.ico"
GUICreate("")
$On = GUICtrlCreateButton("Включить", 50, 150, 100, 25)
$Off = GUICtrlCreateButton("Выключить", 150, 150, 100, 25)
$ico=GUICtrlCreateIcon('',0,0,20,32,32);постоянно не стоит создавать один и тот же элемент чтобы потом заполнять его
GUISetState()
Func _LampSet($param)
	Switch $param
		Case "On"
			RegDelete("HKEY_CURRENT_USER\Software\Houm\image\$image");удаление раздела, если нету то всеравно не повредит
			RegWrite( "HKEY_CURRENT_USER\Software\Houm\image\$image", "$image1", "REG_SZ" ,'\On.Ico');Зачем читать параметр после записи?
			If Not @error Then
				GUICtrlSetImage($ico,$iconOn)
			EndIf
		Case "Off"
			RegDelete("HKEY_CURRENT_USER\Software\Houm\image\$image")
			RegWrite( "HKEY_CURRENT_USER\Software\Houm\image\$image", "$image1", "REG_SZ" ,'\Off.Ico')
			If Not @error Then
				GUICtrlSetImage($ico,$iconOff)
			EndIf
	EndSwitch
EndFunc
While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
            Case $On
				_LampSet("On")
			Case $Off
                _LampSet("Off")
        EndSwitch
WEnd



Добавлено:
Сообщение автоматически объединено:

Осмелюсь спросить черным юморком:
Вам эта лампочка в саду или деревне, ночью хоть чем то помогает? :D
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
MnM
Есть такая штука Arduino (любой AVR по сути), вот с ней и работайте через COM порт. У неё есть много выходов как цифровых, так и аналоговых плюс есть ШИМ. Ставите силовые выходы на ~250v 2-3A этого вполне достаточно, и управляете чем угодно. ;)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Почему советую? Потому что на Arduino можно возложить процессы, которые не будут требовать вмешательства из вне, лишь только для контроля корректировки и изменения ПО, с чем вполне справится Autoit!
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Прекрасная штука=)
На досуге серьезно подумаю над этим.
OffTopic:
Умный дом построить на AutoIt :laugh:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
MnM [?]
Да бросьте, собрать такую штуку 3 дня максимум, не напрягаясь после рабочего дня вечерами. :smile:
Кстати в исходной схеме есть небольшая ошибка, кроется она в сигнале DTR с COM порта. Если надумаете собирать, помогу её обойти. ;)
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Garret сказал(а):
MnM сказал(а):
Да бросьте, собрать такую штуку 3 дня максимум
Это я так удивился не "массивности" этой штуки, а то что такая есть ;D
Просто ни разу не слышал.(Как будто пещерный человек :smile:)
 

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
MnM
Я уже и серво-двигателями и лампочками и звуком управлял с помощью AutoIt через Arduino. Через com порт можно спокойно связывать язык и контроллер. И кстати, вполне просто и удобно :smile:
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
Эхх, если бы эта волшебная штучка могла запоминать все что я вижу\слышу\говорю и делаю, а потом если я начну(как всегда) забывать, она бы предоставляла доступ к памяти :whistle:(да и минимизировать её еще до крошечных размеров в ухо :smile:)
 

sss

Продвинутый
Сообщения
332
Репутация
96
MnM
Ну, до состояния в ухо я не дорос, но до размеров 40мм \ 15мм \ 5мм - вполне реально :smile: Правда, не Arduino, а "чистый" AVR в SMD корпусах... Камера \ микрофон \ внешняя память цепляется легко...

А Arduino - вон она лежит, с поднятым Telnet и домашним беспроводным сервером для шушеры типа датчика температуры \ влажности... И правда отличная штука для умного дома, советую!

Для безопасного управления приборами типа лампочки \ чайника лучше использовать реле. Управляешь пятивольтовыми сигналами сетью ~220 В - красота, и стоит копейки.

Пример сессии с Telnet
 

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
Sky-WaLkeR
Attiny 2313 к примеру :smile:
Но там выходов маловато.
 

sss

Продвинутый
Сообщения
332
Репутация
96
_Lexa98_
Я для датчика использовал ATtiny24A в SO-14 корпусе - крохотулька, и ног прилично - 14 (только оперативки маловато, и памяти 2 Кб). А для станции - ATmega32A в TQFP-корпусе (44 вывода на площади чуть более сантиметра).
 

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
Sky-WaLkeR
Ну если брать не DIP, тогда сойдет.
 
Автор
Jan-Jak

Jan-Jak

Новичок
Сообщения
45
Репутация
1
Есть такая штука Arduino (любой AVR по сути), вот с ней и работайте через COM порт. У неё есть много выходов как цифровых, так и аналоговых плюс есть ШИМ. Ставите силовые выходы на ~250v 2-3A этого вполне достаточно, и управляете чем угодно.

это моя мечта. Только скажу прямо. Не по тяну я это. Первое - хроническая не хватка времени. Второе - знания на 0.1 из 100. как максимум переделать готовый пример.
 

sss

Продвинутый
Сообщения
332
Репутация
96
Jan-Jak [?]
Глупости. Если уже знаешь хотя бы один язык программирования (AutoIt например) - освоить Ардуину с нуля до уровня управления лампой - 2-3 часа чистого времени (час на язык, час на основы схемотехники), то есть два сильно загруженных вечера.
 
Автор
Jan-Jak

Jan-Jak

Новичок
Сообщения
45
Репутация
1
в том то и дело. я :IL_AutoIt_1: но знаю его на уровне чайника. то что ты делаешь за минуту. Я буду ковырять месяцы. Вот если я бы тебе расшарил свой рабочий стол и ты это реализовал мне удаленно, то тогда да. Я был бы просто счастлив.
 

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
Sky-WaLkeR
pinMode()
analogWrite/Read()
digitalWrite/Read()
If, else {}
Основные функции. Выучить очень легко, причем там синтакс очень прост :smile:
 

sss

Продвинутый
Сообщения
332
Репутация
96
Jan-Jak
Зря ты так говоришь... Я ведь тоже далеко не профессионал, но за Ардуинку взялся, и потом даже перешел на AVR... А удаленный рабочий стол тут не поможет - схему нужно руками собирать, проводок туда, проводок сюда...

Если возникнут вопросы - обращайся тут, или по аське 72471817, или по почте [email protected] - помогу чем смогу.

_Lexa98_
Да, так и есть. Но если совсем с нуля - нужно понять, как не перепутать плюс с минусом, что такое HIGH, LOW и Hi-Z состояние, чем вход отличается от выхода и т.д., отсюда и выходит пара часиков, плюс настройка интерфейса \ раскаповка коробочек \ чтение даташита. Это все только звучит страшновато, но на самом деле и правда легко ;)

Синтакс - транскрипция с английского (syntax), по-русски правильно синтаксис =)
 
Верх