Косяки программирования.

k4eha
Offline
Зарегистрирован: 27.03.2021

Здравствуйте! Влип полностью компилятор ругается как исправить это немогу догадаться.

Ругань:

/home/k4eha/Документы/ЭЛЕКТРОНИКА/АРДУИНО/МАШИНКА/My_Car_Universal_LAZER_lidar/My_Car_Universal_LAZER_lidar.ino: In function 'void automatik(int)': /home/k4eha/Документы/ЭЛЕКТРОНИКА/АРДУИНО/МАШИНКА/My_Car_Universal_LAZER_lidar/My_Car_Universal_LAZER_lidar.ino:247:15: warning: suggest parentheses around assignment used as truth value [-Wparentheses] if (command = (87)) { ~~~~~~~~^~~~~~ /home/k4eha/Документы/ЭЛЕКТРОНИКА/АРДУИНО/МАШИНКА/My_Car_Universal_LAZER_lidar/My_Car_Universal_LAZER_lidar.ino: In function 'void obzor(int)': /home/k4eha/Документы/ЭЛЕКТРОНИКА/АРДУИНО/МАШИНКА/My_Car_Universal_LAZER_lidar/My_Car_Universal_LAZER_lidar.ino:311:15: warning: suggest parentheses around assignment used as truth value [-Wparentheses]

НАДО ЗДЕСЬ. Если свой код исправлю остальная ругань тоже исчезнет. if (command = (87)) { ~~~~~~~~^~~~~~ /home/k4eha/Arduino/libraries/Adafruit_VL53L0X/src/core/src/vl53l0x_api.cpp: In function 'VL53L0X_PerformSingleRangingMeasurement': /home/k4eha/Arduino/libraries/Adafruit_VL53L0X/src/core/src/vl53l0x_api_core.cpp:1975:3: warning: 'PalRangeStatus' may be used uninitialized in this function [-Wmaybe-uninitialized] if (*pPalRangeStatus == 0) ^ /home/k4eha/Arduino/libraries/Adafruit_VL53L0X/src/core/src/vl53l0x_api.cpp:2197:11: note: 'PalRangeStatus' was declared here uint8_t PalRangeStatus; ^ Скетч использует 20020 байт (62%) памяти устройства. Всего доступно 32256 байт. Глобальные переменные используют 1327 байт (64%) динамической памяти, оставляя 721 байт для локальных переменных. Максимум: 2048 байт.

Конец ругани.

Там с синтаксисом изголялся повсякому сначала было "if (command = 87) {mashina(Speed);}"

#include <SoftwareSerial.h>
SoftwareSerial mySerial(0, 1); // RX, TX
//*  digital pin 4 (соединить с TX на модуле блютуз)
//*  digital pin 5 (соединить с RX на модуле блютуз)

#include   <Stepper.h>

// 1_pin-6_ЗЕЛЁНЫЙ, 2_pin-4_ЖОЛТЫЙ, 3_pin-7_ОРАНЖЕВЫЙ, 4_pin-8_СИРЕНЕВЫЙ




Stepper myStepper(2038, 8, 4, 7, 6);

#include "Adafruit_VL53L0X.h"

Adafruit_VL53L0X lox = Adafruit_VL53L0X();



// Создаем объект, методами которого будем затем пользоваться для получения расстояния.
// В качестве параметров передаем номера пинов, к которым подключены выходы ECHO и TRIG датчика


/*ЛЕВЫЙ      НАЗАД */ int EN1 = 9;   /*ВПЕРЁД*/ int EN2 = 10;   /*_____       ПРАВЫЙ     ВПЕРЁД*/ int EN3 = 5; /*НАЗАД*/ int EN4 = 3; // драйвер мотора подключен!



byte         BackLight =  A1; //задние стоп сигналы
byte         FrontLight = A2; //ФАРА
int          Speed =     200;  //начальная скорость моторов, сразу после запуска программы на смартфоне
int          kolSteps;
int          button_pin = 11; //КНОПКА ПУСК
int          command;
int unsigned Dist =      300;
int unsigned leftDist =  300;
int unsigned rightDist = 300;
int unsigned lidDist =   300;
boolean      lightFront= false; //переменные для хранения состояния световых приборов и звукового сигнала
boolean      lightBack = false;

void RMGO   (int Speed);
void LMGO   (int Speed);
void RMBACK (int Speed);
void LMBACK (int Speed);
void Stop   (int Speed);
void obzor  (int Speed);
void mashina(int Speed);

void setup() {
  mySerial.begin(9600); Serial.begin(9600); //запускаем виртуальный серийный порт для связи с блютуз модулем
  Serial.begin(2400); //запускаем серийный порт для связи с пк для отладки программы
  lox.begin();
  //настраиваем порты на ввод и вывод----------------



  //далее объявлены пины для связи ардуино и драйвера двигателя
  myStepper.setSpeed(13);
  pinMode (EN1,        OUTPUT); pinMode (EN2, OUTPUT); pinMode (EN3, OUTPUT); pinMode (EN4, OUTPUT);
  pinMode (button_pin, INPUT ); // Инициализируем цифровой вход КНОПКИ ПУСК.
  pinMode (BackLight,  OUTPUT);
  pinMode (FrontLight, OUTPUT);

}





void loop()
{
  delay (200);
  if (digitalRead(button_pin) == HIGH)
  {
    mashina(Speed);
  }
  delay (100);
  Serial.println("_ВКЛЮЧИТЕ_!");
}

void RMGO (int Speed) { //правый мотор вперед
    delay       (10);
    analogWrite (EN3, 250);
    delay       (100);
    analogWrite (EN3, Speed);
    analogWrite (EN4, 0);
    mashina(Speed);
  }


void LMGO (int Speed) { //левый мотор вперед
    delay       (10);
    analogWrite (EN2, 250);
    delay       (100);
    analogWrite (EN1, 0);
    analogWrite (EN2, Speed);
    mashina(Speed);
  }


void LMBACK (int Speed) { //левый мотор назад
    delay       (10);
    analogWrite (EN1, 250);
    delay       (100);
    analogWrite (EN1, Speed);
    analogWrite (EN2, 0);
    mashina(Speed);
  }

void RMBACK (int Speed) { //правый мотор назад
    delay       (10);
    analogWrite (EN4, 250);
    delay       (100);
    analogWrite (EN3, 0);
    analogWrite (EN4, Speed);
    mashina(Speed);
  }

void Stop () {  //оба мотора стоп
    delay       (20);
    analogWrite (EN1, 0); analogWrite (EN2, 0);
    analogWrite (EN3, 0); analogWrite (EN4, 0);
    mashina(Speed);
  }



void mashina(int Speed)
{



  if (digitalRead(button_pin) == HIGH)
  {
    loop();
  }





  delay (20);
  VL53L0X_RangingMeasurementData_t measure;
  lidDist = measure.RangeMilliMeter;
  lox.rangingTest(&measure, false);


  if (mySerial.available() > 0)
  { //если в буфере программного серийного порта есть данные
    command = mySerial.read();
  }    //считываем их и запоминаем комманду

  Serial.println(command);       //выводим команду в монитор порта (используется для отладки)

  
  switch (command)
  { //выполняем действия в зависимости от полученной по блютуз команде
    case 70: {
        if (lidDist > 200) {
          LMGO(Speed);  //Едем вперед
          RMGO(Speed);
        } break;
      }
    case 66: {
        LMBACK(Speed);  //Едем назад
        RMBACK(Speed);
        break;
      }
    case 82: {
        LMGO(Speed);  //танковый разворот направо
        RMBACK(Speed);
        break;
      }
    case 76: {
        RMGO(Speed);  //танковый разворот налево
        LMBACK(Speed);
        break;
      }
    case 73: {
        LMGO(Speed);  //Вперед и направо
        RMGO(Speed / 3);
        break;
      }
    case 71: {
        RMGO(Speed);  //Вперед и налево
        LMGO(Speed / 3);
        break;
      }
    case 74: {
        LMBACK(Speed);  //назад направо
        RMBACK(Speed / 3);
        break;
      }
    case 72: {
        RMBACK(Speed);  //назад налево
        LMBACK(Speed / 3);
        break;
      }
    case 48: Speed = 120; break; //задаем скорость
    case 49: Speed = 125; break; //задаем скорость
    case 50: Speed = 135; break; //задаем скорость
    case 51: Speed = 145; break; //задаем скорость
    case 52: Speed = 160; break; //задаем скорость
    case 53: Speed = 175; break; //задаем скорость
    case 54: Speed = 190; break; //задаем скорость
    case 55: Speed = 205; break; //задаем скорость
    case 56: Speed = 220; break; //задаем скорость
    case 57: Speed = 235; break; //задаем скорость
    case 113: Speed = 255; break; //задаем скорость
    case 87: lightFront = true; break;   //меняем состояние переменной управления передними фарами (включение)
    case 119: lightFront = false; break; //меняем состояние переменной управления передними фарами (отключение)
    case 85: lightBack =  true; break;    //меняем состояние переменной управления задними светодиодами (включение)
    case 117: lightBack =  false; break; //меняем состояние переменной управления задними светодиодами(отключение)
  }

  // управляем светодиодами и пьезопищалкой
  if (lightFront)  {
    digitalWrite(FrontLight, HIGH); //включаем передние фары
  }
  if (!lightFront) {
    digitalWrite(FrontLight, LOW); //либо отключаем их.
  }
  if (lightBack)   {
    digitalWrite(BackLight,  HIGH); //включаем задние стоп сигналы
  }
  if (!lightBack)  {
    digitalWrite(BackLight,  LOW); //либо отключаем их
  }

}



void automatik(int Speed)
{

  if (mySerial.available() > 0)
  { //если в буфере программного серийного порта есть данные
    command = mySerial.read();
  }     //считываем их и запоминаем комманду

  Serial.println(command);       //выводим команду в монитор порта (используется для отладки)
  if (command = (87)) {
    (mashina(Speed));
  }

  if (digitalRead(button_pin) == HIGH)
  {
    loop();
  }


  delay (20);
  VL53L0X_RangingMeasurementData_t measure;
  lidDist = measure.RangeMilliMeter;
  lox.rangingTest(&measure, false);



  Serial.print(lidDist);
  Serial.println("ХОД");



  if (lidDist >= 1000) {
    Speed = 255;
  }
  if (lidDist <= 1000) {
    Speed = 200;
  }
  if (lidDist <= 500)  {
    Speed = 100;
  }
  if (lidDist <= 350)  {
    Speed = 60;
  }
  if (lidDist <= 200)  {
    obzor(Speed);
  }

  delay       (10);
  analogWrite (EN3, 250);   analogWrite (EN2, 250);
  delay       (100);
  analogWrite (EN3, Speed); analogWrite (EN1, 0);
  analogWrite (EN4, 0);     analogWrite (EN2, Speed);

  automatik(Speed);

}








void obzor(int Speed)
{

  if (mySerial.available() > 0)
  { //если в буфере программного серийного порта есть данные
    command = mySerial.read();
  }    //считываем их и запоминаем комманду

  Serial.println(command);       //выводим команду в монитор порта (используется для отладки)
  if (command = (87)) {
    (mashina(Speed));
  }
  if (digitalRead(button_pin) == HIGH)
  {
    loop();
  }


  delay (20);
  analogWrite (EN1, 0); analogWrite (EN2, 0);
  analogWrite (EN3, 0); analogWrite (EN4, 0);
  Serial.println("_СТОП");

  VL53L0X_RangingMeasurementData_t measure;
  delay (20);
  lox.rangingTest(&measure, false);
  lidDist = measure.RangeMilliMeter;

  if (lidDist <= 200)
  {
    delay (1000);
    Dist = lidDist;
    myStepper.step(400);
    delay (20);
    VL53L0X_RangingMeasurementData_t measure;
    lox.rangingTest(&measure, false);
    lidDist = measure.RangeMilliMeter;
    leftDist = lidDist;
    delay (2000);
    myStepper.step(-800);
    delay (20);
    lox.rangingTest(&measure, false);
    lidDist = measure.RangeMilliMeter;
    delay (1000);
    rightDist = lidDist;
    myStepper.step(400);


    Serial.print(lidDist);
    Serial.println("ОГЛЯДКИ");



    if (leftDist >= rightDist) {

      Serial.print(leftDist);
      Serial.println("_ЛЕВО");
      Serial.print(rightDist);
      Serial.println("_ПРАВО");
      Serial.print(Dist);
      Serial.println("_ПРЯМО");




      delay       (2000);
      delay       (10);
      analogWrite (EN2, 250);   analogWrite (EN4, 250);
      delay       (100);
      analogWrite (EN1, 0);     analogWrite (EN3, 0);
      analogWrite (EN2, 200);   analogWrite (EN4, 200); //ВПРАВО

      delay (20);
      VL53L0X_RangingMeasurementData_t measure;
      lox.rangingTest(&measure, false);

      lidDist = measure.RangeMilliMeter;

      if (lidDist <= 200)
      {
        obzor(Speed);
      }
    }

    delay (2000);

    
    analogWrite (EN3, 250); analogWrite (EN1, 250);
    delay       (100);
    analogWrite (EN3, 200); analogWrite (EN1, 200);
    analogWrite (EN4, 0);   analogWrite (EN2, 0); //ВЛЕВО

    delay (20);
    lox.rangingTest(&measure, false);

    lidDist = measure.RangeMilliMeter;

    if (lidDist <= 200)
    {
      obzor(Speed);
    }


    if (Dist <= 200 && leftDist <= 200 && rightDist <= 200)
    {
      delay       (2000);
      analogWrite (EN1, 250);  analogWrite (EN4, 250);
      delay       (100);
      analogWrite (EN1, 200);  analogWrite (EN3, 0);
      analogWrite (EN2, 0);    analogWrite (EN4, 200);

      Serial.print(lidDist);
      Serial.println("СДАТЬ ЗАДОМ");
      obzor(Speed);
    }
  }
  automatik(Speed);
}

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Вот так: «=» - это присваивание, а сравнение вот так: «==». Разницу ощущаете?)

k4eha
Offline
Зарегистрирован: 27.03.2021

Спасибо, ощутил разницу :-)) помогло!