Помогите со скетчем!

Тема в разделе "Arduino & Shields", создана пользователем _Assassin_, 9 май 2017.

  1. _Assassin_

    _Assassin_ Нерд

    Всем привет! Пишу скетчи для "Робоняши", а именно для датчиков линии. Скетч-то я уже написал, а вот добавить его в основной код у меня не получается(если быть точнее, при нажатии кнопки на ИК пульте робот входит в режим езды по линии, а вот выйти из него не может). Подскажите, пожалуйста, в чём заключается ошибка.
    Вот скетч:
    Код (C++):
    #include <Wire.h>
    #include <Strela.h>
    #include <IRremote.h>
    int LEFT_SENSOR_PIN = P1;
    int RIGHT_SENSOR_PIN = P8;
    int RECV_PIN = P12;
    int ff = 1;
    #define L1 60
    #define L2 61
    #define L3 62
    #define L4 63
    IRrecv irrecv(RECV_PIN);
    decode_results results;
    const unsigned long Vpered = 16736925;
    const unsigned long Nazad = 16754775;
    const unsigned long Vlevo = 16720605;
    const unsigned long Vpravo = 16761405;
    const unsigned long Stoppp = 16712445;
    const unsigned long VKL = 16728765;
    const unsigned long ViKL = 16730805;
    const unsigned long Svet = 16738455;
    const unsigned long SvetOFF = 16750695;
    const unsigned long LiniaON = 16756815;
    const unsigned long LiniaOFF = 16724175;
    int echoPin = P6;
    int trigPin = P7;
    long randNumber;
    void Vperedl()
    {
    drive(100, 100);
    }
    void Vlevol()
    {
    drive(55, -55);
    }
    void Vpravol()
    {
    drive(-55, 55);
    }
    void Nazadl()
    {
    drive(-100, -100);
    }
    void Stopl()
    {
    drive(0, 0);
    }
    void Pramo()
    {
    drive(100, 100);
    }
    void Povorotvpravo()
    {
    drive(55, -55);
    }
    void Povorotvlevo()
    {
    drive(-55, 55);
    }
    void Svetl()
    {
    uDigitalWrite(P5, HIGH);
    }
    void Vperedll()
    {
    drive(60, 60);
    }
    void Vlevoll()
    {
    drive(-50, 50);
    }void Vpravoll()
    {
    drive(50, -50);
    }
    void SvetOFFl()
    {
    uDigitalWrite(P5, LOW);
    }
    void setup()
    {
    Serial.begin(9600);
    irrecv.enableIRIn();
    irrecv.resume();
    motorConnection(1, 0);
    uPinMode(trigPin, OUTPUT);
    uPinMode(echoPin, INPUT);
    uPinMode(BUZZER, OUTPUT);
    uPinMode(P5, OUTPUT);
    }
    void loop()
    {
    uDigitalWrite(L1, HIGH);
    uDigitalWrite(L2, HIGH);
    uDigitalWrite(L3, HIGH);
    uDigitalWrite(L4, HIGH);
    if (irrecv.decode(&results))
    {
    Serial.println(results.value, DEC);
    if (results.value ==  Vpered)
    {
    Vperedl();
    delay(500);
    }
    if (results.value == Vlevo)
    {
    Vlevol();
    delay(500);
    }
    if (results.value == Vpravo)
    {
    Vpravol();
    delay(500);
    }
    if (results.value == Nazad)
    {
    Nazadl();
    delay(500);
    }
    if (results.value == Stoppp)
    {
    Stopl();
    delay(500);
    }
    if (results.value == Svet)
    {
    Svetl();
    delay(200);
    }
    if (results.value == SvetOFF)
    {
    SvetOFFl();
    delay(200);
    }
    irrecv.resume ();
    }
    if (results.value == VKL)
    {
    while (1<2){
    int duration, cm;
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    duration = pulseIn(echoPin, HIGH);
    Serial.println(duration);
    if (duration>2700)
    {
    Pramo();
    }
    else
    {
    int rnd = random(1, 10);
    if (rnd > 5) {
    Povorotvpravo();
    delay(500);
    }
    else
    {
    Povorotvlevo();
    delay(500);
    }
    }
    decode_results results;
    if (irrecv.decode(&results))
    {
    if (results.value == ViKL)
    {
    break;
    }}}
    irrecv.resume();
    }
    if (results.value == LiniaON)
    {
    while(ff<2){
    boolean left = !digitalRead(LEFT_SENSOR_PIN);
    boolean right = !digitalRead(RIGHT_SENSOR_PIN);
    Serial.println(digitalRead(RIGHT_SENSOR_PIN));
    Serial.println(digitalRead(LEFT_SENSOR_PIN));
    if(digitalRead(RIGHT_SENSOR_PIN) == 0 && digitalRead(LEFT_SENSOR_PIN) == 0){
    Vperedll();
    }
    if(digitalRead(LEFT_SENSOR_PIN) == 0 && digitalRead(RIGHT_SENSOR_PIN) == 1){
    Vlevoll();
    }
    if(digitalRead(LEFT_SENSOR_PIN) == 1 && digitalRead(RIGHT_SENSOR_PIN) == 0){
    Vpravoll();
    }
    }
    decode_results results;
    if (irrecv.decode(&results))
    {
    if (results.value == LiniaOFF)
    {
    ff = 3;
    }
    irrecv.resume();
    }
    }
    }
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    это что?

    И перед выкладыванием скетча нажмите CTRL+T.
     
  3. _Assassin_

    _Assassin_ Нерд

    На это ноль внимания. Вот с каким участком у меня проблемы:
    В режим езды по линии входит, а выйти - нет.
     
  4. ostrov

    ostrov Гуру

    Даже глаза ломать не буду. Кому то лень отформатировать, а мы тут мучайся.
     
  5. NikitOS

    NikitOS Король шутов Администратор

    Зачем мне терминал??????
     
  6. Tomasina

    Tomasina Сушитель лампочек Модератор

    а при чем тут терминал?
    CTRL+T форматирует код так, чтобы он хоть как-то был похож на читабельный. ;)
     
  7. NikitOS

    NikitOS Король шутов Администратор

    у меня или терминал или новая вкладка
     
  8. Richard

    Richard Нерд

    зачем? есть же while(TRUE)

    1) while(TRUE){...} это как delay(...) : использовать в совсем крайнем случае. поэтому из цикла и не выходит.

    старайся не использовать бесконечные циклы. есть void loop(){...} и все, не нужно больше нагружать контроллер сравнениями и свой мозг тестами.
     
  9. Tomasina

    Tomasina Сушитель лампочек Модератор

    Может у меня IDE несвежая, но не настолько же ;)
    2017-05-10_17-08-23.png
     
  10. NikitOS

    NikitOS Король шутов Администратор

  11. NikitOS

    NikitOS Король шутов Администратор

    у меня linux
     
  12. Richard

    Richard Нерд

    какая разница то? идешка везде одна и та же
     
  13. NikitOS

    NikitOS Король шутов Администратор

    мммммм.... неа
     
  14. serg_admin

    serg_admin Гик

    Уменя Linux есть автоформатирование 1.8.1
     
  15. Richard

    Richard Нерд

    я даже не столько про автоформатирование, сколько про все фичи впринципе. версии для разных осей может выходят и не всегда в одно и то же время, но всегда с одинаковым функционалом. не понимаю, причем тут линукс как таковой.