:: Visual Foxpro, Foxpro for DOS
Arduino и Фокс
Nick
Автор

Сообщений: 140
Откуда: Lvov
Дата регистрации: 11.01.2001
Всем привет
Давно вынашиваю идею сделать базу кодов IR пультов
иногда приносят в ремонт разное оборудование или пульт пролюбят или пульт нонейм ..
вопрос...
сделал приблуду на Ардуино нано , IR приемник и передатчик, все данные выводит в монитор (реально ком порт)

как прикрутить эту железяку к фоксу..??
например
выбираем пункт...записать коды в базу..
или
определить пульт...
нужен совет...
может кто делал гуй на фоксе к ардуине??
Ratings: 0 negative/0 positive
Re: Arduino и Фокс
AndyNigmatec

Сообщений: 1574
Откуда: Волгоград
Дата регистрации: 28.06.2015
Доброго!

Тоже хотел бы что-нить такое, но сам не сделаю ... я так понимаю нужно сначала написать х32-драйвер обмена с com-портом, а потом уже через него можно хоть из фокса, хоть из чего обращаться
Ratings: 0 negative/0 positive
Re: Arduino и Фокс
Vedmak

Сообщений: 5973
Откуда: CiTY
Дата регистрации: 30.10.2003
С внешини девайсами, на программном уровне, общался с разными.
Есть описание протокола от разработчика устройства? Мне очень интересно.

Замки открывать/закрывать на VFP/PHP давно не интересно. Лампочками и прочими устройствами программно управлять по TCP\IP удается. (С) Ранее была моя самореклама!


------------------
Говорить стоит лишь для тех, кто слушает.




Исправлено 2 раз(а). Последнее : Vedmak, 22.03.24 22:40
Ratings: 0 negative/0 positive
Re: Arduino и Фокс
AndyNigmatec

Сообщений: 1574
Откуда: Волгоград
Дата регистрации: 28.06.2015
Vedmak
Есть описание протокола от разработчика устройства? Мне очень интересно.

про протокол ничего не скажу, но с ардуинками тупо по com-порту общаюсь ... только из фокса не знаю как (((



т.е. атмега (ардуинко то биш) может принимать-передавать в компорт ... ну что в прошивке напишешь - то и будет делать)))



Исправлено 1 раз(а). Последнее : AndyNigmatec, 22.03.24 23:59
Ratings: 0 negative/0 positive
Re: Arduino и Фокс
_vit

Сообщений: 5176
Дата регистрации: 29.07.2002
AndyNigmatec
с ардуинками тупо по com-порту общаюсь ... только из фокса не знаю как (((

через MSComm control

CommPort = CREATEOBJECT('MSCOMMLib.MSComm')
ComPort.CommPort = <port nr>
ComPort.Settings = "9600,N,8,1"
ComPort.PortOpen = .T.
ComPort.Output = "Hello!" && send data
ReceivedVal = ComPort.Input && receive data



Исправлено 2 раз(а). Последнее : _vit, 23.03.24 00:40
Ratings: 0 negative/0 positive
Re: Arduino и Фокс
AndyNigmatec

Сообщений: 1574
Откуда: Волгоград
Дата регистрации: 28.06.2015
Я так понимаю это можно и без ocx на winapi организовать?
Ratings: 0 negative/0 positive
Re: Arduino и Фокс
_vit

Сообщений: 5176
Дата регистрации: 29.07.2002
AndyNigmatec
Я так понимаю это можно и без ocx на winapi организовать?

Может быть. Не пробовал. С сишными структурами придется возится.
Ratings: 0 negative/0 positive
Re: Arduino и Фокс
Vedmak

Сообщений: 5973
Откуда: CiTY
Дата регистрации: 30.10.2003
такое себе


------------------
Говорить стоит лишь для тех, кто слушает.
Ratings: 0 negative/0 positive
Re: Arduino и Фокс
Vedmak

Сообщений: 5973
Откуда: CiTY
Дата регистрации: 30.10.2003
Vedmak
такое себе

DEFINE CLASS FrameClass as Custom
SIZE = 64
PROCEDURE Init
LOCAL lcByte, i
FOR i = 0 TO 63
lcByte = "byte"+TRANSFORM(i)
This.AddProperty( lcByte, 0 )
ENDFOR
This.Clear()
ENDPROC
PROCEDURE Clear
LOCAL lcByte, i
This.byte0 = 0x19
FOR i = 1 TO This.Size-1
lcByte = "byte"+TRANSFORM(i)
This. &lcByte = 0x00
ENDFOR
ENDPROC
FUNCTION SerialToFrame
LPARAMETERS lnSerial
LOCAL hxSerial
hxSerial = dec2hex( lnSerial, 8 )
This.Byte4 = EVALUATE( "0x"+SUBSTR( hxSerial, 7, 2 ) )
This.Byte5 = EVALUATE( "0x"+SUBSTR( hxSerial, 5, 2 ) )
This.Byte6 = EVALUATE( "0x"+SUBSTR( hxSerial, 3, 2 ) )
This.Byte7 = EVALUATE( "0x"+SUBSTR( hxSerial, 1, 2 ) )
ENDFUNC
FUNCTION PrepareSearch
This.Clear()
This.byte1 = 0x94
ENDFUNC
FUNCTION PrepareLastReaded
LPARAMETERS lnSerial
This.Clear()
This.byte1 = 0xB4
This.SerialToFrame( lnSerial )
ENDFUNC
FUNCTION PrepareReadRecord
LPARAMETERS lnSerial, lnIndex
This.Clear()
This.byte1 = 0xB0
This.SerialToFrame( lnSerial )
LOCAL hxIndex
hxIndex = dec2hex( lnIndex, 8 )
This.Byte8 = EVALUATE( "0x"+SUBSTR( hxIndex , 7, 2 ) )
This.Byte9 = EVALUATE( "0x"+SUBSTR( hxIndex , 5, 2 ) )
This.Byte10 = EVALUATE( "0x"+SUBSTR( hxIndex , 3, 2 ) )
This.Byte11 = EVALUATE( "0x"+SUBSTR( hxIndex , 1, 2 ) )
ENDFUNC
FUNCTION PrepareNewReaded
LPARAMETERS lnSerial, lnIndex
This.Clear()
This.byte1 = 0xB2
This.SerialToFrame( lnSerial )
LOCAL hxIndex
hxIndex = dec2hex( lnIndex, 8 )
This.Byte8 = EVALUATE( "0x"+SUBSTR( hxIndex , 7, 2 ) )
This.Byte9 = EVALUATE( "0x"+SUBSTR( hxIndex , 5, 2 ) )
This.Byte10 = EVALUATE( "0x"+SUBSTR( hxIndex , 3, 2 ) )
This.Byte11 = EVALUATE( "0x"+SUBSTR( hxIndex , 1, 2 ) )
This.Byte12 = 0x55
This.Byte13 = 0xAA
This.Byte14 = 0xAA
This.Byte15 = 0x55
ENDFUNC
FUNCTION PrepareSetTime
LPARAMETERS lnSerial, ltTime
This.Clear()
This.byte1 = 0x30
This.SerialToFrame( lnSerial )
This.Byte8 = EVALUATE( "0x20" )
This.Byte9 = EVALUATE( "0x"+PADL( trans( YEAR(ltTime)-2000 ), 2,'0') )
This.Byte10 = EVALUATE( "0x"+PADL( trans( MONTH(ltTime) ), 2,'0') )
This.Byte11 = EVALUATE( "0x"+PADL( trans( DAY(ltTime) ), 2,'0') )
This.Byte12 = EVALUATE( "0x"+PADL( trans( HOUR(ltTime) ), 2,'0') )
This.Byte13 = EVALUATE( "0x"+PADL( trans( MINUTE(ltTime) ), 2,'0') )
This.Byte14 = EVALUATE( "0x"+PADL( trans( SEC(ltTime) ), 2,'0') )
ENDFUNC
FUNCTION PerpareLimitClear
LPARAMETERS lnSerial
This.Clear()
This.byte1 = 0x54
This.SerialToFrame( lnSerial )
This.Byte8 = 0x55
This.Byte9 = 0xAA
This.Byte10 = 0xAA
This.Byte11 = 0x55
ENDFUNC
FUNCTION PerpareLimitUpload
LPARAMETERS lnSerial, lcCard
This.Clear()
This.byte1 = 0x50
This.SerialToFrame( lnSerial )
lcCard = dec2hex( INT( VAL( lcCard ) ), 8 )
*goLog.Write( "0xCard: "+lcCard )
This.Byte8 = EVALUATE( "0x"+substr( lcCard, 7, 2) )
This.Byte9 = EVALUATE( "0x"+substr( lcCard, 5, 2) )
This.Byte10 = EVALUATE( "0x"+substr( lcCard, 3, 2) )
This.Byte11 = EVALUATE( "0x"+substr( lcCard, 1, 2) )
This.Byte12 = 0x20
This.Byte13 = 0x10
This.Byte14 = 0x01
This.Byte15 = 0x01
This.Byte16 = 0x20
This.Byte17 = 0x99
This.Byte18 = 0x12
This.Byte19 = 0x31
This.Byte20 = 0x01
This.Byte21 = 0x01
This.Byte22 = 0x01
This.Byte23 = 0x01
ENDFUNC
FUNCTION Encode
LOCAL lcByte, i, lcStr
lcStr = ""
FOR i = 0 TO This.Size-1
lcByte = "byte"+TRANSFORM(i)
lcStr = lcStr + CHR( This. &lcByte )
ENDFOR
RETURN lcStr
ENDFUNC
FUNCTION Decode
LPARAMETERS lcFrame
LOCAL lcByte, i, lcStr
FOR i = 1 TO This.Size
lcByte = "byte"+TRANSFORM(i-1)
This.&lcByte = dec2hex( ASC( SUBSTR(lcFrame,i,1) ), 2 )
ENDFOR
ENDFUNC
function FrameToResult
RETURN hex2dec( This.Byte8 ) = 1
ENDFUNC
FUNCTION FrameToStr
LOCAL lcByte, i, lcStr
lcStr = ""
FOR i = 1 TO This.Size-1
lcByte = "byte"+TRANSFORM(i-1)
lcStr = IIF(EMPTY(lcStr),"",lcStr+" ") + dec2hex( This.&lcByte, 2 )
ENDFOR
RETURN lcStr
ENDFUNC
FUNCTION FrameToSerial
return hex2dec( This.Byte7+This.Byte6+This.Byte5+This.Byte4 )
ENDFUNC
FUNCTION FrameToRecordIndex
return hex2dec( This.Byte11+This.Byte10+This.Byte9+This.Byte8 )
ENDFUNC
FUNCTION FrameToRecord
PARAMETERS ltTime, lnDoor, lcCard, lnPass, lnDirect
lnPass = hex2dec( This.Byte13 )
lnDoor = hex2dec( This.Byte14 )
lnDirect = hex2dec( This.Byte15 )
lnCard = hex2dec( This.Byte19+This.Byte18+This.Byte17+This.Byte16 )
lcCard = PADL( trans( lnCard ), 8, "0" )
LOCAL lnYear, lnMonth, lnDay, lnHour, lnMin, lnSec
lnYear = VAL( This.Byte20+This.Byte21 )
lnMonth = VAL( This.Byte22 )
lnDay = VAL( This.Byte23 )
lnHour = VAL( This.Byte24 )
lnMin = VAL( This.Byte25 )
lnSec = VAL( This.Byte26 )
ltTime = DATETIME( lnYear, lnMonth, lnDay, lnHour, lnMin, lnSec )
ENDFUNC
ENDDEFINE


------------------
Говорить стоит лишь для тех, кто слушает.
Ratings: 0 negative/0 positive
Re: Arduino и Фокс
Vedmak

Сообщений: 5973
Откуда: CiTY
Дата регистрации: 30.10.2003
текст


------------------
Говорить стоит лишь для тех, кто слушает.
Ratings: 0 negative/0 positive
Re: Arduino и Фокс
Vedmak

Сообщений: 5973
Откуда: CiTY
Дата регистрации: 30.10.2003
Vedmak
текст


------------------
Говорить стоит лишь для тех, кто слушает.
Ratings: 0 negative/0 positive
Re: Arduino и Фокс
Vedmak

Сообщений: 5973
Откуда: CiTY
Дата регистрации: 30.10.2003
Vedmak
Vedmak
такое себе

DEFINE CLASS FrameClass as Custom
SIZE = 64
PROCEDURE Init
LOCAL lcByte, i
FOR i = 0 TO 63
lcByte = "byte"+TRANSFORM(i)
This.AddProperty( lcByte, 0 )
ENDFOR
This.Clear()
ENDPROC
PROCEDURE Clear
LOCAL lcByte, i
This.byte0 = 0x19
FOR i = 1 TO This.Size-1
lcByte = "byte"+TRANSFORM(i)
This. &lcByte = 0x00
ENDFOR
ENDPROC
FUNCTION SerialToFrame
LPARAMETERS lnSerial
LOCAL hxSerial
hxSerial = dec2hex( lnSerial, 8 )
This.Byte4 = EVALUATE( "0x"+SUBSTR( hxSerial, 7, 2 ) )
This.Byte5 = EVALUATE( "0x"+SUBSTR( hxSerial, 5, 2 ) )
This.Byte6 = EVALUATE( "0x"+SUBSTR( hxSerial, 3, 2 ) )
This.Byte7 = EVALUATE( "0x"+SUBSTR( hxSerial, 1, 2 ) )
ENDFUNC
FUNCTION PrepareSearch
This.Clear()
This.byte1 = 0x94
ENDFUNC
FUNCTION PrepareLastReaded
LPARAMETERS lnSerial
This.Clear()
This.byte1 = 0xB4
This.SerialToFrame( lnSerial )
ENDFUNC
FUNCTION PrepareReadRecord
LPARAMETERS lnSerial, lnIndex
This.Clear()
This.byte1 = 0xB0
This.SerialToFrame( lnSerial )
LOCAL hxIndex
hxIndex = dec2hex( lnIndex, 8 )
This.Byte8 = EVALUATE( "0x"+SUBSTR( hxIndex , 7, 2 ) )
This.Byte9 = EVALUATE( "0x"+SUBSTR( hxIndex , 5, 2 ) )
This.Byte10 = EVALUATE( "0x"+SUBSTR( hxIndex , 3, 2 ) )
This.Byte11 = EVALUATE( "0x"+SUBSTR( hxIndex , 1, 2 ) )
ENDFUNC
FUNCTION PrepareNewReaded
LPARAMETERS lnSerial, lnIndex
This.Clear()
This.byte1 = 0xB2
This.SerialToFrame( lnSerial )
LOCAL hxIndex
hxIndex = dec2hex( lnIndex, 8 )
This.Byte8 = EVALUATE( "0x"+SUBSTR( hxIndex , 7, 2 ) )
This.Byte9 = EVALUATE( "0x"+SUBSTR( hxIndex , 5, 2 ) )
This.Byte10 = EVALUATE( "0x"+SUBSTR( hxIndex , 3, 2 ) )
This.Byte11 = EVALUATE( "0x"+SUBSTR( hxIndex , 1, 2 ) )
This.Byte12 = 0x55
This.Byte13 = 0xAA
This.Byte14 = 0xAA
This.Byte15 = 0x55
ENDFUNC
FUNCTION PrepareSetTime
LPARAMETERS lnSerial, ltTime
This.Clear()
This.byte1 = 0x30
This.SerialToFrame( lnSerial )
This.Byte8 = EVALUATE( "0x20" )
This.Byte9 = EVALUATE( "0x"+PADL( trans( YEAR(ltTime)-2000 ), 2,'0') )
This.Byte10 = EVALUATE( "0x"+PADL( trans( MONTH(ltTime) ), 2,'0') )
This.Byte11 = EVALUATE( "0x"+PADL( trans( DAY(ltTime) ), 2,'0') )
This.Byte12 = EVALUATE( "0x"+PADL( trans( HOUR(ltTime) ), 2,'0') )
This.Byte13 = EVALUATE( "0x"+PADL( trans( MINUTE(ltTime) ), 2,'0') )
This.Byte14 = EVALUATE( "0x"+PADL( trans( SEC(ltTime) ), 2,'0') )
ENDFUNC
FUNCTION PerpareLimitClear
LPARAMETERS lnSerial
This.Clear()
This.byte1 = 0x54
This.SerialToFrame( lnSerial )
This.Byte8 = 0x55
This.Byte9 = 0xAA
This.Byte10 = 0xAA
This.Byte11 = 0x55
ENDFUNC
FUNCTION PerpareLimitUpload
LPARAMETERS lnSerial, lcCard
This.Clear()
This.byte1 = 0x50
This.SerialToFrame( lnSerial )
lcCard = dec2hex( INT( VAL( lcCard ) ), 8 )
*goLog.Write( "0xCard: "+lcCard )
This.Byte8 = EVALUATE( "0x"+substr( lcCard, 7, 2) )
This.Byte9 = EVALUATE( "0x"+substr( lcCard, 5, 2) )
This.Byte10 = EVALUATE( "0x"+substr( lcCard, 3, 2) )
This.Byte11 = EVALUATE( "0x"+substr( lcCard, 1, 2) )
This.Byte12 = 0x20
This.Byte13 = 0x10
This.Byte14 = 0x01
This.Byte15 = 0x01
This.Byte16 = 0x20
This.Byte17 = 0x99
This.Byte18 = 0x12
This.Byte19 = 0x31
This.Byte20 = 0x01
This.Byte21 = 0x01
This.Byte22 = 0x01
This.Byte23 = 0x01
ENDFUNC
FUNCTION Encode
LOCAL lcByte, i, lcStr
lcStr = ""
FOR i = 0 TO This.Size-1
lcByte = "byte"+TRANSFORM(i)
lcStr = lcStr + CHR( This. &lcByte )
ENDFOR
RETURN lcStr
ENDFUNC
FUNCTION Decode
LPARAMETERS lcFrame
LOCAL lcByte, i, lcStr
FOR i = 1 TO This.Size
lcByte = "byte"+TRANSFORM(i-1)
This.&lcByte = dec2hex( ASC( SUBSTR(lcFrame,i,1) ), 2 )
ENDFOR
ENDFUNC
function FrameToResult
RETURN hex2dec( This.Byte8 ) = 1
ENDFUNC
FUNCTION FrameToStr
LOCAL lcByte, i, lcStr
lcStr = ""
FOR i = 1 TO This.Size-1
lcByte = "byte"+TRANSFORM(i-1)
lcStr = IIF(EMPTY(lcStr),"",lcStr+" ") + dec2hex( This.&lcByte, 2 )
ENDFOR
RETURN lcStr
ENDFUNC
FUNCTION FrameToSerial
return hex2dec( This.Byte7+This.Byte6+This.Byte5+This.Byte4 )
ENDFUNC
FUNCTION FrameToRecordIndex
return hex2dec( This.Byte11+This.Byte10+This.Byte9+This.Byte8 )
ENDFUNC
FUNCTION FrameToRecord
PARAMETERS ltTime, lnDoor, lcCard, lnPass, lnDirect
lnPass = hex2dec( This.Byte13 )
lnDoor = hex2dec( This.Byte14 )
lnDirect = hex2dec( This.Byte15 )
lnCard = hex2dec( This.Byte19+This.Byte18+This.Byte17+This.Byte16 )
lcCard = PADL( trans( lnCard ), 8, "0" )
LOCAL lnYear, lnMonth, lnDay, lnHour, lnMin, lnSec
lnYear = VAL( This.Byte20+This.Byte21 )
lnMonth = VAL( This.Byte22 )
lnDay = VAL( This.Byte23 )
lnHour = VAL( This.Byte24 )
lnMin = VAL( This.Byte25 )
lnSec = VAL( This.Byte26 )
ltTime = DATETIME( lnYear, lnMonth, lnDay, lnHour, lnMin, lnSec )
ENDFUNC
ENDDEFINE

слова про коммуникацию нужны или вам уже рассказали?


------------------
Говорить стоит лишь для тех, кто слушает.
Ratings: 0 negative/0 positive
Re: Arduino и Фокс
AndyNigmatec

Сообщений: 1574
Откуда: Волгоград
Дата регистрации: 28.06.2015
Пытаюсь понять что ваш класс делает ... а можно пример использования?
Ratings: 0 negative/0 positive
Re: Arduino и Фокс
AndyNigmatec

Сообщений: 1574
Откуда: Волгоград
Дата регистрации: 28.06.2015
попробовал MSCOMMLib.MSComm ... что-то не соображу, как отловить событие OnComm() у созданного объекта

Ratings: 0 negative/0 positive
Re: Arduino и Фокс
Vedmak

Сообщений: 5973
Откуда: CiTY
Дата регистрации: 30.10.2003
Извини, продолжу..


------------------
Говорить стоит лишь для тех, кто слушает.




Исправлено 1 раз(а). Последнее : Vedmak, 23.03.24 17:23
Ratings: 0 negative/0 positive
Re: Arduino и Фокс
Vedmak

Сообщений: 5973
Откуда: CiTY
Дата регистрации: 30.10.2003
Извини, продолжу..


------------------
Говорить стоит лишь для тех, кто слушает.
Ratings: 0 negative/0 positive
Re: Arduino и Фокс
Vedmak

Сообщений: 5973
Откуда: CiTY
Дата регистрации: 30.10.2003
Кустарный старт приложения

По факту это коммуникация с контроллером дверей на объекте


------------------
Говорить стоит лишь для тех, кто слушает.




Исправлено 1 раз(а). Последнее : Vedmak, 23.03.24 17:32
Ratings: 0 negative/0 positive
Re: Arduino и Фокс
_vit

Сообщений: 5176
Дата регистрации: 29.07.2002
AndyNigmatec
попробовал MSCOMMLib.MSComm ... что-то не соображу, как отловить событие OnComm() у созданного объекта

Надо допилить.

Set Deleted On
Clear
Push Key
On Key Label ESC stop()
On Key Label F2 test()
lOpen=0
oComm = Createobject('MSCOMMLib.MSComm')
oEvents = Createobject('OnCommHandler')
oEvents.oComm = oComm
With oComm
.CommPort = 5
.Settings = "115200,N,8,1"
.Rthreshold = 1
.DTREnable = .T.
.RTSEnable = .T.
?.InputMode
Try
.PortOpen = .T.
lOpen=1
Catch
Aerror(a1)
?a1[2]
Endtry
* ?.DTREnable
* ?.RTSEnable
* ?.CommEvent
Endwith
Eventhandler(oComm, oEvents)
Read Events
If lOpen=1
oComm.PortOpen = .F.
Endif
Release oComm
Pop Key All
******************
Function stop()
Clear Events
Return
Function test()
?"test()"
oComm.Output = "k"+Chr(10)+Chr(13)
Return
******************************************
Define Class OnCommHandler As Session
Implements DMSCommEvents In "MSCOMMLib.MSComm"
oComm = Null
Procedure DMSCommEvents_OnComm
? oComm.CommEvent
? oComm.Input
Endproc
Enddefine



Исправлено 7 раз(а). Последнее : _vit, 23.03.24 18:35
Ratings: 0 negative/0 positive
Re: Arduino и Фокс
alex;

Сообщений: 2857
Откуда: Москва
Дата регистрации: 23.11.2004
Цитата:
oComm.Output = "k"+Chr(10)+Chr(13)

может Chr(13)+Chr(10)?
x0D0A вроде перевод строки.



Исправлено 1 раз(а). Последнее : alex;, 23.03.24 18:47
Ratings: 0 negative/0 positive
Re: Arduino и Фокс
AndyNigmatec

Сообщений: 1574
Откуда: Волгоград
Дата регистрации: 28.06.2015
_vit
Надо допилить.

Огромнейшее спасибо, так работает!

сам бы не допер, пытался с помощью BINDEVENT привязаться, но никаких событий у oComm не находидил ...
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 41 (Гостей: 41)

© 2000-2024 Fox Club 
Яндекс.Метрика