Помощь новичку

Тема в разделе "Arduino & Shields", создана пользователем s2dent6732, 23 дек 2016.

  1. Tapestry

    Tapestry Нуб

    Всем привет.Вопрос такой;можно ли поставить отдельно другую,свежую версию IDE.Стоит версия 1.0.5-r2,а теперь нужна 1.6.4,или надо первую убраить и ставить вторую.
     
  2. Tomasina

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

    можно, если поставить в другую папку.
    С библиотеками сложнее - либо делать у каждой версии свой комплект библиотек, либо сложить их в общую папку и в IDE прописать пути к ней.
     
  3. vvr

    vvr Инженерище

    у меня установлено 6 версий и в каждой свои библиотеки)))
    не знаю, может и не правильно, но работает...
     
    ИгорьК нравится это.
  4. ИгорьК

    ИгорьК Гуру

    Ардуино - это религия :)
     
    vvr нравится это.
  5. mcureenab

    mcureenab Гуру

    Функцией itoa преобразуем число в массив цифр. Вычитанием символа 0 Цифры из ASCII преобразуем в бинарное представление.
     
  6. rkit

    rkit Гуру

    Код (C++):
    size_t i = sizeof(PressDisp);
    do {
      PressDisp = val % 10;
      val /= 10;
    }
    while (i--);
     
    Последнее редактирование: 23 фев 2017
  7. Tapestry

    Tapestry Нуб

    VVR,пожалуста по подробней,для чайника.Буду очень признателен.Первая версия стоит на НАНЕ-помошник при дисциляции.Показывает температуру куба,крепость спиртовых паров,пищит при установленных температурах.Новые версии буду ставить на УНО и навешивать разные опции.Всё это придумал коллега по форуму самогонщиков.Я старательно копирую.
     
  8. wildofficer

    wildofficer Нуб

    День добрый. Подскажите почему не останавливается loop ? когда вставляю while(true); loop прерывается, а с static byte counter = 0; do { counter++;} while(counter<3); работает непрерывно.

    Код (C++):
    int ledPins[] = {2,3,4,5,6,7,8,9};
    void setup()
      {
       for(int i = 0; i < 8; i++)
      {
          pinMode(ledPins[i],OUTPUT);
      }

      pinMode(ledPins[0],OUTPUT);
      pinMode(ledPins[1],OUTPUT);
      pinMode(ledPins[2],OUTPUT);
      pinMode(ledPins[3],OUTPUT);
      pinMode(ledPins[4],OUTPUT);
      pinMode(ledPins[5],OUTPUT);
      pinMode(ledPins[6],OUTPUT);
      pinMode(ledPins[7],OUTPUT);
    }

    void loop()
    {
    oneAfterAnotherNoLoop();

    static byte counter = 0;
      do
    {
       counter++;
      }
      while(counter<3);
     
    }

    void oneAfterAnotherNoLoop()
    {
      int delayTime = 500;
      digitalWrite(ledPins[0], HIGH);
      delay(delayTime);

    Спасибо!
     
  9. Unixon

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

    loop() никогда не останавливается, в этом его фишка и вообще жизненное предназначение.

    Какое поведение программы вы понимаете под "прерывается" и "работает непрерывно"? В первом случае у вас цикл while должен быть бесконечным (и в нем все повиснет), во втором пролетать незаметно.

    И вообще, не забывайте, что делает main:
    Код (C++):

    int main(void)
    {
      init();

      initVariant();

    #if defined(USBCON)
      USBDevice.attach();
    #endif

      setup();

      for (;;) {
      loop();
      if (serialEventRun) serialEventRun();
      }

      return 0;
    }
     
     
  10. Tomasina

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

    Попробуй так:
    Код (C++):
    const byte ledPins[] = {2,3,4,5,6,7,8,9};

    void oneAfterAnotherNoLoop(void);

    void setup()
    {
        pinMode(ledPins[i],OUTPUT);
    }

    void loop()
    {
        oneAfterAnotherNoLoop();
        static byte counter = 0;
        counter++;
        if(counter > 3)
        {
            counter = 3;
            return;
        }
    }

    void oneAfterAnotherNoLoop()
    {
      const int delayTime = 500;
      digitalWrite(ledPins[0], HIGH);
      delay(delayTime);
        }
     
  11. wildofficer

    wildofficer Нуб

    Все равно повторяется loop
     
  12. wildofficer

    wildofficer Нуб

    почему цикл счетчика не (виснет) после +3 ?
     
  13. wildofficer

    wildofficer Нуб

    Я как то с main пока не разбираюсь. Тема то вроде как "Помощь новичку". Поясните код пожалуйста.
     
  14. wildofficer

    wildofficer Нуб

    И если сделать точно так, ругается что ( i ) не обьявили
     
  15. Unixon

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

    Потому, что он заканчивается.
     
  16. Unixon

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

    Что именно непонятно? Исполнение скетча всегда начинается с main(). Внутри main() крутится бесконечный цикл, в котором на каждой итерации один раз вызывается loop(), выхода из этого цикла нет, да и выходить то собственно некуда.

    Чего вы вообще пытаетесь от программы добиться?
     
  17. mcureenab

    mcureenab Гуру

    Потому что после значения 255 происходит переполнение переменной типа byte и переменная принимает значение 0.
    На частоте 16МГц это практически мгновенно происходит.
     
  18. wildofficer

    wildofficer Нуб

    хочу чтобы цикл отработал определенное количество раз и остановился или завис или while в бесконечном режиме было, без разницы.
    Вот так вот работает
    Код (C++):
    #define LED_PIN 9
    void setup()
    {
       pinMode(LED_PIN, OUTPUT);
       Serial.begin(9600);
    }
    void loop()
    {
       static byte counter = 0;
       while (counter < 3)
       {
         analogWrite(LED_PIN, 85);
         delay(250);
         analogWrite(LED_PIN, 170);
         delay(250);
         analogWrite(LED_PIN, 255);
         delay(250);
         counter++;  
         Serial.println(counter);
       }
    // сюда попадаем только после того, как counter стал равен трём.
    // тут код все равно выполняется бесконечное количество раз.
    // если кода здесь нет, то и выполняться нечему :)
    }
     
  19. wildofficer

    wildofficer Нуб

    Хотел и в этом скетче сделать тоже самое
    Код (C++):
    //LED Pin Variables
    int ledPins[] = {2,3,4,5,6,7,8,9}; //An array to hold the pin each LED is connected to
                                       //i.e. LED #0 is connected to pin 2, LED #1, 3 and so on
                                       //to address an array use ledPins[0] this would equal 2
                                       //and ledPins[7] would equal 9
    /*
    * setup() - this function runs once when you turn your Arduino on
    * We the three control pins to outputs
    */

    void setup()
    {
     
      //Set each pin connected to an LED to output mode (pulling high (on) or low (off)
      for(int i = 0; i < 8; i++){         //this is a loop and will repeat eight times
          pinMode(ledPins[i],OUTPUT); //we use this to set each LED pin to output
      }                                   //the code this replaces is below
      /* (commented code will not run)
       * these are the lines replaced by the for loop above they do exactly the
       * same thing the one above just uses less typing
      pinMode(ledPins[0],OUTPUT);
      pinMode(ledPins[1],OUTPUT);
      pinMode(ledPins[2],OUTPUT);
      pinMode(ledPins[3],OUTPUT);
      pinMode(ledPins[4],OUTPUT);
      pinMode(ledPins[5],OUTPUT);
      pinMode(ledPins[6],OUTPUT);
      pinMode(ledPins[7],OUTPUT);
      (end of commented code)*/

    }
    /*
    * loop() - this function will start after setup finishes and then repeat
    * we call a function called oneAfterAnother(). if you would like a different behaviour
    * uncomment (delete the two slashes) one of the other lines
    */

    void loop()                     // run over and over again
    {
      oneAfterAnotherNoLoop();   //this will turn on each LED one by one then turn each off
      //oneAfterAnotherLoop();   //does the same as oneAfterAnotherNoLoop but with
                                 //much less typing
      //oneOnAtATime();          //this will turn one LED on then turn the next one
                                 //on turning the
                                 //former off (one LED will look like it is scrolling
                                 //along the line
      //inAndOut();              //lights the two middle LEDs then moves them out then back
                                 //in again
    }
    /*
    * oneAfterAnotherNoLoop() - Will light one LED then delay for delayTime then light
    * the next LED until all LEDs are on it will then turn them off one after another
    *
    * this does it without using a loop which makes for a lot of typing.
    * oneOnAtATimeLoop() does exactly the same thing with less typing
    */

    void oneAfterAnotherNoLoop(){
      int delayTime = 100; //the time (in milliseconds) to pause between LEDs
                           //make smaller for quicker switching and larger for slower
      digitalWrite(ledPins[0], HIGH);  //Turns on LED #0 (connected to pin 2 )
      delay(delayTime);                //waits delayTime milliseconds
      digitalWrite(ledPins[1], HIGH);  //Turns on LED #1 (connected to pin 3 )
      delay(delayTime);                //waits delayTime milliseconds
      digitalWrite(ledPins[2], HIGH);  //Turns on LED #2 (connected to pin 4 )
      delay(delayTime);                //waits delayTime milliseconds
      digitalWrite(ledPins[3], HIGH);  //Turns on LED #3 (connected to pin 5 )
      delay(delayTime);                //waits delayTime milliseconds
      digitalWrite(ledPins[4], HIGH);  //Turns on LED #4 (connected to pin 6 )
      delay(delayTime);                //waits delayTime milliseconds
      digitalWrite(ledPins[5], HIGH);  //Turns on LED #5 (connected to pin 7 )
      delay(delayTime);                //waits delayTime milliseconds
      digitalWrite(ledPins[6], HIGH);  //Turns on LED #6 (connected to pin 8 )
      delay(delayTime);                //waits delayTime milliseconds
      digitalWrite(ledPins[7], HIGH);  //Turns on LED #7 (connected to pin 9 )
      delay(delayTime);                //waits delayTime milliseconds
    //Turns Each LED Off
      digitalWrite(ledPins[7], LOW);  //Turns on LED #0 (connected to pin 2 )
      delay(delayTime);                //waits delayTime milliseconds
      digitalWrite(ledPins[6], LOW);  //Turns on LED #1 (connected to pin 3 )
      delay(delayTime);                //waits delayTime milliseconds
      digitalWrite(ledPins[5], LOW);  //Turns on LED #2 (connected to pin 4 )
      delay(delayTime);                //waits delayTime milliseconds
      digitalWrite(ledPins[4], LOW);  //Turns on LED #3 (connected to pin 5 )
      delay(delayTime);                //waits delayTime milliseconds
      digitalWrite(ledPins[3], LOW);  //Turns on LED #4 (connected to pin 6 )
      delay(delayTime);                //waits delayTime milliseconds
      digitalWrite(ledPins[2], LOW);  //Turns on LED #5 (connected to pin 7 )
      delay(delayTime);                //waits delayTime milliseconds
      digitalWrite(ledPins[1], LOW);  //Turns on LED #6 (connected to pin 8 )
      delay(delayTime);                //waits delayTime milliseconds
      digitalWrite(ledPins[0], LOW);  //Turns on LED #7 (connected to pin 9 )
      delay(delayTime);                //waits delayTime milliseconds
    }
    /*
    * oneAfterAnotherLoop() - Will light one LED then delay for delayTime then light
    * the next LED until all LEDs are on it will then turn them off one after another
    *
    * this does it using a loop which makes for a lot less typing.
    * than oneOnAtATimeNoLoop() does exactly the same thing with less typing
    */

    void oneAfterAnotherLoop(){
      int delayTime = 100; //the time (in milliseconds) to pause between LEDs
                           //make smaller for quicker switching and larger for slower
    //Turn Each LED on one after another
      for(int i = 0; i <= 7; i++){
        digitalWrite(ledPins[i], HIGH);  //Turns on LED #i each time this runs i
        delay(delayTime);                //gets one added to it so this will repeat
      }                                  //8 times the first time i will = 0 the final
                                         //time i will equal 7;
    //Turn Each LED off one after another
      for(int i = 7; i >= 0; i--){  //same as above but rather than starting at 0 and counting up
                                    //we start at seven and count down
        digitalWrite(ledPins[i], LOW);  //Turns off LED #i each time this runs i
        delay(delayTime);                //gets one subtracted from it so this will repeat
      }                                  //8 times the first time i will = 7 the final
                                         //time it will equal 0
                                       
                                       
    }
    /*
    * oneOnAtATime() - Will light one LED then the next turning off all the others
    */

    void oneOnAtATime(){
      int delayTime = 100; //the time (in milliseconds) to pause between LEDs
                           //make smaller for quicker switching and larger for slower
     
      for(int i = 0; i <= 7; i++){
        int offLED = i - 1;  //Calculate which LED was turned on last time through
        if(i == 0) {         //for i = 1 to 7 this is i minus 1 (i.e. if i = 2 we will
          offLED = 7;        //turn on LED 2 and off LED 1)
        }                    //however if i = 0 we don't want to turn of led -1 (doesn't exist)
                             //instead we turn off LED 7, (looping around)
        digitalWrite(ledPins[i], HIGH);     //turn on LED #i
        digitalWrite(ledPins[offLED], LOW); //turn off the LED we turned on last time
        delay(delayTime);
      }
    }
    /*
    * inAndOut() - This will turn on the two middle LEDs then the next two out
    * making an in and out look
    */

    void inAndOut(){
      int delayTime = 100; //the time (in milliseconds) to pause between LEDs
                           //make smaller for quicker switching and larger for slower
     
      //runs the LEDs out from the middle
      for(int i = 0; i <= 3; i++){
        int offLED = i - 1;  //Calculate which LED was turned on last time through
        if(i == 0) {         //for i = 1 to 7 this is i minus 1 (i.e. if i = 2 we will
          offLED = 3;        //turn on LED 2 and off LED 1)
        }                    //however if i = 0 we don't want to turn of led -1 (doesn't exist)
                             //instead we turn off LED 7, (looping around)
        int onLED1 = 3 - i;       //this is the first LED to go on ie. LED #3 when i = 0 and LED
                                 //#0 when i = 3
        int onLED2 = 4 + i;       //this is the first LED to go on ie. LED #4 when i = 0 and LED
                                 //#7 when i = 3
        int offLED1 = 3 - offLED; //turns off the LED we turned on last time
        int offLED2 = 4 + offLED; //turns off the LED we turned on last time
       
        digitalWrite(ledPins[onLED1], HIGH);
        digitalWrite(ledPins[onLED2], HIGH);  
        digitalWrite(ledPins[offLED1], LOW);  
        digitalWrite(ledPins[offLED2], LOW);      
        delay(delayTime);
      }
      //runs the LEDs into the middle
      for(int i = 3; i >= 0; i--){
        int offLED = i + 1;  //Calculate which LED was turned on last time through
        if(i == 3) {         //for i = 1 to 7 this is i minus 1 (i.e. if i = 2 we will
          offLED = 0;        //turn on LED 2 and off LED 1)
        }                    //however if i = 0 we don't want to turn of led -1 (doesn't exist)
                             //instead we turn off LED 7, (looping around)
        int onLED1 = 3 - i;       //this is the first LED to go on ie. LED #3 when i = 0 and LED
                                 //#0 when i = 3
        int onLED2 = 4 + i;       //this is the first LED to go on ie. LED #4 when i = 0 and LED
                                 //#7 when i = 3
        int offLED1 = 3 - offLED; //turns off the LED we turned on last time
        int offLED2 = 4 + offLED; //turns off the LED we turned on last time
       
        digitalWrite(ledPins[onLED1], HIGH);
        digitalWrite(ledPins[onLED2], HIGH);  
        digitalWrite(ledPins[offLED1], LOW);  
        digitalWrite(ledPins[offLED2], LOW);      
        delay(delayTime);
      }
    }
     
     
  20. Unixon

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

    Вы слишком усложняете.
    Берете примитив
    Код (C++):

    const int N = 3;
    for (int i=0; i<N; i++)
    {
      // do something
    }
    while (true); // halt
     
    и ставите его хоть в loop() хоть в setup()...
     
    wildofficer нравится это.