Er zit een truc in de Arduino. Op het moment dat de PC er klaar voor is, stuurt hij een query-command naar de Arduino. Deze antwoord met zijn huidige state (3 counters + axis selection + scale selection + 7 knoppen = totaal 15 bytes). Als je een knop indrukt wordt dit net zolang opgeslagen totdat LinuxCNC weer de state opvraagt. Op dit moment is de update ratio ongeveer 20 keer per seconde. Dit ga ik nog oprekken naar 100 keer per seconde, wat sneller genoeg is.DaBit schreef: ↑15 jan 2021 21:23 er een extern USB-chippie in te schakelen, maar er een USB HID device van maken ipv CDC/ACM is veel mooier. HID gebruikt interrupt-transfers en daarmee heb je garanties kwa overdracht; zet de latencytimer op 1 en je kunt strak elke milliseconde 64 bytes aan data transporteren. Ik heb het nog nooit gezien dat dat niet lukt.
Met CDC kan het voorkomen dat de PC het even druk heeft en wat data opspaart of wegknikkert; je hebt exact 0 garantie op de latency. En dat heb ik wel regelmatig gezien.
Mocht je het echt willen: je kunt van de Arduino ook een HID maken, maar ik heb nog niet een idee hoe ik daarvoor een component kan maken.
De code komt op Github; de toolerator staat er al op. Zodra dit goed getest is, dan zet ik deze er natuurlijk ook op.