Вы находитесь на странице: 1из 3

char buffer[18];

int red, green, blue;


int RedPin = 11;
int GreenPin = 10;
int BluePin = 9;
void setup()
{
Serial.begin(9600);
Serial.flush();
pinMode(RedPin, OUTPUT);
pinMode(GreenPin, OUTPUT);
pinMode(BluePin, OUTPUT);
}
void loop()
{
if (Serial.available() > 0) {
int index=0;
delay(100); // let the buffer fill up
int numChar = Serial.available();
if (numChar>15) {
numChar=15;
}
while (numChar--) {
buffer[index++] = Serial.read();
}
splitString(buffer);
}
}
void splitString(char* data) {
Serial.print("Data entered: ");
Serial.println(data);
char* parameter;
parameter = strtok (data, " ,");
while (parameter != NULL) {
setLED(parameter);
parameter = strtok (NULL, " ,");
}
// Clear the text and serial buffers
for (int x=0; x<16; x++) {
buffer[x]='\0';
}
Serial.flush();
}
void setLED(char* data) {
if ((data[0] == 'r') || (data[0] == 'R')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
analogWrite(RedPin, Ans);
Serial.print("Red is set to: ");
Serial.println(Ans);
}
if ((data[0] == 'g') || (data[0] == 'G')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
analogWrite(GreenPin, Ans);
Serial.print("Green is set to: ");
Serial.println(Ans);
}
if ((data[0] == 'b') || (data[0] == 'B')) {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
analogWrite(BluePin, Ans);
Serial.print("Blue is set to: ");
Serial.println(Ans);
}
}
uma vez que voc verlflcar o cdlgo faa o upload para o
seu Ardulno Agora quando voc carregar o programa
nada parece aconLecer lsso ocorre porque o programa
esL esperando por sua enLrada lnlcle o MonlLor de serle
cllcando no lcone na barra de Larefas luL Ardulno
na [anela de LexLo Serlal MonlLor voc pode agora enLrar
8 C e 8 os valores para cada um dos Lrs LLus
manualmenLe e os dlodos emlssores de luz mudar para a
cor que voc Lm enLrada or exemplo Se voc dlglLar
8233 o LLu vermelho lr exlblr a plena
brllho Se voc dlglLar 8233 C233 em segulda LanLo o
vermelho e verde LLus lr mosLrar em pleno brllho
Agora enLra 8127 C100 8233 e voc obLer um bom
cor arroxeada Se voc dlglLar r0 g0 b0 Lodos os dlodos
emlssores de luz ser desllgada C LexLo de enLrada e
pro[eLada para acelLar LanLo uma mlnuscula
ou malusculas 8 C e 8 e em segulda um valor
0233 Cualsquer valores aclma de 233 sero descarLados
balxo a 233 no mxlmo voc pode lnserlr uma vlrgula ou
um espao enLre os parmeLros e voc pode enLrar 1 2
ou 3 LLu valores a qualquer momenLo or exemplo
r233 8100
r127 b127 g127
C233 80
8127 80 C233
LLc


LsLe pro[eLo apresenLa um monLe de novos
concelLos lnclulndo a comunlcao serlal os ponLelros e
manlpulao de sLrlng LnLo segure flrme em seus
chapeus presenLe Ler mulLo a expllcar
rlmelro vamos crlar um array de char (personagens) para
manLer nossa cadela de LexLo 1emos felLo lsso 18
caracLeres whlchls mals do que o mxlmo de 16 ns
permlLlremos para assegurar ns no Lemos buffer
overflow erros

char buffer[18];

Lm segulda conflgurar os lnLelros para segurar os valores
vermelho verde e azul bem como os valores para o dlglLal
plnos

int red, green, blue;

int RedPin = 11;
int GreenPin = 10;
int BluePin = 9;
Lm nossa funo de conflgurao que deflnlr o 3 plnos
dlglLal a ser saldas Mas anLes dlsso Lemos a Serlalbegln
comando
void setup()
{
Serial.begin(9600);
Serial.flush();
pinMode(RedPin, OUTPUT);
pinMode(GreenPin, OUTPUT);
pinMode(BluePin, OUTPUT);
}
Serlalbegln dlz o Ardulno para lnlclar a serle
comunlcaes e do numero denLro da
parnLese nesLe caso 9600 deflne a Laxa de Lransmlsso
(CaracLeres por segundo) que a llnha serlal ser
comunlcarse C comando Serlalflush val expulsar
qualquer caracLeres que aconLecer para esLar na llnha
serlal de modo que e vazla e pronLa para enLrada / salda A
llnha de comunlcao serlal e slmplesmenLe uma forma de
o Ardulno para se comunlcar com o mundo exLerlor e
nesLe caso e para o C e os luLs Ardulno Serlal MonlLor
no loop prlnclpal Lemos um lf C condlo que esL
verlflcando se
if (Serial.available() > 0) {
C comando verlflca Serlalavallable para ver se algum
caracLeres foram envlados para balxo da llnha serlal Se
algum caracLeres foram recebldos em segulda a condlo
so saLlsfelLas e o cdlgo denLro do bloco lf cdlgo agora e
execuLado
if (Serial.available() > 0) {
int index=0;
delay(100); // let the buffer fill up
int numChar = Serial.available();
if (numChar>15) {
numChar=15;
}
while (numChar--) {
buffer[index++] = Serial.read();
}
splitString(buffer);
}
}
um lnLelro chamado lndex e declarado e lnlclallzado como
zero LsLe lnLelro val manLer a poslo de um ponLelro
para os personagens denLro da maLrlz char
Lm segulda deflnlr um aLraso de 100 C ob[eLlvo desLe e
assegurar que o buffer serlal (o lugar na memrla onde os
dados serlal que e recebldo e armazenado anLes de
processamenLo) esL chelo anLes de conLlnuar e processo
os dados Se ns no fazemos lsso e posslvel que o funo
lr execuLar e comear a processar o LexLo sequncla
anLes de Ler recebldo a LoLalldade dos dados C
llnha de comunlcao serlal e mulLo lenLa em comparao
com a velocldade do resLo do cdlgo esL sendo execuLado
no Cuando envlar uma sequncla de caracLeres a
Serlalavallable
funo Ler lmedlaLamenLe um valor superlor
zero e se a funo val comear a execuLar Se
no Llve o aLraso (100) declarao em que ele poderla
comear a execuLar o cdlgo denLro do lf
anLes de Lodos da cadela de LexLo havla sldo receblda e
serlal de dados s podem ser os prlmelros caracLeres do
llnha do LexLo dlglLado uepols ns Lemos que esperar para
100ms para o buffer serlal para preencher com os dados
envlados que em segulda declarar e lnlclallzar o lnLelro
numChar a ser o numero de caracLeres na sequncla de
LexLo or exemplo Se nos envlou esLe LexLo no MonlLor
de serle 8233 C233 8233 LnLo o valor de numChar serla
17 L 17 e no 16 como no flnal de cada llnha do LexLo h
uma personagem lnvlslvel chamado um caracLere nuLL
LsLe e um slmbolo nada e slmplesmenLe dlz o que o
Ardulno flm da llnha do LexLo fol aLlngldo
A prxlma lnsLruo lf verlflca se o valor da numChar
e superlor a 13 ou no e se asslm ele deflne como sendo
de 13 lsso garanLe que no esLouro da maLrlz

char buffer[18];

uepols vem um comando enquanLo lsso e algo ns Lemos
deparados anLes enLo delxeme expllcar
ns [ usamos o loop for o que ser um loop
numero deflnldo de vezes A aflrmao enquanLo Lambem
e um loop mas que execuLa somenLe quando uma
condlo e verdadelro A slnLaxe e

while(expression) {
// statement(s)
}

Lm nosso cdlgo o loop whlle e

while (numChar--) {
buffer[index++] = Serial.read();
}

A condlo e a verlflcao e slmplesmenLe numChar
porLanLo em ouLras palavras e verlflcar que o valor
armazenado no numChar lnLelro no e zero numChar
Lem aps ele lsLo e o que e conhecldo como ps
decremenLar Lm ouLras palavras o valor e dlmlnuldo
aps o uso Se Llvessemos usado o valor serla
numChar em numChar ser dlmlnuldo (Lem uma
subLraldo) anLes fol avallado no nosso caso
enquanLo a verlflcaes de loop o valor de numChar
e em segulda subLral um do mesmo
Se o valor da numChar no era zero anLes da
dlmlnulr enLo carrega o cdlgo em seu cdlgo
bloco numChar e deflnldo como o comprlmenLo da
sequncla de LexLo que enLraram na [anela MonlLor
de serle Asslm o cdlgo denLro do loop ser
execuLado enquanLo que mulLos vezes
C cdlgo denLro do loop whlle e

buffer[index++] = Serial.read();

Cue deflne cada elemenLo da maLrlz de buffer para
cada caracLere lldo a parLlr da llnha serlal Lm ouLras
palavras ele enche o buffer maLrlz com as leLras que
ns Lemos enLrou na [anela Serlal MonlLores de LexLo
C Serlalread () comando l serlal de enLrada
dados um byLe de cada vez LnLo agora que a nossa
maLrlz de caracLeres fol preenchldo com os
personagens que enLraram no MonlLor de serle do
whlle Lermlna quando aLlnge numChar zero (ou se[a
C comprlmenLo da corda) uepols que o loop
enquanLo Lemos

splitString(buffer);

Вам также может понравиться