Go Down

Topic: soma de porta serial (Read 117 times) previous topic - next topic

Marcospier

estou com uma pequena duvida. estou prescisando somar um valor recebido da porta serial via bluettoth mas esse valor so esta apenas escrevendo o mesmo valor e nao somando

 
if ((Serial.read()== 'L') && (vSpeed == 0)) {
    giro1 = giro1 + 1;
  servo1.write(giro1);

eu gostaria de sempre que eu manda um sinal L e a vspeed for 0 o meu projeto controlasse o servo motor e fosse aumentando os angulo dele de forma linear ate 180

projeto completo embaixo
:

#include <Servo.h>
Servo servo1;
Servo servo2;
int giro1 = 1;
int giro2 = 1;

/* Carro Arduino com controle Bluetooth
      Código retirado do link abaixo:
   http://www.instructables.com/id/Arduino-Bluetooth-RC-Car-Android-Controlled/?ALLSTEPS
      Conclusão e adaptações por Usinainfo:
   http://www.usinainfo.com.br/
*/

// Define os pinos de utilização do Driver L298.

const int motorA1  = 9;    // Pin  5 of L293.
const int motorA2  = 3;    // Pin  6 of L293.
const int motorB1  = 11;   // Pin 10 of L293.
const int motorB2  = 10;   // Pin 9 of L293.

const int buzzer = 12 ;   // Define o Pino 13 como pino do Buzzer.

const int BTState = 2;    // Define o Pino 2 como o pino de comunicação do Bluetooth.

// Variáveis Úteis
int i = 0;
int j = 0;
int state_rec;
int vSpeed = 200;   // Define velocidade padrão 0 < x < 255.
char state;

void setup() {
  // Inicializa as portas como entrada e saída.
  servo1.attach(6);
  servo2.attach(5);
  pinMode(motorA1, OUTPUT);
  pinMode(motorA2, OUTPUT);
  pinMode(motorB1, OUTPUT);
  pinMode(motorB2, OUTPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(BTState, INPUT);

  // Inicializa a comunicação serial em 9600 bits.
  Serial.begin(9600);
}

void loop() {
  Serial.println(giro1);
  digitalRead(vSpeed);
  // Para o carro quando a conexão com Bluetooth é perdida ou desconectada.
  giro1 = map(giro1, 0, 1023, 0 , 179);
  if (digitalRead(BTState) == LOW) {
    state_rec = 'S';
  }

  // Salva os valores da variável 'state'
  if (Serial.available() > 0) {
    state_rec = Serial.read();
    state = state_rec;
    //Serial.println(vSpeed);
  }

  // Altera a velocidade de acordo com valores especificados.
  if (state == '0') {
    vSpeed = 0;
  }
  else if (state == '4') {
    vSpeed = 100;
  }
  else if (state == '6') {
    vSpeed = 155;
  }
  else if (state == '7') {
    vSpeed = 180;
  }
  else if (state == '8') {
    vSpeed = 200;
  }
  else if (state == '9') {
    vSpeed = 230;
  }
  else if (state == 'q') {
    vSpeed = 255;
  }

  if (state != 'S') {
    Serial.print(state);
  }

  // Se o estado recebido for igual a 'F', o carro se movimenta para frente.
if ((Serial.read()== 'L') && (vSpeed == 0)) {
    giro1 = giro1 + 1;
   // servo1.write(giro1);
   }
 
   if ((Serial.read()== 'R') && (vSpeed == 0)) {
    giro1 = giro1 - 1;
    servo1.write(giro1);
  }
 
  if (state == 'F') {
    analogWrite(motorB1, vSpeed);
    analogWrite(motorA1, vSpeed);
    analogWrite(motorA2, 0);
    analogWrite(motorB2, 0);
  }
 
 

  else if (state == 'I') {  // Se o estado recebido for igual a 'I', o carro se movimenta para Frente Esquerda.
    analogWrite(motorA1, vSpeed);
    analogWrite(motorA2, 0);
    analogWrite(motorB1, 100);
    analogWrite(motorB2, 0);
  }

  else if ((state == 'R') && (vSpeed == 0)) {
    giro1-= 20;
    servo1.write(giro1);
  }

  else if (state == 'G') {   // Se o estado recebido for igual a 'G', o carro se movimenta para Frente Direita.
    analogWrite(motorA1, 100);
    analogWrite(motorA2, 0);
    analogWrite(motorB1, vSpeed);
    analogWrite(motorB2, 0);
  }

  else if (state == 'B') { // Se o estado recebido for igual a 'B', o carro se movimenta para trás.
    analogWrite(motorA1, 0);
    analogWrite(motorB1, 0);
    analogWrite(motorB2, vSpeed);
    analogWrite(motorA2, vSpeed);
  }

  else if (state == 'H') {  // Se o estado recebido for igual a 'H', o carro se movimenta para Trás Esquerda.
    analogWrite(motorA1, 0);
    analogWrite(motorA2, vSpeed);
    analogWrite(motorB1, 0);
    analogWrite(motorB2, 100);
  }

  else if (state == 'J') {  // Se o estado recebido for igual a 'J', o carro se movimenta para Trás Direita.
    analogWrite(motorA1, 0);
    analogWrite(motorA2, 100);
    analogWrite(motorB1, 0);
    analogWrite(motorB2, vSpeed);
  }

  else if (state == 'L') {   // Se o estado recebido for igual a 'L', o carro se movimenta para esquerda.
    analogWrite(motorA1, 0);
    analogWrite(motorA2, vSpeed);
    analogWrite(motorB1, vSpeed);
    analogWrite(motorB2, 0);
  }
  else if (state == 'R') {   // Se o estado recebido for igual a 'R', o carro se movimenta para direita.
    analogWrite(motorA1, vSpeed);
    analogWrite(motorA2, 0);
    analogWrite(motorB1, 0);
    analogWrite(motorB2, vSpeed);
  }
  else if (state == 'S') {   // Se o estado recebido for igual a 'S', o carro permanece parado.
    analogWrite(motorA1, 0);
    analogWrite(motorA2, 0);
    analogWrite(motorB1, 0);
    analogWrite(motorB2, 0);
  }


  else if (state == 'V') { // Se o estado recebido for iguala 'V', aciona a buzina.
    if (j == 0) {
      tone(buzzer, 1000);
      j = 1;
    }
    else if (j == 1) {
      noTone(buzzer);
      j = 0;
    }
    state = 'n';
  }


}

johnwasser

#1
Oct 21, 2018, 04:07 pm Last Edit: Oct 21, 2018, 04:08 pm by johnwasser
Code: [Select]
   digitalRead (vSpeed);
This line does nothing. If you want to read a number from Serial Monitor try:
Code: [Select]
vSpeed = Serial.parseInt();
That will read characters from Serial until it finds something that looks like a number or reaches the timeout (1 second by default).  If it doesn't receive a number it will return 0.
Send Bitcoin tips to: 1G2qoGwMRXx8az71DVP1E81jShxtbSh5Hp

Go Up