IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
dawes12
Člen
Avatar
dawes12:3.4.2015 21:43

Čau, mám problém při odesílání čísla z c# do arduina.Aby se čísla odlišila tak v c# ke každému číslu přidám písmeno('c').A v arduinu ho zase odstraním ale stejně to nic nedělá.Nevíte někdo co s tím?.Dík za jakoukoliv odpověď.
c#

SerialPort port = new SerialPort("COM4", 9600);
       int i;
       public Form1()
       {
           InitializeComponent();
           this.trackBar1.Scroll += new System.EventHandler(this.trackBar1_Scroll);
               port.Open();
       }
       public void trackBar1_Scroll(object sender, EventArgs e)
       {
           char []c=new char[10];
           label1.Text = trackBar1.Value.ToString();
           string s = trackBar1.Value + "c";
             port.Write(s);
          }

arduino

#include <Servo.h>;
Servo myservo;

int val;
int i=0;
String ss;
String st;
bool b=true;

void setup() {
  Serial.begin(9600);
   myservo.attach(9);

}

void loop() {
   if(Serial.available())
   {
     ss=Serial.readString();
      for(int i=0;i<ss.length();i++)
      {
        if(ss[i]=='c')
        {
          b=false;

        }
        if(b==true)
        {
          st+=ss[i];
         }
      }

    }
    b=true;

   int ii=st.toInt();
    st="";
    ss="";
   val = map(ii, 0,100,0,180);
    myservo.write(val);
   }

A chtěl bych se zeptat jestli neexistuje jiná cesta než sériový port.

 
Odpovědět
3.4.2015 21:43
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na dawes12
Adam Ježek:3.4.2015 21:47
  1. Jak odlišila čísla? Nějak nechápu smysl toho 'c'
  2. S arduinem se nejlépe komunikuje přes sériový port. Můžeš použít bluetooth, ale to má stále sériový port. Pak jde ještě třeba přes internet, ale to je složitý, nještě složitější je bezdrát rádiovými vlnami
Nahoru Odpovědět
3.4.2015 21:47
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
dawes12
Člen
Avatar
dawes12:3.4.2015 21:55

Protože chci ovládat servo pomocí trackBar(událostí na trackBar chci odesílat).Tak jsem si myslel že když tam nedám to c tak se ty čísla neodliší (např. 56 a 58 se mu ukáže jako 5658).

A nešel by nějak otevřít sériový port v arduino(když je zároveň otevřen ve VS.

 
Nahoru Odpovědět
3.4.2015 21:55
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na dawes12
Adam Ježek:3.4.2015 22:04

používej tlačítko odpovědět.
Sériový port může používat jen jedna aplikakace/proces, takže buď Arduino IDE, nebo VS - obojí nejde (leda že by jsi měl nějakou aplikaci, který by vytvořila v počítači dva virtuální porty a kopírovala je na ten jeden skutečný).
Co se týče odlišení čísel, když už používáš v Arduinu Serial.readString, tak v C# zapisuj taky string. Takže C#:

public void trackBar1_Scroll(object sender, EventArgs e)
       {

           label1.Text = trackBar1.Value.ToString();
           port.WriteLine(trackBar1.Value.ToString());
          }

A Arduino:

#include <Servo.h>;
Servo myservo;

int val;
int radval=0;


void setup() {
  Serial.begin(9600);
   myservo.attach(9);

}

void loop() {
   if(Serial.available())
   {
     readval =Serial.readString().toInt();
     val = map(readval, 0,100,0,180);
     myservo.write(val);
   }
Editováno 3.4.2015 22:06
Nahoru Odpovědět
3.4.2015 22:04
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
dawes12
Člen
Avatar
dawes12:3.4.2015 22:11

Škoda že to nejde, jsem chtěl aby byla odezva na jakýkoliv pohyb TrackBaru, bez nějakého tlačítka.Ale dík za odpověď ,jinak bych se tady s tím trápil ještě nějakou dobu.

Ale s visual mikro máš nějaké zkušenosti ?

Editováno 3.4.2015 22:11
 
Nahoru Odpovědět
3.4.2015 22:11
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na dawes12
Adam Ježek:3.4.2015 22:30

Dyť odezva na jakýkolliv pohyb trackbaru je v té události public void trackBar1_Scro­ll(object sender, EventArgs e), mělo by to reagovat na každý pohyb trackbaru.

O visual mikro slyším prvně, vypadá dobře, každopádně je placený... Ikdyž jsem párkrát scháněl lepší IDE pro arduino, tak jsem vždy dospěl k názoru, že standardní mi stačí, i když nenapovídá

A používej tlačítko odpovědět

Nahoru Odpovědět
3.4.2015 22:30
Počkej chvíli, poradím se s křišťálovou koulí.
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na dawes12
Martin Dráb:4.4.2015 0:27

Ono by asi bylo nejlepší zkusit propojit sériovým kabelem dva počítače, abys viděl, co na druhé straně opravdu vyleze. Protože takhle podle mě jen hádáš, co se ve skutečnosti na Arduino dostane. Špatné je, že na takové řešení je potřeba pár věcí navíc ("sériový modem" (kabel pro propojení dvou počítačů, pokud ty stroje nemají nativní COM port, tak příslušný počet redukcí USB->COM).

Možná by ale stačilo jen zmonitorovat, co se přesně posílá na ten sériový port z C#, protože jestli to kódování řetězce není jednobajtové, ale třeba v nižších vrstvách Windows zvláště oblíbené UCS-16 a jestli Arduino očekává ANSI, tak ti rozhodně ten řetězec na nějaké rozumné číslo nepřevede.

Nahoru Odpovědět
4.4.2015 0:27
2 + 2 = 5 for extremely large values of 2
Avatar
Adam Ježek
Tvůrce
Avatar
Odpovídá na Martin Dráb
Adam Ježek:4.4.2015 0:35

Arduino ma(jeden port vyresen), staci mu jeden TTL-USB prevodnik, ten pichne na piny 0 a 1 na arduinu a muze monitorovat co posila
// ja na to mam FTDI232, ale mel by stacit i nejaky "horsi"

Editováno 4.4.2015 0:38
Nahoru Odpovědět
4.4.2015 0:35
Počkej chvíli, poradím se s křišťálovou koulí.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.