2016-08-26 5 views
2

Je veux envoyer des nombres entiers (entre 101 et 1616) du programme C# à l'arduino Uno à l'aide d'un port USB. Je sais comment utiliser les registres de la Uno arduino et je voulais savoir s'il y a une interruption lors de la relance de données sur ce port USB. En ce moment je l'utilise mais ça ne marche pas.Comment envoyer des numéros de C# à Arduino Uno avec un port USB?

if(Serial.available()!=0) { input= (unsigned char)Serial.read(); }

Et sur le programme C# J'utilise ce code:

byte[] b = BitConverter.GetBytes(MyIntx); 
       SerialPort.Write(b, 0, 4); 

Comment puis-je envoyer plus grand nombre entre le programme C# et l'uno arduino? Et y at-il une interruption spéciale pour recevoir ce type de numéros?

Répondre

0

Ce que vous devez faire est d'envoyer octet par octet. Il existe des solutions complexes et il y a plus faciles complexes: de https://www.baldengineer.com/arduino-multi-digit-integers.html

void setup() { 
    Serial.begin(9600); 
} 

unsigned int integerValue=0; // Max value is 65535 
char incomingByte; 

void loop() { 
    if (Serial.available() > 0) { // something came across serial 
    integerValue = 0;   // throw away previous integerValue 
    while(1) {   // force into a loop until 'n' is received 
     incomingByte = Serial.read(); 
     if (incomingByte == '\n') break; // exit the while(1), we're done receiving 
     if (incomingByte == -1) continue; // if no characters are in the buffer read() returns -1 
     integerValue *= 10; // shift left 1 decimal place 
     // convert ASCII to integer, add, and shift left 1 decimal place 
     integerValue = ((incomingByte - 48) + integerValue); 
    } 
    Serial.println(integerValue); // Do something with the value 
    } 
} 

Ma version: Convert Int Char, Envoyer octet par octet et Arduino reconvertir à Int.

int x=150; 
    string x_char = x.ToString(); 
for(int i=0;i<x_char.length();i++) 
{ 
//Send Each Character to Arduino "c_char[i]". 
} 
//Send a new line or any special character to mark the break. For Instance "\n"; 

Arduino:

String a; 

void setup() { 

Serial.begin(9600); // opens serial port, sets data rate to 9600 bps 

} 

void loop() { 

while(Serial.available()) { 

a= Serial.readStringUntil('\n'); //Read until new line 
x = Serial.parseInt(); //This is your Integer value 

} 

} 
0
Connect(); 
      if (serialPort1.IsOpen) 
      { 

       int MyInt = ToInt32(lblMixerCase.Text); 
       byte[] b = GetBytes(MyInt); 
       serialPort1.Write(b, 0, 1); 

       int MyInt2 = ToInt32(txtRPM.Text); 
       if (MyInt2<=255) 
       { 
        byte[] z = GetBytes(MyInt2); 
        serialPort1.Write(z, 0, 1); //For first 1 byte numbers 
       } 
       else if (MyInt2<=510) 
       { 
        byte[] r = GetBytes(MyInt2); 
        serialPort1.Write(r, 0, 2); for 2 byte numbers 
       } 
       else if (MyInt2<=765) 
       { 
        byte[] a = GetBytes(MyInt2); 
        serialPort1.Write(a, 0, 3); //for 3 byte numbers 
       } 
       else if (MyInt2<=1020) 
       { 
        byte[] q = GetBytes(MyInt2); 
        serialPort1.Write(q, 0, 4); //for 4 byte numbers 
       } 
+0

S'il vous plaît donner quelques explications en plus du code. – Jan

+0

Bien sûr, Qu'est-ce que vous n'avez pas compris @Jan – rhsn