Avatar
dawes12
Člen
Avatar
dawes12:

Č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
Tým ITnetwork
Avatar
Odpovídá na dawes12
Adam Ježek:
  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
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
dawes12
Člen
Avatar
dawes12:

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
Tým ITnetwork
Avatar
Odpovídá na dawes12
Adam Ježek:

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
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
dawes12
Člen
Avatar
dawes12:

Š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
Tým ITnetwork
Avatar
Odpovídá na dawes12
Adam Ježek:

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
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na dawes12
Martin Dráb:

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
Tým ITnetwork
Avatar
Odpovídá na Martin Dráb
Adam Ježek:

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
Pokud chceš odpovědět, klikni na odpovědět. Pokud chceš vložit zdroják, klikni na vložit zdroják (</>)
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.