Добрый день. Скачал уроки, учусь. Решил чуточку усложнить урок, выдает ошибку, а найти ее не могу Код (C++): int ledPin[] = {2,3,4,5,6,7,8,9}; const int button1Pin = 10; // кнопка №1 - порт 2 const int button2Pin = 11; // кнопка №2 - порт 3 //const int ledPin = 13; // порт 13, для светодиода void setup() { int index; for(index = 0; index <= 7; index++) { pinMode(ledPin[index],OUTPUT); pinMode(button1Pin, INPUT); pinMode(button2Pin, INPUT); } } void loop() { // oneAfterAnotherLoop(); // Зажечь поочередно все светодиоды int button1State, button2State; button1State = digitalRead(button1Pin); button2State = digitalRead(button2Pin); if (((button1State == LOW) || (button2State == LOW)) // сравниваем, нажата ли одна из кнопок && ! // и если нет ((button1State == LOW) && (button2State == LOW))) // сравниваем, нажаты ли обе кнопки // тогда... { digitalWrite(ledPin, HIGH); // включаем светодиод } else // в противном случае { digitalWrite(ledPin, LOW); // выключаем светодиод } } void oneAfterAnotherLoop() { int index; int delayTime = 100; // пауза delayTime, миллисек. // можно изменить, чтобы замедлить и наооборот // выключить все, на: // Этот цикл for() перебирает значение индекса от 0 до 7 // (увеличивает "++" затем использует полученное значение в digitalWrite() // затем переключает светодиод на Вкл. for(index = 0; index <= 7; index++) { digitalWrite(ledPin[index], HIGH); delay(delayTime); } } а вот ошибку пишет: Код (C++): C:\Arduino\_1sketch\_1sketch.ino: In function 'void loop()': C:\Arduino\_1sketch\_1sketch.ino:30:30: warning: invalid conversion from 'int*' to 'uint8_t {aka unsigned char}' [-fpermissive] digitalWrite(ledPin, HIGH); // включаем светодиод ^ In file included from sketch\_1sketch.ino.cpp:1:0: C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:134:6: note: initializing argument 1 of 'void digitalWrite(uint8_t, uint8_t)' void digitalWrite(uint8_t, uint8_t); ^ C:\Arduino\_1sketch\_1sketch.ino:34:29: warning: invalid conversion from 'int*' to 'uint8_t {aka unsigned char}' [-fpermissive] digitalWrite(ledPin, LOW); // выключаем светодиод ^ In file included from sketch\_1sketch.ino.cpp:1:0: C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:134:6: note: initializing argument 1 of 'void digitalWrite(uint8_t, uint8_t)' void digitalWrite(uint8_t, uint8_t); ^
Аналогично тому как тут: Код (C++): for(index = 0; index <= 7; index++) { pinMode(ledPin[index],OUTPUT); У Вас же в коде последовательно пины выходами назначаются.
Я не знаю, что у вас там за змейка и уроки, но фунция digitalWrite массив в качестве первого аргумента не принимает.
Привет!! У меня похожая задачка была. http://forum.amperka.ru/threads/Помощь-новичку.10322/page-5#post-110052 А что ты именно изменил и что хотел на выходе получить? В ошибках я тоже не волоку. Пробуй поочередно выключать функции с помощью // методом исключения можно ошибку найти. В таком варианте у меня первый диод светится. Без ошибок. Ошибки исчезли когда изменил digitalWrite(ledPin[0], HIGH); // включаем светодиод Код (C++): int ledPin[] = {2,3,4,5,6,7,8,9}; //const int button1Pin = 10; // кнопка №1 - порт 2 //const int button2Pin = 11; // кнопка №2 - порт 3 //const int ledPin = 13; // порт 13, для светодиода void setup() { int index; for(index = 0; index <= 7; index++) { pinMode(ledPin[index],OUTPUT); //pinMode(button1Pin, INPUT); //pinMode(button2Pin, INPUT); } } void loop() { //oneAfterAnotherLoop(); // Зажечь поочередно все светодиоды //int button1State, button2State; //button1State = digitalRead(button1Pin); //button2State = digitalRead(button2Pin); // if (((button1State == LOW) || (button2State == LOW)) // сравниваем, нажата ли одна из кнопок //&& ! // и если нет //((button1State == LOW) && (button2State == LOW))) // сравниваем, нажаты ли обе кнопки // тогда... { digitalWrite(ledPin[0], HIGH); // включаем светодиод } //else // в противном случае { //digitalWrite(ledPin, LOW); // выключаем светодиод } } void oneAfterAnotherLoop() { int index; int delayTime = 100; // пауза delayTime, миллисек. // можно изменить, чтобы замедлить и наооборот // выключить все, на: // Этот цикл for() перебирает значение индекса от 0 до 7 // (увеличивает "++" затем использует полученное значение в digitalWrite() // затем переключает светодиод на Вкл. for(index = 0; index <= 7; index++) { digitalWrite(ledPin[index], HIGH); delay(delayTime); } }
вас эта строчка не смущает - //const int ledPin = 13; // порт 13, для светодиода или мне кажется что она закомментированна
Да, она закоментирована и просто скопирована из уроков. Моя цель была такая, взять из первого урока, где поочередно зажигаются и тухнут светодиоды и прикрепить эту функцию ко второму уроку, где по нажатию кнопки, происходит зажигание светодиода, но вместо простого одного светодиода, будет загораться змейка из восьми светодиодов. понял свою ошибку, немного переписал. Но не пойму, работает по нажатию или просто работает из-за дребизга контакта . проверьте плиз. Код (C++): int ledPin[] = {2,3,4,5,6,7,8,9}; const int button1Pin = 10; // кнопка №1 - порт 2 const int button2Pin = 11; // кнопка №2 - порт 3 //const int ledPin = 13; // порт 13, для светодиода void setup() { int index; for(index = 0; index <= 7; index++) { pinMode(ledPin[index],OUTPUT); pinMode(button1Pin, INPUT); pinMode(button2Pin, INPUT); } } void loop() { // oneAfterAnotherLoop(); // Зажечь поочередно все светодиоды int button1State, button2State; button1State = digitalRead(button1Pin); button2State = digitalRead(button2Pin); if (((button1State == LOW) || (button2State == LOW)) // сравниваем, нажата ли одна из кнопок && ! // и если нет ((button1State == LOW) && (button2State == LOW))) // сравниваем, нажаты ли обе кнопки // тогда... { Proba (); } } void Proba() { int index; int delayTime = 100; // пауза delayTime, миллисек. // можно изменить, чтобы замедлить и наооборот // выключить все, на: // Этот цикл for() перебирает значение индекса от 0 до 7 // (увеличивает "++" затем использует полученное значение в digitalWrite() // затем переключает светодиод на Вкл. for(index = 0; index <= 7; index++) { digitalWrite(ledPin[index], HIGH); delay(delayTime); digitalWrite(ledPin[index], LOW); } }
Избыточно. Можно сразу сравнивать, нажаты ли обе. Вынести из цикла. Вообще код оформите как положено, читать невозможно. Должно.
Я еще не дошол жо этого урока. Можно ссылку если есть? так а что по дребезгу, один пишет что не должно, второй что должно а что на самом деле?
Какого этого урока? Я вам на недосмотры в вашем коде указываю. На представленой схеме просто подтягивающие резисторы. От дребезга они не избавляют. Товарищ BAR_MEN еще совсем ребенок, путается. Вообще от дребезга кнопок гораздо проще избавляться программой, и схемы антидребезга применяют только когда разрабатывается прибор без микроконтроллера.
я имею ввиду как правильно оформлять код, просто я в процессе его написания очень часто его переписывал и получился такой вид как представлен выше. спасибо за участие. напишу что у меня получилось на практике. от нажатия кнопок не работает, но работает, когда я из макетной платы вытаскиваю либо втыкаю подтягивающий резистор. не пойму что не так.
все, разобрался, подтягивающий резистор запитал на плюс вместо минуса. ну я достиг своей цели. получается что процесс обучения идет. всем спасибо