Код для лодки, с датчиком цвета и света

Тема в разделе "Arduino & Shields", создана пользователем Paha, 18 дек 2018.

  1. Paha

    Paha Нуб

    Добрый день, нужна помощь с кодом.
    Задание такое:
    лодка стартует с точки, где не виден световой сигнал от маяка; – лодка движется вперёд, сканируя окрестности световым датчиком в поисках маяка; – лодка находит маяк и поворачивается так, чтобы двигаться точно на свет; – лодка останавливается перед маяком и ожидает цветного светового сигнала для выбора маршрута; – лодка получает и интерпретирует сигнал и огибает центральный «остров» соответственно справа или слева; – лодка прибывает на финиш и останавливается. Световой сигнал от маяка в режиме поиска — яркий белый свет, состояние «включен» — 0,5 с, «выключен» — 0,5 с. Продолжительность работы в этом режиме — 1 минута. По истечении этого времени маяк переходит в режим указания трассы. Световой сигнал от маяка в режиме указания трассы — яркий красный («налево») или яркий зелёный («направо») свет, непрерывно включен. Продолжительность работы в этом режиме — 1 минута. По истечении этого времени маяк переходит в режим поиска. В течение всего времени одной попытки указание трассы не изменяется.
    На лодке установлено 3 ультразвуковых дальномера (2 по бокам, 1 спереди),
    и датчик цвета и света (tcs34725) который направлен вперед.
    ошибку выдает в строчке "ДАТЧИК цвета???" (stray '\320' in program)
    файл прикрепил ниже, скорее всего ошибка не только в этом) буду благодарен за любую помощь)
     

    Вложения:

    • LODKA.ino
      Размер файла:
      2,3 КБ
      Просмотров:
      362
    Последнее редактирование: 18 дек 2018
  2. vvr

    vvr Инженерище

    хватит ли чувствительности датчика и как вы собираетесь определять расстояние до маяка.
     
  3. parovoZZ

    parovoZZ Гуру

    а это что за операнд? ino файлы не просматриваю - не на чем.
     
  4. Ariadna-on-Line

    Ariadna-on-Line Гуру

    82 if ДАТЧИК цвета??? красный то стоп
    ...
    90 ДАТЧИК цвета???

    Не заданы пины где где дачики висят. Добавьте строки типа
    #define Red_sensor N1
    #define Green_sensor N2

    Ну и
    82 if (Red_sensor == 0, 1 ???) {...}
    ...
    90 if (Green_sensor == 0, 1 ???) {...}
     
  5. Airbus

    Airbus Радиохулиган Модератор

    Блокнотом можно просмотреть
     
  6. Paha

    Paha Нуб

    ультразвуковым дальномером
     
  7. Paha

    Paha Нуб

    тогда вот так)
    #include <Adafruit_CircuitPlayground.h>
    #include <Servo.h>
    #include <NewPing.h>


    Servo myservo; // сервопривод D6
    #define motor_1 9
    #define motor_2 10

    // скорость лодки 0..255
    int speed = 50;

    // частоты цвета
    int redFrequency = 0;
    int greenFrequency = 0;
    int blueFrequency = 0;
    int red = 0;
    int green = 0;
    int blue = 0;
    int light = 0;

    // использующийся путь до маяка: 0 - не найден, 1 - нужен поворот, 2 - повернули, 3 - остановились у маяка, 4 - END
    int find_light = 0;

    //использующийся путь от маяка: 0 - не найден, 1 - вправо, 2 - влево, 3 - END
    int way = 0;



    // левый датчик расстояния
    #define L_TRIG 11
    #define L_ECHO 12
    #define L_TIMEOUT 30000
    NewPing L_D (L_TRIG, L_ECHO, L_TIMEOUT);

    // правый датчик расстояния
    #define R_TRIG 4
    #define R_ECHO 5
    #define R_TIMEOUT 30000
    NewPing R_D(R_TRIG, R_ECHO, R_TIMEOUT);

    // передний датчик расстояния
    #define F_TRIG 2
    #define F_ECHO 3
    #define F_TIMEOUT 30000
    NewPing F_D(F_TRIG, F_ECHO, F_TIMEOUT);

    void setup() {
    myservo.attach(6);

    pinMode(L_TRIG, OUTPUT);
    pinMode(L_ECHO, INPUT);

    pinMode(R_TRIG, OUTPUT);
    pinMode(R_ECHO, INPUT);

    pinMode(F_TRIG, OUTPUT);
    pinMode(F_ECHO, INPUT);

    }

    void loop() {
    // 1 действие: едем вперед пока справа или слева исчезнет стена

    while L_D.ping_cm < 3 or R_D.ping_cm < 3
    myservo.digitalWrite(90);
    motor_1.write (HIGH);
    motor_2.write (LOW);
    delay (500);
    // 2 поворот в свободную зону
    if L_D.ping_cm > 3
    myservo.digitalWrite(150);
    motor_1.write (HIGH);
    motor_2.write (LOW);
    delay (700);
    else
    myservo.digitalWrite(30);
    motor_1.write (HIGH);
    motor_2.write (LOW);
    delay (700);

    if ДАТЧИК цвета??? красный то стоп
    motor_1.write (LOW);
    motor_2.write (LOW);
    else if
    myservo.digitalWrite(150);
    motor_1.write (HIGH);
    motor_2.write (LOW);
    else if
    ДАТЧИК цвета???
    myservo.digitalWrite(30);
    motor_1.write (HIGH);
    motor_2.write (LOW);
    motor_1 (LOW);
    motor_2(LOW);
     
  8. Это не корректный код
     
  9. Paha

    Paha Нуб

    а какой корректный?)
     
  10. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Вы хоть ответы читаете ? Как определяется - датчик сработал ? Он изменил напряжение где-то. Как изменил ? : 0 --> 1 или 1 --> 0 - мы не знаем. Мы их не видели. Вы - видели. Где изменил ? - не знает Ардуина. Вот и "объявите" ей - где и как. Вы же их куда-то подсоединяли?!
     
    Последнее редактирование: 19 дек 2018