Forum

Forum

Loxone virtuální UD...
 
Notifications
Clear all

Loxone virtuální UDP vstup z Arduina

9 Posts
4 Users
0 Likes
1,013 Views
(@etniesdc)
New Member
Joined: 4 years ago
Posts: 4
Topic starter  

Zdravím,

prosím Vás potřeboval bych pomoct s úpravou kódu z Arduina na zprovoznění UDP vstupu pro Loxone. Při vysoké úrovni na pinu 7 odeslat UDP zprávu DI1ON.

Takto je to funkční, ale arduino odešle několik packetů a vstup problikne alespoň 3x.

Dále by nebyl funkční dlouhý stisk ani vícenásobný klik.

Jak řešíte tento problém?

Děkuji

 

#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>


EthernetUDP Udp;
byte mac[] = {0x90, 0xA2, 0xDA, 0x0D, 0x5C, 0x18};
IPAddress ip(192,168,116,80);
unsigned int localport = 44444;


IPAddress remoteIP(192,168,116,100);
unsigned int remotePort = 44444;

void setup(){
int pinMode = (7, INPUT);


Serial.begin(9600);
Serial.println("****************");
Serial.println("Puerto Serial OK");
Ethernet.begin(mac,ip);
Serial.print("IP : ");
Serial.println(Ethernet.localIP());
Udp.begin(localport);
}

void loop(){

if (digitalRead(7) == HIGH) {

Udp.beginPacket(remoteIP, remotePort);
Udp.println("DI1ON");
delay(20);
Udp.endPacket();

}
Serial.println("Refresh");

}

   
Quote
 pobi
(@pobi)
Active Member
Joined: 7 years ago
Posts: 5
 

Ahoj,

mě se to jeví jako problém "zakmitání" (bounce), kdy při stisknutí tlačítka nedojde k jednorázovému sepnutí kontaktu, ale k několikerému sepnutí a rozepnutí kontaktu (mechanické kmitání). Výsledek je takový, jako bychom stiskli tlačítko několikrát rychle za sebou (celý děj trvá až několik ms). Jev jako takový je vysvětlený např. zde: https://robotika.vosrk.cz/guide/arduino/lesson06/cs

Dá se řešit buď elektronicky přidáním kondenzátoru, nebo elegantně např. pomocí softwarové knihovny "Bounce": https://github.com/thomasfredericks/Bounce2


   
ReplyQuote
(@etniesdc)
New Member
Joined: 4 years ago
Posts: 4
Topic starter  

Zákmity jsem myslel taky že by to mohly být, ale ono to odešle strašně mockrát. V UDP monitoru to jede asi 4 sekundy a pořád to posílá tu informaci "DI1ON" (asi 100x)... protože to prád monitoruje ten pin 7

 

This post was modified 4 years ago by EtniesDC

   
ReplyQuote
(@smotek7)
Member
Joined: 7 years ago
Posts: 1886
 

No moze to byt aj zakmitmi, ale ved pozri co je v slucke loop.

if (digitalRead(7) == HIGH)

Co znalena ze ked je high tak posli.
Vies kolko krat dokaze ta slucka prebehnut kym stalcis kratko tlacitko.
No asi 100x a MS to este tie 4s spravovava.

Musit si tam dat nejaky priznak, ze je stlacene a vtedy uz neposielat.
Testovat ci uz sa tlacitko pustilo a potom priznak resetnut.
V tom reset si kludne posli ten isty prikaz ale OFF a vies kedy sa stlacilo a kedy pustilo.


   
ReplyQuote
(@smotek7)
Member
Joined: 7 years ago
Posts: 1886

   
ReplyQuote
msk
 msk
(@dusanmsk)
Member
Joined: 7 years ago
Posts: 1870
 

Alebo aj s debounce (velkost XXX treba odskusat):

 

#define XXX 10
int cnt = 0;

loop {
bool status = (digitalRead(7) == HIGH);
cnt += status ? 1 : -1;

if(cnt == XXX && status) {
// todo send udp 'ON'
}

else if(cnt == 0 && !status) {
// todo send udp 'OFF'
}

if(cnt > 2*XXX) { cnt = 2*XXX; }
if(cnt < -2*XXX) { cnt = -2*XXX; }

}

 


   
ReplyQuote
(@etniesdc)
New Member
Joined: 4 years ago
Posts: 4
Topic starter  

Jo, to je skoro ono, ale ON a OFF se mi vrací zdvojeně nebo ztrojeně

 

#define XXX 10
int cnt = 0;


void setup() {
int pinMode = (3, INPUT);
Serial.begin(9600);
Serial.println("****************");
}




void loop() {

cnt += (digitalRead(3) == LOW) ? 1 : -1;
if(cnt == XXX) {
Serial.println("ON");

}
else if(cnt == 0) {
Serial.println("OFF");
}
if(cnt > 2*XXX) { cnt = 2*XXX; }
if(cnt < -2*XXX) { cnt = -2*XXX; }
}

 

Serial monitor:

OFF
OFF
ON
ON
OFF
OFF
ON
ON
OFF
OFF
ON
ON
OFF
OFF
ON
ON
OFF

This post was modified 4 years ago by EtniesDC

   
ReplyQuote
msk
 msk
(@dusanmsk)
Member
Joined: 7 years ago
Posts: 1870
 

@etniesdc Jasne, pretoze som pica. Upravim povodny prispevok, snad to uz bude ono.


   
ReplyQuote
(@etniesdc)
New Member
Joined: 4 years ago
Posts: 4
Topic starter  

@dusanmsk Yess, to je přeně ono. Moc díky. A ještě kdybych chtěl když tlačítko se bude držet, aby to posílalo ON třeba po 5s, bylo by to těžký?


   
ReplyQuote
Share: