Go Down

Topic: Sensor para o Arduino, para Serial (Read 805 times) previous topic - next topic

B2_spirit_B2

Boa tarde a todos
bom gente estou com uma duvida
estou fazendo um programa em tempo real que funciona da seguinte maneira, eu tenho um cronometro e um sensor, quando algo passa pelo sensor (após o cronometro ter sido iniciado) o cronometro gera um parcial, e este parcial é armazenado a cada passada, o problema meu ocorre na seguinte situação. Como é em tempo real esta dentro de um loop então o arduino me manda em vez de apenas 0 ou 1 para que eu possa manipular em meu programa, ele me envia uma string enorme de vários zeros ou uns quando acionado o sensor, gostaria que em vez do arduino me mandar todos estes numeros, só me mandasse 1 ou 0, por vez, a cada acionamento, auto atualizando assim a variável principal que recebo no C#
tem como fazer isso? ou terei que modificar meu programa em C#

Filantropic

Você pode disponibilizar o código ou pelo menos parte dele para gente? E pode dar mais detalhes de qual sersor você está utilizando? Acredito que fica mais fácil para o pessoal te ajudar.

Abraços

Mortis

Como o Filantropic falou, posta os códigos, para vermos o que eles estão fazendo.

Se você recebe muitos caracteres no PC (C#) é porque o arduino esta a enviar muitos caracteres?
Creio que você esteja usando o namespace serialport, mas como esta lendo os dados?
Usas um buffer e estas limpado a cada final de leitura?
Já testou no serial monitor para saber se o problema esta no C#?

Viu, sem informações completas ficamos a imaginar  ]:)

B2_spirit_B2

Boa noite
bom primeiramente obrigado a todos que responderam, agradeço demais a sua ajuda
bom meu código é este

int buttonpin=2; //botão no pino 2

int estado=0; //estado que será impresso
int buttonstate=0; // estado do botão

void setup(){
 pinMode(buttonpin,INPUT);
 Serial.begin(9600);
}

void loop(){
 buttonstate=digitalRead(buttonpin);

 if(buttonstate == HIGH && estado==0){
   estado=1;
   Serial.println(estado);
 }

 else{
   estado=0;
 }
}

funcionou na sexta feito um relógio, inclusive foi um grande amigo meu que me ajudou nisso, (obrigado fera tu manja) porem, agora no momento não esta dando certo, meu botão esta para quando acionar ele mandar o sinal

detalhe voltou a repetição do 1, 11111111111111111111111111111

grato

B2_spirit_B2

Outro detalhe, quando aperto o botão a sequencia de 1 para quando solto volta

Mortis

Boas,


Outro detalhe, quando aperto o botão a sequencia de 1 para quando solto volta


Mas é isso que tens em teu programa:
Code: [Select]
  if(buttonstate == HIGH && estado==0){
    estado=1;
    Serial.println(estado);
  }

  else{
    estado=0;
  }


Toda vez que o estado do botão for HIGH  e a variável estado for 0 ele vai mandar 1, caso contrário não manda nada. ^^

Primeiro, entendo que você só quer saber no C# quando o estado do botão muda no arduino, certo? Então vejamos se isso resolve ^^

Code: [Select]

int buttonpin=2; //botão no pino 2
int buttonstate=0; // estado do botão
int oldbuttonstate=0; //guarda o estado anterior do botão

void setup(){
  pinMode(buttonpin,INPUT);
  Serial.begin(9600);
}

void loop(){
  buttonstate=digitalRead(buttonpin); 
  if(buttonstate != oldbuttonstate){ //Só envia quando o estado do botão muda
    Serial.print("estado: ");
    Serial.println(buttonstate); //Imprime o estado atual do botão
    oldbuttonstate=buttonstate;  //Guarda o estado anterior, pois para este estado a mensagem já foi enviada
  }
}


Pegou a ideia?

B2_spirit_B2

Boa tarde
Muito Obrigado Mortis, funcionou perfeitamente, estou dando facepalm em mim mesmo até estourar o crânio (como não vi isso?), Muito obrigado mesmo e a todos que ajudaram, funcionou perfeitamente


um grande abraço a todos e tenham uma excelente tarde

Mortis

kkkkk não precisa tanto, as vezes estamos mais focados no problema que não vemos a solução, e quem esta fora enxerga com mais facilidade  8)

Bons projetos por ai ;)

Go Up