Serielle Kommunikation @ Arduino UNO & VB.Net
hallo leute,
ich stehe im moment ein wenig auf dem schlauch. vielleicht zum einen weil ich noch kaum erfahrung mit dem arduino habe aber sicherlich auch, weil ich noch nie über vb.net auf den arduino zugegriffen habe.
was habe ich vor ...
ich habe mir das acs714 stromsensor breakout board +- 5a gekauft und möchte über den arduino einem gerät den strom messen.
den entsprechenden code dafür habe ich gefunden ...
der serial monitor liefert mir dann das folgende ergebnis... soweit gut!
nun möchte ich mit meiner vb.net anwendung über den serialport genau diese zahlen abgreifen und da hänge ich nun fest. ich habe dazu schon einiges ausprobiert, aber leider ohne erfolg!
der code zum lesen schaut bei mir wie folgt aus...
das ergebnis in der richtextbox ist dann ...
weiß einer wie man da weiter kommt? besten danke!
 							ich stehe im moment ein wenig auf dem schlauch. vielleicht zum einen weil ich noch kaum erfahrung mit dem arduino habe aber sicherlich auch, weil ich noch nie über vb.net auf den arduino zugegriffen habe.
was habe ich vor ...
ich habe mir das acs714 stromsensor breakout board +- 5a gekauft und möchte über den arduino einem gerät den strom messen.
den entsprechenden code dafür habe ich gefunden ...
code: [select]
/*
  computes average of sample of n readings @ intervals
  of 1000/n ms acs712 low current sensor connected to
  analog input pin 0 on arduino board , print them the
  serial monitor.
  sketch uses the chauvenet's statistical criterion
  rejecting bad readings.
*/
const int num_readings = 10;
// chauvenet's criterion rejecting reading
// http://people.ohio.edu/bayless/seniorlab/lecture1.ppt
// http://people.ohio.edu/bayless/seniorlab/chauvenet.pdf
// consult table of pdf document find ratio
// of maximum acceptable deviation precision index for
// sampling.
const int mad = 2.24;
int readings[num_readings];
int index = 0;
void setup() {
  // sets serial port 9600
  serial.begin(9600);
}
int average() {
  int total = 0;
  for(int i=0; i<num_readings; i++)
    total = total + readings[i];
  return total/num_readings;
}
float standard_deviation(int avg) {
  int total = 0;
  for(int i=0; i<num_readings; i++)
    total = total + pow((avg - readings[i]), 2);
  return sqrt(total/num_readings);
}
void loop() {
  // read analog input pin 0
  int reading = analogread(0);
  readings[index] = reading;
  // incrementing index
  index = index + 1;
  // if have been done 10 readings...
  if (index >= num_readings) {
    // set index 0
    index = 0;
    // compute average
    int avg = average();
    // compute standard deviation
    float std = standard_deviation(avg);
    
    float madstd = mad * std;
    float lowlimit = avg - madstd;
    float highlimit = avg + madstd;
    
    int count = 0;
    int total = 0;
    for(int i=0; i<num_readings; i++) {
      // check if values of readings within limits.
      if(readings[i] >= lowlimit && readings[i] <= highlimit) {
        total = total + readings[i];
        count = count + 1;
      }
    }
    // compute new average
    int newaverage = total/count;
    // send serial port (as ascii digits)
    serial.println(newaverage);
  }
  // wait 1000/num_readings ms next reading
  //delay(int(1000/num_readings));
}der serial monitor liefert mir dann das folgende ergebnis... soweit gut!
code: [select]
512
512
510
511
511
512
511
511
511
511
511
512
510
.....
nun möchte ich mit meiner vb.net anwendung über den serialport genau diese zahlen abgreifen und da hänge ich nun fest. ich habe dazu schon einiges ausprobiert, aber leider ohne erfolg!
der code zum lesen schaut bei mir wie folgt aus...
code: [select]
dim sw new stopwatch
        dim swms long = sw.elapsedmilliseconds
        dim wert integer = 0
        sw.start()
        dim port new system.io.ports.serialport
        port
            .portname = "com3"
            .baudrate = 9600
            .parity = io.ports.parity.none
            .databits = 8
            .stopbits = io.ports.stopbits.one
            .handshake = io.ports.handshake.none
            .rtsenable = true
            .dtrenable = true
            .encoding = system.text.encoding.ascii
            .newline = vbcrlf
        end with
        port.open()
        do
            wert = port.readbyte
            richtextbox1.invoke(sub()
                                    richtextbox1.appendtext(wert.tostring)
                                end sub)
            dim v integer = cint(100 / 1023 * wert)
            backgroundworker1.reportprogress(v)
            dt.rows.add(sw.elapsedmilliseconds, wert)
            if backgroundworker1.cancellationpending then
                backgroundworker1.reportprogress(0)
                exit do
            end if
            wert = 0
        loop
        port.close()das ergebnis in der richtextbox ist dann ...
code: [select]
494948131053494913105349501310534949131053494813105313105349491310534949131053494913105349481310534948131053495013105349491310534949131053494813105349481310534948131053494913105349501310534949131053494913105349491310534949131053494913105349491310534949131053494813105349491310534950131053494913105349...weiß einer wie man da weiter kommt? besten danke!
49 49 48 13 10 
53 49 49 13 10
53 49 50 13 10
53 49 49 13 10
53 49 48 13 10
als ashii kode interpretiert ist:
1 1 0 lf cr
5 1 1 lf cr
5 1 2 lf cr
5 1 1 lf cr
5 1 0 lf cr
grüße uwe
 							53 49 49 13 10
53 49 50 13 10
53 49 49 13 10
53 49 48 13 10
als ashii kode interpretiert ist:
1 1 0 lf cr
5 1 1 lf cr
5 1 2 lf cr
5 1 1 lf cr
5 1 0 lf cr
grüße uwe
            						 					Arduino Forum  						 						 							 >   					International  						 						 							 >   					Deutsch  (Moderator: uwefed)  						 						 							 >   					Serielle Kommunikation @ Arduino UNO & VB.Net  						 					
arduino
 
  
Comments
Post a Comment