Olá a todos. Estou tentando usar 2 arduinos e 2 xbee pra alterar o brilho de um led remotamente. 

No arduino 1, estou usando um potenciômetro ligado a porta analógica 2, para ler os valores e mandar via serial pelo módudo xbee 1 ( série s1).

Segue o código:

int valoranalog = 0, val1=0;
void setup()
{
Serial.begin(9600);
}

void loop()
{
valoranalog = analogRead(2);
val1 = map(valoranalog, 0, 1023, 0, 255);
Serial.print(val1);
delay(150);
}

No Ardunio 2, tenho um led ligado ao pino 11 ( resistor em série de 200 ohns), e um módulo xbee 2 ( série s1).
Segue o código:

int valorrecebido=0;
void setup()
{
  Serial.begin(9600);
  Serial.flush();
  pinMode(11, OUTPUT);
}
void loop()
{
  if(Serial.available())
  {
    valorrecebido=Serial.read();
    analogWrite(11,valorrecebido);

  }
}

Ambos os xbee foram configurados com o adaptador corretamente. Entretanto não estou conseguindo alterar o brilho usando a pwm no pino 11. Aguardo algum ajuda de vocês.

Exibições: 877

As respostas para este tópico estão encerradas.

Respostas a este tópico

Vc precisa converter os dados que chegam da serial para uma variável numérica do tipo inteiro no Arduino 2

Pois é, Hugo, ele precisa trocar a função:

Serial.print(val1);

por :

Serial.write(val1);

ou algo assim...

Acho que assim tbm não resolve, pq vai receber byte por byte, então teria que ler o buffer e "montar" o numero.

Da uma testada, mas acredito que resolva sim.

O Serial.write mandaria o numero de 0 a 255 em apenas 1 byte. O Serial.print é que mandaria em "human readable" ou string.

Eh uma opção... 

Se vc prefere ficar com strings aih teria que usar uma rotina que acumule o que ta vindo em um array, entenda o enter ($13 ou "/n") como o finalizador de comandos e depois converta pra numero.

Veja este código. Não sei se é a forma mais simples de fazer isso, mas funciona...

Repare que antes obter os valores, é verificado se o primeiro byte é o caractere 'a', dessa forma é possível saber quando "começa um número novo". Obviamente no arduino que envia o valores, será preciso enviar o caractere 'a' antes de enviar o valor da leitura analógica.

Faça o teste no Serial Monitor para controlar saída PWM.

Enviar sempre a letra 'a' antes dos números

Ex: a100

      a200

      a255

      a0

Obs: Não sou o autor do código, apenas fiz algumas modificações.

char buffer[18];

void setup()
{
Serial.begin(9600);
Serial.flush();
pinMode(11, OUTPUT);

}

void loop()
{
if (Serial.available() > 0) {
int index=0;
delay(100); // permite o buffer encher
int numChar = Serial.available();
if (numChar>15) {
numChar=15;
}
while (numChar--) {
buffer[index++] = Serial.read();
}
splitString(buffer);
}
}

void splitString(char* data) {
char* parameter;
parameter = strtok (data, " ,");
while (parameter != NULL) {
setLED(parameter);
parameter = strtok (NULL, " ,");
}

// Limpa os textos e o buffer serial
for (int x=0; x<16; x++) {
buffer[x]='\0';
}
Serial.flush();
}

void setLED(char* data) {
if (data[0] == 'a')  {
int Ans = strtol(data+1, NULL, 10);
Ans = constrain(Ans,0,255);
analogWrite(11, Ans);
}
}

Eu vou tentar de ambas as formas, hoje a noite já devo está colocando aqui os resultados pra gente ve o que deu.

Quero agradecer a todos aqui, por terem me ajudado, funcionou direitinho o projeto pra alterar o brilho do led via pwm, usando o arduino e xbee, vlw gente forte abraço, quando postar o vídeo no youtube, mando link

Qual método vc usou?

Usei uma mistura de ambos. Mas coloquei o Serial.write que resolveu bastante

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço