Boa Tarde pessoal, preciso de uma ajuda
Como eu uso uma string dentro do if,
se eu escrever na serial "55441"
if(x== 5541){
faça algo
}
eu estou ligando um leitor de código de barra no arduino e quando eu ler esse cód de barra (55441) ele aciona uma porta ou imprime algo na serial

Exibições: 661

Respostas a este tópico

Olha que cão ocidencia...

Ontem de madrugada estava procurando a mesma coisa para tratar servos:

// zoomkat 11-22-10 serial servo (2) test
// for writeMicroseconds, use a value like 1500
// for IDE 0019 and later
// Powering a servo from the arduino usually DOES NOT WORK.
// two servo setup with two servo commands
// send eight character string like 15001500 or 14501550

#include <Servo.h> 
String readString, servo1, servo2;
Servo myservo1;  // create servo object to control a servo 
Servo myservo2;

void setup() {
 Serial.begin(9600);
 myservo1.attach(6);  //the pin for the servo control 
 myservo2.attach(7);
 Serial.println("servo-test-21"); // so I can keep track of what is loaded
}

void loop() {

 while (Serial.available()) {
   delay(10);  
   if (Serial.available() >0) {
     char c = Serial.read();  //gets one byte from serial buffer
     readString += c; //makes the string readString
   } 
 }

 if (readString.length() >0) {
     Serial.println(readString); //see what was received
     
     // expect a string like 07002100 containing the two servo positions      
     servo1 = readString.substring(0, 4); //get the first four characters
     servo2 = readString.substring(4, 8); //get the next four characters 
     
     Serial.println(servo1);  //print ot serial monitor to see results
     Serial.println(servo2);
     
     int n1; //declare as number  
     int n2;
     
     char carray1[6]; //magic needed to convert string to a number 
     servo1.toCharArray(carray1, sizeof(carray1));
     n1 = atoi(carray1); 
     
     char carray2[6];
     servo2.toCharArray(carray2, sizeof(carray2));
     n2 = atoi(carray2); 
     
     myservo1.writeMicroseconds(n1); //set servo position 
     myservo2.writeMicroseconds(n2);

   readString="";
 } 
}

Com um pouco de esforço dá para quebrar a parte da string que interessa e usar para fazer o que quiser.

Boa sorte.

Euclides.

amigo fiz um código bem otimizado e funcional para você:

String comando;

void setup (){
Serial.begin(9600);
}
void loop(){

if(Serial.available()) {

while (Serial.available()>0){
char serial = Serial.read();
comando += serial; // monta a string com cada caracter escrito na serial
delay(10);
}
}

if(comando == "55441")
{
Serial.println("Recebeu 55441");
}

comando = ""; // limpa a string

delay(100);
}

Segue também anexado no pastebin:

http://pastebin.com/mjCMK0vn

Avise se der certo!

Eduardo, digitando manualmente esta funcionando perfeito mas quando faço a leitura com o leitor de código de barra ele não aciona, isso que esta pegando coloquei um serial.print para ver oq estou recebendo e as sequencia vem igualzinha...to cobrando a cabeça um pouco aqui...valeu pela força....se vc souber oq pode ser me da um toque...esta intermitente...olha como ele imprime na serial

44551
44551
44551
44551
44551
44551
44551
44551
44551
44551Recebeu 55441

44551
44551
44551
44551
44551
44551
44551
44551
44551
44551
44551Recebeu 55441

44551
44551
44551
44551
44551
44551
44551
44551
44551
44551
44551

Obrigado,

Amigo tem que fazer uma depuração para saber se a informação está vindo com algum carácter invisível que estaria dando esse conflito. 

Eduardo eu testei aqui não esta vindo caracteres oculto, criei até um novo cod de barra para testar

Cara consegui montar usei seu código e fui alterando até chegar no resultado... não entendi direito oq eu fiz mas funcionou

segue o cód abaixo:

String comando, porta ;
void setup () {
Serial.begin(9600);
Serial1.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}

}
void loop() {

if (Serial1.available()) {
delay(100);
char serial;
comando = ""; // limpa a string


while (Serial1.available() > 0) {
char serial = Serial1.read();
Serial.print(serial);
comando += serial; // monta a string com cada caracter escrito na serial
String porta;

}

porta = comando.substring(00, 05);
if (porta.equalsIgnoreCase("44551"))
{
Serial.println("Recebeu 55441");

}


if (porta.equalsIgnoreCase("12345"))
{
Serial.println("Recebeu 12344");

}

}

}

44551 e 55441 são iguais????

Já é uma pista do que esta dando errado...

A Mona Lisa parece estar sorrindo, mas ela esta fula porque ficou meses...anos...posando para aquele quadro e ninguem percebeu isso.

sim eu alterei os valores

Sim?

E o que aconteceu? Ele começou a entender e entrar no "IF" corretamente?

Funcionou?

o erro não era por causa dos valores, eu ja tinha alterado.

segue o cód;

String comando, porta ;
void setup () {
Serial.begin(9600);
Serial1.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}

}
void loop() {

if (Serial1.available()) {
delay(100);
char serial;
comando = ""; // limpa a string


while (Serial1.available() > 0) {
char serial = Serial1.read();
Serial.print(serial);
comando += serial; // monta a string com cada caracter escrito na serial
String porta;

}

porta = comando.substring(00, 05);
if (porta.equalsIgnoreCase("44551"))
{
Serial.println("Recebeu 55441");

}


if (porta.equalsIgnoreCase("12345"))
{
Serial.println("Recebeu 12344");

}

}

}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço