Gå til innhold

sende bytes vha serial


Anbefalte innlegg

Hei!

 

Trenger å sende noen bytes gjennom serial porten til et arduino kort for å styre noen leds.

det eg trenger å sende er verdier fra 0 til 1023.

 

korleis gjør eg det i c++? bruker microsoft visual c++.

 

trenger tips til en enkel kode som gjør dette :)

Lenke til kommentar
Videoannonse
Annonse
Hva mener du med sende verdier fra 0 til 1023.... snakker vi 16 bit integer eller noen ascii greier?

 

Jaja uansett så vil nok dette hjelpe:

Goooogle : serial communication windows

 

tja godt spørsmål.. er ganske n00b, men saken er at arduinoen vil gi 0 volt når den får tallet 0 og 5 volt når den får tallet 1023, og spenning tilsvarende tall mellom det.

det er sikkert snakk om ein integer eller noe.. skal bare vere tall rett å slett.. er nok dårlig forklaring, men eg veit ikkje meir :(

Lenke til kommentar
Således: http://www.arduino.cc/playground/Interfacing/CPPWindows ?

 

Edit:

og spenning tilsvarende tall mellom det.

Beklager, er redd du ikke kan gjøre dette. Arduino benytter så vidt jeg har forstått PWM i stedet for å regulere spenningen, men effekten blir den samme ;)

 

jo det går. har fått et programm i "processing" som gjør det. her er koden til det:

 

// Dimmer - sends bytes over a serial port

// by David A. Mellis

 

import processing.serial.*;

 

Serial port;

 

void setup()

{

size(256, 150);

 

println("Available serial ports:");

println(Serial.list());

 

// Uses the first port in this list (number 0). Change this to

// select the port corresponding to your Arduino board. The last

// parameter (e.g. 9600) is the speed of the communication. It

// has to correspond to the value passed to Serial.begin() in your

// Arduino sketch.

port = new Serial(this, Serial.list()[1], 9600);

 

// If you know the name of the port used by the Arduino board, you

// can specify it directly like this.

//port = new Serial(this, "COM1", 9600);

}

 

void draw()

{

// draw a gradient from black to white

for (int i = 0; i < 256; i++) {

stroke(i);

line(i, 0, i, 150);

}

 

// write the current X-position of the mouse to the serial port as

// a single byte

port.write(mouseX);

}

 

 

det kommer opp et lite vindu som eg drar musa over. og når musa er i det kvite området så sendes 1023 til arduinoen og det lyser max på dioden. når eg er i det svarte området sender den 0 til arduinoen. mellom det så dimmer lyset.

Lenke til kommentar

 

 

Således: http://www.arduino.cc/playground/Interfacing/CPPWindows ?

 

Edit:

og spenning tilsvarende tall mellom det.

Beklager, er redd du ikke kan gjøre dette. Arduino benytter så vidt jeg har forstått PWM i stedet for å regulere spenningen, men effekten blir den samme ;)

 

jo det går. har fått et programm i "processing" som gjør det. her er koden til det:

 

// Dimmer - sends bytes over a serial port

// by David A. Mellis

 

import processing.serial.*;

 

Serial port;

 

void setup()

{

size(256, 150);

 

println("Available serial ports:");

println(Serial.list());

 

// Uses the first port in this list (number 0). Change this to

// select the port corresponding to your Arduino board. The last

// parameter (e.g. 9600) is the speed of the communication. It

// has to correspond to the value passed to Serial.begin() in your

// Arduino sketch.

port = new Serial(this, Serial.list()[1], 9600);

 

// If you know the name of the port used by the Arduino board, you

// can specify it directly like this.

//port = new Serial(this, "COM1", 9600);

}

 

void draw()

{

// draw a gradient from black to white

for (int i = 0; i < 256; i++) {

stroke(i);

line(i, 0, i, 150);

}

 

// write the current X-position of the mouse to the serial port as

// a single byte

port.write(mouseX);

}

 

 

det kommer opp et lite vindu som eg drar musa over. og når musa er i det kvite området så sendes 1023 til arduinoen og det lyser max på dioden. når eg er i det svarte området sender den 0 til arduinoen. mellom det så dimmer lyset.

 

 

Denne Koden er da vel vitterlig ikke c++, men java?

Lenke til kommentar
Hei!

 

Trenger å sende noen bytes gjennom serial porten til et arduino kort for å styre noen leds.

det eg trenger å sende er verdier fra 0 til 1023.

 

korleis gjør eg det i c++? bruker microsoft visual c++.

 

trenger tips til en enkel kode som gjør dette :)

 

Dette er ikke akkurat et svar på spørsmålet ditt, men dersom det ikke er noen spesielt vektig grunn til at du vil bruke C++ er ikke dette et godt språk til formålet. Jeg har nettopp skrevet en RGB-lysdiodekontrollapplikasjon til arduino hvor jeg brukte python. Her får du jobben gjort med et par linjer kode:

import serial
ser = serial.Serial(2,9600)
ser.write('R128')

 

Hvor 'R' indikerer fargen, og '128' indikerer intensiteten.

 

Som du ser bruker jeg ASCII-koding, da dette er betydelig enklere å håndtere enn å sende binære verdier. Det er ikke så effektivt, men i slike applikasjoner har det ingen betydning.

 

Denne verdien blir dekodet av en tilstandsmaskin som kjører på arduinoen med gjevne intervaller

 

ledctrl_t get_cmd() {
 int i;
 char ledID;
 char ledval[5] = {'0','0','0','',''};
 ledctrl_t ledctrl;

 // search for valid LED identifier
 while( ledID != 'R' && ledID != 'G' && ledID != 'B' ) {
   if(Serial.available() == 0) {
     ledID = '0';
     break; }

   ledID = Serial.read(); }

 // did not find a valid header
 if(ledID == '0'){
   ledctrl.id = 0;
   return ledctrl; 
 } else {

   // set the LED pin  
   switch (ledID) {
     case 'R' : ledctrl.id = redled; break;
     case 'G' : ledctrl.id = grnled; break;
     case 'B' : ledctrl.id = bluled; break;
     default  : ledctrl.id = 0;
   }

 // fetch the intensity value
   if(Serial.available() >= 3) {
     for(i=0;i<3;++i)
       ledval[i] = Serial.read();

     ledctrl.val = atoi(ledval); }
     if(ledctrl.val > 255) ledctrl.val = 255;
     if(ledctrl.val < 0)   ledctrl.val = 0;

     return ledctrl;
   }
}

Endret av kurant
Lenke til kommentar

 

Således: http://www.arduino.cc/playground/Interfacing/CPPWindows ?

 

Edit:

og spenning tilsvarende tall mellom det.

Beklager, er redd du ikke kan gjøre dette. Arduino benytter så vidt jeg har forstått PWM i stedet for å regulere spenningen, men effekten blir den samme ;)

 

jo det går. har fått et programm i "processing" som gjør det. her er koden til det:

 

// Dimmer - sends bytes over a serial port

// by David A. Mellis

 

import processing.serial.*;

 

Serial port;

 

void setup()

{

size(256, 150);

 

println("Available serial ports:");

println(Serial.list());

 

// Uses the first port in this list (number 0). Change this to

// select the port corresponding to your Arduino board. The last

// parameter (e.g. 9600) is the speed of the communication. It

// has to correspond to the value passed to Serial.begin() in your

// Arduino sketch.

port = new Serial(this, Serial.list()[1], 9600);

 

// If you know the name of the port used by the Arduino board, you

// can specify it directly like this.

//port = new Serial(this, "COM1", 9600);

}

 

void draw()

{

// draw a gradient from black to white

for (int i = 0; i < 256; i++) {

stroke(i);

line(i, 0, i, 150);

}

 

// write the current X-position of the mouse to the serial port as

// a single byte

port.write(mouseX);

}

 

 

det kommer opp et lite vindu som eg drar musa over. og når musa er i det kvite området så sendes 1023 til arduinoen og det lyser max på dioden. når eg er i det svarte området sender den 0 til arduinoen. mellom det så dimmer lyset.

 

 

Denne Koden er da vel vitterlig ikke c++, men java?

Koden liknar ikkje på noko Java eg har programmert i alle fall :)

Lenke til kommentar

den koden er for et språk som heiter processing..

 

har lurt litt på å bruke microsoft visual basic .net til å lage programmet mitt i.. siden det virker veldig greit å bruke med tanke på interface og slikt..

 

hvordan kommuniserer man med serialen der? har funnet ein del eksempel på nettet, men dei er så enormt store at det er umulig for meg å skjønne noen ting..

Lenke til kommentar
Python koden til kurant er enkel og lage interface(GUI)som styrer utifra den er lett.

Binder "ser.write('R128')" til en slider med 0-128.

Kan ha knapper for for lys(RBG)

Du får tenke på kan nok hjelpe til med koding,viss det trengs.

 

Ja det er faktisk akkurat det jeg har gjort, vha PyQT. Jeg viste bare et lite avsnitt av koden for enkelhets skyld. Hvis det er interesse for det kan jeg legge ut hele koden senere, jeg har den ikke her.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...