atmega 8 датчики холла и rgb светодиод

Тема в разделе "Arduino & Shields", создана пользователем sanik, 10 мар 2014.

  1. sanik

    sanik Гик

    Спасибо большое разобрался все заработало!!!:)
    Еще вопросик в конструкции else if можно сколько угодно строчек else if вставлять?
     
  2. rav_75

    rav_75 Гик

    Код (Text):
    void loop()
    {
      State1 = digitalRead(ha1);
      State2 = digitalRead(ha2);
      switch (var)
      {
      case MODE_INIT:
        zastav();
        var = NETRAL;
        break;
      case NETRAL:
        ntr();
        if(State1)
        {
          one();
          var = FIRST;
        }
        else if(State2)
        {
          two();
          var = SECOND;
        }
        else var = NETRAL;
        break;
      case FIRST:
        if(!State1) var = NETRAL;
        break;
      case SECOND:
        if(!State2) var = NETRAL;
        break;
      }
    }
     
    так попробуйте. У Вас в функции ntr() delay на секунду, а Вы ее два раза запускаете подряд.
     
  3. rav_75

    rav_75 Гик

    да. Пока не проц не посинеет )))
     
  4. sanik

    sanik Гик

    Спасибо буду дальше продолжать!
     
  5. sanik

    sanik Гик

    А не можете сказать что это ошибок нет на что он ругается?
    Код (Text):
    In file included from C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/Arduino.h:191,
                    from Number_2.ino:17:
    C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/WCharacter.h:26: error: expected ',' or '...' before numeric constant
    C:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino/WCharacter.h:27: error: expected ',' or '...' before numeric constant

     
     
    Последнее редактирование: 10 мар 2014
  6. sanik

    sanik Гик

    Кто мне подскажет почему два однотипных кода один (1код) компилируется второй (2код) не хочет коды индиитичны запятые ему не нравятся?
    (1код)
    Код (Text):
    #define ha1  8    // первый датчик холла
    #define ha2  7    // второй датчик холла
    #define rdp  2
    #define f    3
    #define a    4
    // переменная для считывания состояния датчика
     
    int State1,State2 =0;

    #define MODE_INIT 0
    #define NETRAL    1
    #define FIRST    2
    #define SECOND    3
    #define THIRD    4
    #define FOURTH    5
    #define FIVE      6
    int var = MODE_INIT;
    void setup()
    {
    pinMode(ha1, INPUT);
    pinMode(ha2, INPUT);
    pinMode(rdp,OUTPUT);
    pinMode(f,OUTPUT);
    pinMode(a,OUTPUT);
    }
    void zastav()
    // здесь все работает по очереди загорелись и по очереди погасли
    {
      digitalWrite(rdp,HIGH);
      delay(250);
      digitalWrite(a,HIGH);
      delay(250);
      digitalWrite(f,HIGH);
      delay(250);
      digitalWrite(rdp,LOW);
      delay(100);
      digitalWrite(a,LOW);
      delay(100);
      digitalWrite(f,LOW);
      delay(100);
    }
    void ntr()
    {
      // должен мигать один красный на данный момент зеленый и
      //синий горят а красный мигает
      digitalWrite(rdp,LOW);
      digitalWrite(a,HIGH);
      digitalWrite(f,HIGH);
      delay(500);
      digitalWrite(rdp,HIGH);
      digitalWrite(a,HIGH);
      digitalWrite(f,HIGH);
      delay(500);
    }
    void one()
    // ничего не происходит :-(
    {
      digitalWrite(rdp,HIGH);
      digitalWrite(a,LOW);
      digitalWrite(f,HIGH);
    }
    void two()
    // поднес магнит все гаснет
    // должно наоборот поднес все горят убрал переходим void ntr()
    {
      digitalWrite(rdp,LOW);
      digitalWrite(a,LOW);
      digitalWrite(f,HIGH);
    }
    //void three()
    //void four()
    //void five()
    void loop()
    {
      State1 = digitalRead(ha1);
      State2 = digitalRead(ha2);
      switch (var)
      {
      case MODE_INIT:
        zastav();
        var = NETRAL;
        break;
      case NETRAL:
        ntr();
        if(State1)
        {
          one();
          var = FIRST;
        }
        else if(State2)
        {
          two();
          var = SECOND;
        }
        else var = NETRAL;
        break;
      case FIRST:
        if(!State1) var = NETRAL;
        break;
      case SECOND:
        if(!State2) var = NETRAL;
        break;
      }
    }
    (2код)
    Код (Text):
    // segments
    #define a  2
    #define b  3
    #define c  4
    #define d  5
    #define e  6
    #define f  7
    #define g  8
    // hall
    #define ha1 9
    #define ha2 10
    #define ha3 11
    #define ha4 12
    #define ha5 13
    #define ha6 14
    // переменные для считывания состояния датчика
    int State1,State2,State3,State4,State5,State6 =0;

    #define MODE_INIT 0
    #define NETRAL    1
    #define FIRST    2
    #define SECOND    3
    #define THIRD    4

    void setup()
    {
      pinMode(ha1, INPUT);
      pinMode(ha2, INPUT);
      pinMode(ha3, INPUT);
      pinMode(ha4, INPUT);
      pinMode(ha5, INPUT);
      pinMode(ha6, INPUT);
      pinMode(a, OUTPUT);
      pinMode(b, OUTPUT);
      pinMode(c, OUTPUT);
      pinMode(d, OUTPUT);
      pinMode(e, OUTPUT);
      pinMode(f, OUTPUT);
      pinMode(g, OUTPUT);
    }
    void zastav()
    {
      digitalWrite(a, LOW);
      delay(100);
      digitalWrite(b, LOW);
      digitalWrite(a, HIGH);
      delay(100);
      digitalWrite(g, LOW);
      digitalWrite(b, HIGH);
     
    }
    void ntr()
    {
      digitalWrite(f, LOW);
      digitalWrite(b, LOW);

      delay(300);
      digitalWrite(f, HIGH);
      digitalWrite(b, HIGH);

      delay(300);
    }
    void one()
    {
      digitalWrite(a, HIGH);

    }
    void two()
    {
      digitalWrite(a, LOW);
      digitalWrite(b, LOW);

    }

    void loop()
    {
      State1 = digitalRead(ha1);
      State2 = digitalRead(ha2);
      State3 = digitalRead(ha3);

      switch (var)
      {
        case MODE_INIT:
     
        case FOURTH:
        if(!State4) var = NETRAL;
        break;
        case FIVE:
        if(!State5) var = NETRAL;
        break;
        case R:
        if(!State6) var = NETRAL;
        break;
      }
    }
     
    Последнее редактирование: 10 мар 2014
  7. rav_75

    rav_75 Гик

    методом научного тыка выяснено, что ноги растут отсюда: #define c 4
     
  8. sanik

    sanik Гик

    Блин и какого черта ему надо? :eek:
     
  9. sanik

    sanik Гик

    Что то не понятное!!! Заменил на j и все??? Мистика какая то!!:mad:
     
  10. rav_75

    rav_75 Гик

    Понятия не имею. А вообще константы и переменные из одной буквы... Как-то так бы LED_PIN_C
     
  11. sanik

    sanik Гик

    Вот я примерно догадался но он мне вес мозг вынес! Я наверно случайно на русский переключил но загадка в том что я полностью с проверкой перепечатал на английской раскладке!!! Да и шут с ним главное заработало!!! Спасибо за пинок в нужную сторону!!!
     
  12. rav_75

    rav_75 Гик

    Посмотрел еще раз и, честно говоря, не понимаю, для чего замудрили так код.:D Вынесите вызов функции zastav() в конец setup(), а loop() сделайте так
    Код (Text):
    void loop()
    {
      State1 = digitalRead(ha1);
      State2 = digitalRead(ha2);
      State3 = digitalRead(ha3);
      State4 = digitalRead(ha4);
      State5 = digitalRead(ha5);
      State6 = digitalRead(ha6);
      if(State1) one();
      else if(State2) two();
      else if(State3) three();
      else if(State4) four();
      else if(State5) five();
      else if(State6) rewers();
      else ntr();
    }
     
    Вроде должно работать аналогично, зато все просто и ясно.
     
  13. sanik

    sanik Гик

    Ну я еще только учусь, пытался разобраться в case :)
    Для меня пока проще было так сделать. Если так так еще надо было массив цифр сделать но это мне пока не по зубам :)
     
  14. Megakoteyka

    Megakoteyka Оракул Модератор

    PuntoSwitcher частенько гадит подобным образом. Я ему все среды разработки в исключения сразу заношу.
     
  15. sanik

    sanik Гик

    :) А у меня эта гадость давно удалена Просто небольшая запара получилась. И на форуме и скетч писать сложновато и так то мозги кипят... Зато решил с больше не использовать:)
     
  16. Megakoteyka

    Megakoteyka Оракул Модератор

    А ведь строчка типа char c = ... - классика :)
     
  17. rav_75

    rav_75 Гик

    Подозреваю, что проблема не в русской "с". Именно с латинской такие траблы, проверьте. Вот же, что говорит компилятор
    Откроем WCharacter.h и увидим
    и так далее. Налицо конфликт с библиотекой. Видимо препроцессор умудряется и в либу запустить свои длинные ручонки.
     
  18. Megakoteyka

    Megakoteyka Оракул Модератор

    Да, не в русской. Я вроде понял, в чем проблема, но сейчас уже не могу связно сформулировать, спать охота) Кратко - не все буковки можно дефайнить, это фишка препроцессора.
    Говорят, что нельзя использовать: c, h, l, n, p, s, w.
     
    Последнее редактирование: 19 мар 2014
  19. sanik

    sanik Гик

    У меня тоже такие подозрения были:)
     
  20. Aref

    Aref Нуб

    У меня сейчас такая же проблема. Стоит ввести функцию для сонара
    Код (Text):
    int sonar1 (int Trig1, int Echo1){
      int impulseTime;
      int distanceUP_sm;
      impulseTime = 0;
      distanceUP_sm = 0;
      digitalWrite(Trig1, HIGH);
      delayMicroseconds(10);
      digitalWrite(Trig1, LOW);
      impulseTime = pulseIn(Echo1, HIGH);
      distanceUP_sm = impulseTime/58;
      delay(100);
      return distanceUP_sm;
    }
    Как компилятор придирается к четвертой строчке этого куска кода
    С ошибкой " expected ',' or '...' before numeric constant". Если функцию сонара не вводить, то все нормально. Ошибка тут явно не в символах от раскладки. Но я не понял как эту проблему с библеотекой решать. Разъясните, пожалуйста.

    В дефайнах у меня только вот это
    Код (Text):
    // колеса
    #define D1 7        
    #define M1 8        
    #define D2 9      
    #define M2 10      
    #define ENA 0 // правый
    #define ENB 1
    // голова
    #define servoPin1 3
    #define Trig1 14
    #define Echo1 15

    // клешня

    #define servoPin2 4
    #define servoPin3 2
    #define servoPin4 12
    #define Trig2 5
    #define Echo2 6
    А без функции приходится каждый раз вставлять лишний код для работы сонара
    Код (Text):
    digitalWrite(Trig2, HIGH);
    delayMicroseconds(10);  // равный 10 микросекундам
    digitalWrite(Trig2, LOW); // Отключаем
    impulseTime = pulseIn(Echo2, HIGH); // Замеряем длину импульса
    distanceDOWN_sm = impulseTime/58; // Пересчитываем в сантиметры  // считываем время, прошедшее с момента запуска программы
    delay(60);
     
    Последнее редактирование: 3 апр 2014