Всем привет.Вопрос такой;можно ли поставить отдельно другую,свежую версию IDE.Стоит версия 1.0.5-r2,а теперь нужна 1.6.4,или надо первую убраить и ставить вторую.
можно, если поставить в другую папку. С библиотеками сложнее - либо делать у каждой версии свой комплект библиотек, либо сложить их в общую папку и в IDE прописать пути к ней.
у меня установлено 6 версий и в каждой свои библиотеки))) не знаю, может и не правильно, но работает...
Функцией itoa преобразуем число в массив цифр. Вычитанием символа 0 Цифры из ASCII преобразуем в бинарное представление.
VVR,пожалуста по подробней,для чайника.Буду очень признателен.Первая версия стоит на НАНЕ-помошник при дисциляции.Показывает температуру куба,крепость спиртовых паров,пищит при установленных температурах.Новые версии буду ставить на УНО и навешивать разные опции.Всё это придумал коллега по форуму самогонщиков.Я старательно копирую.
День добрый. Подскажите почему не останавливается 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); Спасибо!
loop() никогда не останавливается, в этом его фишка и вообще жизненное предназначение. Какое поведение программы вы понимаете под "прерывается" и "работает непрерывно"? В первом случае у вас цикл while должен быть бесконечным (и в нем все повиснет), во втором пролетать незаметно. И вообще, не забывайте, что делает main: Код (C++): int main(void) { init(); initVariant(); #if defined(USBCON) USBDevice.attach(); #endif setup(); for (;;) { loop(); if (serialEventRun) serialEventRun(); } return 0; }
Попробуй так: Код (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); }
Что именно непонятно? Исполнение скетча всегда начинается с main(). Внутри main() крутится бесконечный цикл, в котором на каждой итерации один раз вызывается loop(), выхода из этого цикла нет, да и выходить то собственно некуда. Чего вы вообще пытаетесь от программы добиться?
Потому что после значения 255 происходит переполнение переменной типа byte и переменная принимает значение 0. На частоте 16МГц это практически мгновенно происходит.
хочу чтобы цикл отработал определенное количество раз и остановился или завис или 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 стал равен трём. // тут код все равно выполняется бесконечное количество раз. // если кода здесь нет, то и выполняться нечему :) }
Хотел и в этом скетче сделать тоже самое Код (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); } }
Вы слишком усложняете. Берете примитив Код (C++): const int N = 3; for (int i=0; i<N; i++) { // do something } while (true); // halt и ставите его хоть в loop() хоть в setup()...