Forum
Taky se mi to stávalo. Vypadá to na nevyprázdněný buffer.
V kódu máš toto:
// read the packet into packetBufffer
Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
// for debug only
// write packetBuffer to serial
Serial.print("Packet Content: ");
Serial.println(packetBuffer);
pak bys měl buffer vyprázdnit. Jinak se ti stane, že buffer přepisuješ následujícím UDP příkazem. A pokud je následující příkaz kratší, tak poslední znak(y) zůstane nepřepsaný. Proto ti tam zůstalo viset to "F" z předchozího příkazu. Já jsem někde dohledal na vyprazdňování toto. Prostě buffer přepíšeš nulama. Na čtení dalšího UDP příkazu budeš mít nachystaný prázný buffer:
for(int i=0;i<UDP_TX_PACKET_MAX_SIZE;i++) packetBuffer[i] = 0;
Ještě jsem se chtěl vrátit k tomu problému s napájením LAN shieldu.
Pořád se mi to nepodařilo vyřešit. Arduino Nano napájené 12V přes Vin. Pokud odpojím a připojím napájení, tak mi LAN shield nenaběhne. Zkoušel jsem to vyřešit tímhle:
Ethernet.begin(mac, ip);
while (Ethernet.hardwareStatus() == EthernetNoHardware) {
dbgln("No HW.");
delay(1000);
Ethernet.begin(mac, ip);
}
Ale očividně to nepomohlo. Ty jsi ty problémy s LAN shieldem vyřešil?
Dik , skusim...
ten LAN som este neporiesil - zatial len rucny restart ked to nenabehne, lebo ak dam soft reboot pri boote , tak som vlastne v nekonecnom loope a to nechceme
Tak problém s iniciací ethernet shieldu (snad) vyřešen. Co jsem vyčetl, tak příčina je v tom, že ethernet shield se nastartuje rychleji než samotné Arduino a to mu proto nestihne poslat příkaz reset, který je na iniciaci ethernet shieldu potřeba (nebo tak nějak, nezkoumal jsem to do hloubky). Někdo to řeší kondenzátorem mezi RST a GND na shieldu. Já jsme to nakonec vyřešil tímhle kódem, který předchází samotnému Ethernet.begin. Očividně zpoždění Ethernet.begin nestačilo, bylo potřeba udělat hard reset přes pin:
int ethResetPin = {7}; // Ethernet shield reset pin (optional)
...
void setup() {
pinMode(ethResetPin, OUTPUT);
digitalWrite(ethResetPin, LOW); // tímhle se zresetuje ethernet shield
delay(500);
digitalWrite(ethResetPin, HIGH);
delay(500);
pinMode(ethResetPin, INPUT);
mac[5] = (0xED + boardAddress);
Ethernet.begin(mac, ip);
...
}
Odkud se vzal pin 7? Používám Arduino Nano s ethernet shieldem (W5500) pro Nano. Tenhle shield se dá resetovat přes pin 7. U shieldu pro Uno bude tohle resetování asi složitější (viz https://arduino.cz/problemy-se-startem-ethernet-shieldu-w5100-reseni/ nebo http://www.dccmm.cz/index.php/dcc-modely/jak-na-ovladani-dcc-kolejiste-tabletem-za-pomoci-arduina/2 )
dik za tip...siel som podla http://www.dccmm.cz/index.php/dcc-modely/jak-na-ovladani-dcc-kolejiste-tabletem-za-pomoci-arduina/2
Ale potom som si uvedomil ze on to tam prepaja este s nejakou jeho doskou, takze mi to nejde...
Budem muset objednat ten kondenzator, takze zase par tyzdnov cakacka...;)
Ty české weby jsou asi trochu matoucí. Tady jsou obě varianty na úpravu shieldu pro Uno. Pokud se rozhodneš pro druhou variantu, měl by ti fungovat na reset shieldu ten kód, co jsem sem dával.
Nasiel som si cas aby som sa s tym hral, nahodil som novy kod s reset pinom a nabieha ok.
Tak som na skusku dal stary bez pinu a nabieha tiez, jak naschval to neviem zreplikovat...
inac som prehodil "ethernet.begin" na koniec "void setup" a startovalo to aj bez zapojeneho kabla na resetpin. Teda teoreticky tie "pinmode" a "digitalwrite" mozno dostatocne oneskoria nabeh Arduina a tym padom to nemrzne.
Skusim teda "ETHRESET" cast odkomentovat a uvidime ci sa mi "zasek" niekedy znova prejavi ak hej, je mozne ze by stacilo dat delay medzi jednotlive skupiny Pinmode a digitalwrite. teda by som si nezabral PIN na reset.
moznost c.2 necham ten PIN na dialkovy restart.
update:
1. aby som to zreplikoval musim nechat vypnute par minut, potom to uz nenabieha ani ked dam delay atd ako som pisal vyssie
2. ked odkomentujem ETHRESET pin cast a zapojim kabel z ETHREST pinu na RESET, tak to restartuje dokola v loope.
update 2:
ETH Shield treba odhnut RESET PIN aby sa nespajal s Arduinom , potom sa resetne iba ETH Shield a arduino nabehne.
Takze potvrdujem funkcnost...konecne 😀
dnes mi odisiel 1-wire modul od loxone, takze som "veeelmi" nateseny.
Kym to s mini vyriesim, pripadne kupim novy, tak musim zatial cez Arduino rozbehat vsetky senzory.
Ked som prepojil kable na arduino tak nic nechytilo , skusal som teda po castiach a zda sa ze Arduino zvladne max 10 senzorov na 1x pin/zbernicu. Nieco take pisu aj na sedtronic stranke...
Moze mi to niekto potvrdit? Dik
Aha, žil jsem v představě, že Railduino používá na 1-wire dedikovaný i2c bus driver DS2482. Proto jsem z toho svého skeče vyhazoval kód týkající se 1-wire. A teď koukám, že 1-wire sběrnice je přímo připojená na pin Arduina (Railduino to má na pinu 62) a v kódu je natvrdo nastavený limit 10 senzorů.
Tak to by ten tvůj plán mohl fungovat.
V tuto chvíli má Railduino natvrdo nastavený pin 1-wire sběrnice, ale podle mě by se dal kód upravit tak, aby bylo možné dynamicky přiřadit 1-wire sběrnici (sběrnice) na jakékoliv další digitální piny. Něco jako jsem udělal s těmi DHT senzory.
Samotného by mě to zajímalo, pokud bychom to rozběhali, doplnil bych to do své "univerzální UDP brány".
ten som pozeral, len ma tam este navyse kniznice:
#include "OneWireReading.h" - tuto som nasiel priamo v Arduine
#include <TrueRandom.h> - tuto nie, iba tu https://github.com/sirleech/TrueRandomtak dufam ze je to ta spravna
--------
Tak som dal dokopy na stole 10 senzorov a ide to,
hned jak zapojim 11ty tak nenacita nic
Teda potvrdene 10ks je MAX na jednu zbernicu
U toho kodu od Sedo je random MAC,
takze mi to po restarte bude davat inu MAC/IP, lebo to mam na routri ako MAC bind.
Skor by som to chcel napasovat na svoj kod co mi kamos daval dokopy,
ale musim pockat na neho, lebo pridat tam dalsiu zbernicu je nad moc sily :/
Ahoj,
Pred sezonou som opat upravoval kod pre zahradu / sklenik (v zime sa to zase nestihlo 🙂 )
A narazil som na problem ze mi zase blbol Ethernet Shield
1. 1-2m kabel nabiehal bez problemu
2. 3-4m kabel nenabiehal resp az po 3-4min
Skusal som teda riesenie s RESET ETH PIN , ale to tiez nejako nelepsilo situaciu. Potom kable rozne, vymena Shieldu, Arduino dosky, chyby v kode atd...
Nakoniec som nasiel riesenie , problem je v tom ze cinanci pouzili nespravny rezistor a tym to blbne. Treba to upravit a doletovat 2x 47r pripadne 100r rezistor (osobne som mal len 100r doma).
Potom to nabiehalo na 1 sup, mam doma asi 7 shieldov a len jeden asi uplne najstarsi je s tym spravnym 49r9 rezistorom.
https://reedpaper.wordpress.com/2018/09/17/arduino-ethernet-w5100-how-to-fix-the-wrong-board/
https://www.youtube.com/watch?v=3n73k1HzKLo
https://www.youtube.com/watch?v=e-GuayY6ga0
Verim ze to niekomu pomoze, stravil som s tym niekolko hodin...
@killeriq no mne davnejsie blbol tento lan shield a ani som to nevyriesil.
Musim mrknut co na nom je.