Vítejte na Elektro Bastlírn?
Nuke - Elektro Bastlirna
  Vytvořit účet Hlavní · Fórum · DDump · Profil · Zprávy · Hledat na fóru · Příspěvky na provoz EB

Vlákno na téma KORONAVIRUS - nutná registrace


Nuke - Elektro Bastlirna: Diskuzní fórum

 FAQFAQ   HledatHledat   Uživatelské skupinyUživatelské skupiny   ProfilProfil   Soukromé zprávySoukromé zprávy   PřihlášeníPřihlášení 

Komunikace VS + Arduino
Jdi na stránku 1, 2  Další
 
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Miniaturní počítače (Arduino, Raspberry a další)
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
paycz



Založen: Oct 13, 2014
Příspěvky: 282

PříspěvekZaslal: so březen 11 2017, 17:02    Předmět: Komunikace VS + Arduino Citovat

Ahoj, chtěl jsem si vytvořit komunikaci mezi Visual studio a arduino, ale nevím proč se mi odeslané data neuloží do proměnné

code C sharp
kód:

SerialPort arduino = new SerialPort();
 string[] ports = SerialPort.GetPortNames();
            arduino_ports.DataSource = ports;
string port = arduino_ports.SelectedItem.ToString();
                arduino.PortName = port;
                arduino.BaudRate = 250000;
                arduino.WriteTimeout = 1000;
                arduino.Open();

 string buffer =
            (
                trackBar1.Value.ToString() +
                trackBar2.Value.ToString() +
                trackBar3.Value.ToString() +
                trackBar4.Value.ToString() +
                trackBar5.Value.ToString() +
                trackBar6.Value.ToString() +
                trackBar7.Value.ToString() +
                trackBar8.Value.ToString() +
                trackBar9.Value.ToString()

        );
            byte[] buf = System.Text.Encoding.UTF8.GetBytes(buffer);
            arduino.Write(buf,0, buf.Length);


code arduino


kód:


int recdata[10];
int bytes = 0;
 

Serial.begin(250000);
Serial.setTimeout(1000);

while(Serial.available())
{
  if (bytes < 10)
  {
    recdata[bytes]=Serial.read();
    bytes++;
  }
}

analogWrite(9,recdata[0]);
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frpr666



Založen: Dec 28, 2009
Příspěvky: 1051

PříspěvekZaslal: so březen 11 2017, 17:46    Předmět: Citovat

C sharp nevím, ale ten kód pro arduino vyhazuje chybu při překladu.
Tobě to přeložilo v pořádku ?
Zkusil bych snížit přenosovou rychlost na 19200. Nevím zda 250000 bps zvládne fyzická vrstva.
Edit 1 arduino program má většinou bloky
setup()
{}
a
loop()
{}
https://www.arduino.cc/en/Reference/HomePage
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3292

PříspěvekZaslal: so březen 11 2017, 17:51    Předmět: Citovat

Ten kod asi nebude cely, hlavne ten AnalogWrite pouze s prvni zachycenou a ulozenou hodnotou.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
paycz



Založen: Oct 13, 2014
Příspěvky: 282

PříspěvekZaslal: so březen 11 2017, 17:53    Předmět: Citovat

samozřejmě že tam mám loop z programu jsem vytáhl jen části potřebné pro komunikaci

Cowley analog write je tam pro kontrolu když jsem testoval jestli mezi sebou komunikují ale PWM se nemění takže tam je někde problém
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3292

PříspěvekZaslal: so březen 11 2017, 18:01    Předmět: Citovat

Tak to jo... jen ze by bylo lepsi nechat treba vypsat hodnotu promenne nebo bliknout LEDkou.
A co napojit nejaky terminal (treba Hercules) a zjistit, jestli je chyba na strane PC nebo v Arduinu.
Kdyz nevim kde by mohla byt chyba, prihraju do programu SoftwareSerial a hodnoty zachycene na jednom portu odesilam do druheho PC prave pres SoftwareSerial.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frpr666



Založen: Dec 28, 2009
Příspěvky: 1051

PříspěvekZaslal: so březen 11 2017, 18:36    Předmět: Citovat

potom zjednoduš program a nasdílej.
Jinak neumím dát komentář k programu, který není celý a nejde zkompilovat... Very Happy
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
paycz



Založen: Oct 13, 2014
Příspěvky: 282

PříspěvekZaslal: so březen 11 2017, 18:57    Předmět: Citovat

frpr666 napsal(a):
potom zjednoduš program a nasdílej.
Jinak neumím dát komentář k programu, který není celý a nejde zkompilovat... Very Happy


kód:
int recdata[9];
int bytes = 0;

//setup-------------------------------------------------
void setup() {

 Serial.begin(9600);
 Serial.setTimeout(1000);

}
//end-setup-----------------------------------------------

//repeat--------------------------------------------------
void loop() {
while(Serial.available())
{
  if (bytes < 9)
  {
    recdata[bytes]= Serial.read();
    bytes++;
  }
  else if (bytes < 9)
  {
    bytes = 0;
  }
  Serial.println(recdata[0]);
}



}
//end-repeat---------------------------------------------


ps. pardon zapomněl jsem upravit serial port a mazání int bytes
ještě jsem zapomněl dodat že posílám 9 čísel 0-255


Naposledy upravil paycz dne so březen 11 2017, 19:27, celkově upraveno 2 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3292

PříspěvekZaslal: so březen 11 2017, 18:59    Předmět: Citovat

Co je to za desku, ze mas SoftwareSerial na pinech 0,1 kde byva vnitrni UART?
A jeste pevne nastavene Input/Output u rx/tx jsem taky jeste nevidel...

A co nejake opakovani pri preteceni bytes nad 10?

A jeste pametova mista musi byt [10] jinak to pri bytes rovno 9 skonci mimo...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
paycz



Založen: Oct 13, 2014
Příspěvky: 282

PříspěvekZaslal: so březen 11 2017, 19:33    Předmět: Citovat

test z virtuálního com port monitoru


virtual_monitor.PNG
 Komentář:
nahoře odeslaná data, dole přijatá data

Stáhnout
 Soubor:  virtual_monitor.PNG
 Velikost:  3.16 kB
 Staženo:  147 krát

Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3292

PříspěvekZaslal: so březen 11 2017, 19:49    Předmět: Citovat

Zahada, prvni tri jsou odpredu, poslednich sest vzdy od zadu...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
paycz



Založen: Oct 13, 2014
Příspěvky: 282

PříspěvekZaslal: so březen 11 2017, 20:08    Předmět: Citovat

záhada vyřešena předchozí program posílal za sebou bez mezer což znamená že např. ze stringů 255 255 0 3 udělal byte[0] 25525503

přikládám dále funkční vypisování stringů do Array Byte a oděsílaní do arduina (třeba se bude někomu hodit)
kód:



            byte a1 = Convert.ToByte(trackBar1.Value.ToString());
            byte a2 = Convert.ToByte(trackBar2.Value.ToString());
            byte a3 = Convert.ToByte(trackBar3.Value.ToString());
            byte a4 = Convert.ToByte(trackBar6.Value.ToString());
            byte a5 = Convert.ToByte(trackBar4.Value.ToString());
            byte a6 = Convert.ToByte(trackBar5.Value.ToString());
            byte a7 = Convert.ToByte(trackBar9.Value.ToString());
            byte a8 = Convert.ToByte(trackBar8.Value.ToString());
            byte a9 = Convert.ToByte(trackBar7.Value.ToString());


            byte[] buf = new byte[9]
                {a1,a2,a3,a4,a5,a6,a7,a8,a9};


            arduino.Write(buf,0, buf.Length);
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
frpr666



Založen: Dec 28, 2009
Příspěvky: 1051

PříspěvekZaslal: so březen 11 2017, 20:22    Předmět: Citovat

Cite:
kód:

  if (bytes < 9)
  {
    recdata[bytes]= Serial.read();
    bytes++;
  }
  else if (bytes < 9)
  {
    bytes = 0;
  }

1. máš 2x za sebou test na stejnou podmínku, část za else se tedy nikdy neprovede.
2. nikde není zaručeno, že v recdata[0] bude první odvysílaný znak, protože není mezi "vysílačem" a "příjmačem" žádná synchronizace.
T.j. první "odvysílaný znak" může být na jinačí pozici např. recdata[5] atd.
Nějaký úvod k sér. vysílání a přijmu je zde:
[url] https://www.safaribooksonline.com/library/view/arduino-cookbook-2nd/9781449321185/ch04.html [/url]
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
paycz



Založen: Oct 13, 2014
Příspěvky: 282

PříspěvekZaslal: so březen 11 2017, 20:46    Předmět: Citovat

frpr666 1) jo v kódu jsou nějaké chyby protože jsem ho několikrát přepisoval
tady máš už dokončený kód
kód:

int recdata[9];
int bytes = 0;

//setup-------------------------------------------------
void setup() {

 Serial.begin(9600);
 Serial.setTimeout(1000);

}
//end-setup-----------------------------------------------

//repeat--------------------------------------------------
void loop() {
while(Serial.available())
{
  if (bytes < 9)
  {
    recdata[bytes]= Serial.read();
    bytes++;
  }
  else if (bytes >= 9)
  {
    bytes = 0;
   memset(recdata, 0, sizeof(recdata));
  }
  analogWrite(9,recdata[0]);
}



}
//end-repeat---------------------------------------------


2)nevím kde jsi vzal svojí ideologii že int recdata[0] nebude první číslo když je tam int bytes = 0;
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3292

PříspěvekZaslal: so březen 11 2017, 20:49    Předmět: Citovat

Zahada byla spis v tom, ze mas TrackBar v programu razene 1,2,3,6,4,5,9,8,7 Smile

Naposledy upravil Cowley dne so březen 11 2017, 20:53, celkově upraveno 1 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Cowley



Založen: Feb 04, 2005
Příspěvky: 3292

PříspěvekZaslal: so březen 11 2017, 20:51    Předmět: Citovat

Treba pokud se data ztrati ci jinak preslechnou, tak ztratis synchronizaci.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
Přidat nové téma   Zaslat odpověď       Obsah fóra Diskuzní fórum Elektro Bastlírny -> Miniaturní počítače (Arduino, Raspberry a další) Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra.
Nemůžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Nemůžete připojovat soubory k příspěvkům
Můžete stahovat a prohlížet přiložené soubory

Powered by phpBB © 2001, 2005 phpBB Group
Forums ©
Nuke - Elektro Bastlirna

Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.


PHP-Nuke Copyright © 2005 by Francisco Burzi. This is free software, and you may redistribute it under the GPL. PHP-Nuke comes with absolutely no warranty, for details, see the license.
Čas potřebný ke zpracování stránky 0.14 sekund