[Arduino] RGB led aansturen via Serial

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • PaulEm
  • Registratie: Januari 2008
  • Laatst online: 03-02 07:52
Via de Serial console wil ik analog values naar een RGB pin kunnen sturen.
Nu had ik in gedachten om te wachten voor de letter R, en daarbij vervolgens de data verzamelen die volgt:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void setup() {
  Serial.begin(9600);
}

char color;
int value;

void loop() {
  getColor();

  if(color == 'R') {
    Serial.println(value);
  }
}

void getColor() {
  if(Serial.available()) {
    color = Serial.read();
    while(Serial.available() < 3) { }
    value = Serial.read();
  }
}


Echter, als ik nu R255 komt er als waarde "50" terug, dit is de int waarde voor "2".
Op internet heb ik gezocht naar methodes om dit aan te pakken, daar lijkt het op dat mensen gewoon de analog waarde met Serial.read() op kunnen halen.

Bijvoorbeeld de code op bij de volgende link:
http://dawes.wordpress.co...controlled-rgb-led-mixer/

Wanneer ik "255" stuur naar de Serial console krijg ik als output:
code:
1
2
3
4
red: 0
green: 0
blue: 0
------------


Ik heb zelf geen idee meer wat er fout gaat, hopelijk kan iemand mij de goede richting opsturen. :)

Acties:
  • 0 Henk 'm!

  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 17-06 22:34

SA007

Moderator Tweaking
Punt waar je mee zit is de vertaling tussen ascii en byte data.

Als je namelijk "255" stuurt stuur je eigenlijk 3 bytes, namelijk 0x32 0x35 0x35, en niet de 0xFF die de arduino daarvoor verwacht.
Wat je voor jezelf moet beslissen is of je het met tekst of met bytes aan wil sturen.
Met andere woorden, ga je de code aanpassen om van die 3 bytes weer 1 byte te maken of pas je het computerprogramma aan om een enkele byte te sturen in plaats van ascii.

Acties:
  • 0 Henk 'm!

  • PaulEm
  • Registratie: Januari 2008
  • Laatst online: 03-02 07:52
SA007 schreef op zondag 08 april 2012 @ 19:07:
Punt waar je mee zit is de vertaling tussen ascii en byte data.

Als je namelijk "255" stuurt stuur je eigenlijk 3 bytes, namelijk 0x32 0x35 0x35, en niet de 0xFF die de arduino daarvoor verwacht.
Wat je voor jezelf moet beslissen is of je het met tekst of met bytes aan wil sturen.
Met andere woorden, ga je de code aanpassen om van die 3 bytes weer 1 byte te maken of pas je het computerprogramma aan om een enkele byte te sturen in plaats van ascii.
Op dit moment gebruik ik de Serial Console van Arduino zelf. Deze stuurt dus, als ik het goed begrijp, alleen maar Ascii en geen enkele Byte?

Maar een Byte kan sowieso toch maar uit één teken bestaan, wat betekend dat ik het alsnog als 3 Bytes weer uit moet lezen?

Acties:
  • 0 Henk 'm!

  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 17-06 22:34

SA007

Moderator Tweaking
De serial console stuurt gewoon tekst die je intikt, dus 255 wordt 3 karakters, een 2 en twee keer een 5.
Ik weet niet of het mogelijk is om met die console ook bytes te sturen.

Als je het in software wil doen zal je iets moeten bedenken hoe je protocol wordt.
Zijn het altijd 3 cijfers (voorgaand door 0 als het minder is) en hoe gaat het als je verkeerde data krijgt.

Heb zelf recentelijk nog een stuk code geschreven welke simpelweg een R en dan G en dan B byte wil, oneindig achter elkaar.
Heel erg simpel te programmeren, maar je moet wel met een programma bytes sturen.
Zelf gebruik ik cutecom of gewoon commandline, maar dat is onder linux, onder windows zou ik het niet weten.