Diskuze: komunikace mezi c# a arduino
Člen
Zobrazeno 15 zpráv z 15.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
Ahoj,
pokud chceš přenést číslo z PC (C#) do Arduina, tak bys měl v Arduinu z toho sériového portu číst, ne do něj zapisovat (Serial.Write).
Nejsem si jistý, zda vůbec Serial.Write() má variantu bez parametrů.
Jinak co se týče čtení ze sériového portu, pravděpodobně budeš muset uvést počet znaků, které chceš načíst. Buď tedy používej nějaký znak jako ukončovač odesílaného řetězce, nebo zkus více prostudovat dokumentaci ohledně sériového portu.
Jednoduše - potřebuješ tim tlačit stovky čísel za vteřinu?
Asi ne. Jednoduše ŽAVES, v C# serial.println(cislo.ToString()), v
Arduinu to pak přečti jako string a udělej z toho int (myslím int vstup
= Serial.readString().ToInt(); ), není co řešit.
Tak už to skoro funguje (dioda se rozsvítí a tak po 2 vteřinách zhasne)
a okno s tlačítkem se zasekne ale nehodí to žádnou vyjímku.
c#
SerialPort sp = new SerialPort("COM4",9600);
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
sp.Open();
// string s = textBox1.Text;
int a = 17;
sp.Write(a.ToString());
string zprava = sp.ReadLine();
label1.Text = zprava;
sp.Close();
}
arduino:
int led=13;
void setup() {
Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
pinMode(led,INPUT);
}
void loop() {
int vstup = Serial.readString().toInt();
if(vstup>15)
{
digitalWrite(led,HIGH);
}
else
{
digitalWrite(led,LOW);
}
}
pokud se nepletu, tak ta vyjímka je v řádku sp.Close();. Můžeš to zkusit odkrokovat přes breakpointy, ale na 99% tu vyjímku nedostaneš. Proč? Ty přečteš ze sériovýho portu a hned ho chceš uzavřít, to na to jdeš moc rychle, tam stále běží to naslouchání. Mělo by stačit před sp.Close(); přidat ještě Thread.Sleep(300);, když to nepomůže, tak dej víc než 300ms. Každopádně mi nepřijde dobrý nápad zavírat port po každém přečtení, já bych zavření dělal až při ukončení aplikace (myslím FormClosed event).
ještě k tomu zhasínání ledky - to je asi špatně, co? 
podle mě za to může to, že z portu čteš i ikdyž tam nic neni, ten řádek
pouprav na
if(Serial.available()) //pokud jsou data k přečtení
int vstup = Serial.readString().toInt();
pinMode(led,INPUT);
Ten pin bys měl asi nastavit jako výstupní, když tam zapisuješ, ne (OUTPUT)?
Krom toho pozor na to, že rutina loop() se volá periodicky, což znamená, že se Arduino bude pokoušet číst ze sériového portu asi vícekrát, než stihneš tisknout tlačítko. V dokumentaci k Serial.readString() se píše, že ta funkce může skončit timeoutem (a tedy nenačte žádná data). Serial.available to ale bude řešit, to je pravda.
Ano, měl bysis zjistit, jaké kódování je použito u toho řetězce v C#. U Arduina bych to tipoval na ANSI.
U toho C# řetězce by ani nevadilo, kdyby byl v UTF8 (pro "číselné" hodnoty by to byšlo stejně jako ANSI), ale skoro bych řekl, že tam bude Unicode.
Zdravím všechny. Blbnu si s vyměňováním dat mezi arduinem a aplikačkou
napsanou v C#. Pokud použiju desku s spřevodníkem (třeba UNO), je vše ok.
Nastavím název portu, baudrate a otevřu port. Všechno funguje podle
očekávání. Pokud tohle ale udělám s deskou bez převodníku (arduino
Micro, Leonardo, ...), port se sice z pohledu aplikace na PC jeví jako
otevřený, ale ardujino nekomunikuje, nereaguje na příchozí data(i když RX
bliká jako zběsilý) a nic neposílá.. Neví někdo, jak ho donutit povídat.
Serial monitor to dokáže bez problému, ale moje appka ne. Díky za nápady

Zdravim s Arduinem blbnu uz mesic. A kodovani ma klasickou ASCI tablukou takze cisla zacinaj na hodnote 48 coz je 0. Na programovani komunikace pouzivam Proccesing.
Zobrazeno 15 zpráv z 15.
