Помогите, пожалуйста! С 2-м заданием: перепишите программу без использования инструкции continue. Дана программа: #define MOTOR_PIN 9 #define FIRST_BUTTON_PIN 5 #define BUTTON_COUNT 3 #define SPEED_STEP (255 / (BUTTON_COUNT - 1)) void setup() { pinMode(MOTOR_PIN, OUTPUT); for (int i = 0; i < BUTTON_COUNT; ++i) pinMode(i + FIRST_BUTTON_PIN, INPUT_PULLUP); } void loop() { for (int i = 0; i < BUTTON_COUNT; ++i) { if (digitalRead(i + FIRST_BUTTON_PIN)) continue; int speed = i * SPEED_STEP; analogWrite(MOTOR_PIN, speed); } } Первым делом, мне как новичку, пришла мысль расписать действие на поступление сигнала для каждой кнопки, например: Для второй кнопки: if (digitalRead(6)) analogWrite(MOTOR_PIN, 127); Для третей кнопки: if (digitalRead(7)) analogWrite(MOTOR_PIN, 255); и т.д Но я считаю, что это громоздко! И наверное не праильно, не этого хотят от меня авторы. Читал вот эту тему: http://forum.amperka.ru/threads/Эксперимент-9.4437/#post-35200 Поэтому же и вопросу, так и не понял, что там хотели сказать. Что значит глобальные переменные? И с использованием их нужно решать это задание, или есть решение которое не выходит за рамки программиста-новичка дошедшего до 9 эксперимента?Программист я очень начинающий, поэтому прошу не судить строго!
Изучайте C++. http://forum.amperka.ru/threads/Книги-для-начинающих.2344/ Глобальные переменные объявляются вне функций и доступны в любом месте программы, каждый блок от "{" до "}" создает новую область видимости, внутри которой переменные недоступны коду снаружи, т.е. они существуют только между "{" и "}". Блоки могут быть вложенными, соответственно и области видимости переменных. Вам намекают на использование if () { ... } else {... } вместо continue;
Ух, еле-еле разобрался! Оказывается меня сбивало с толку функция INPUT_PULLUP! Посему на выходе пинов кнопок весит постоянный HIGH, я то думал наоборот мы HIGH подаём с кнопки(хотя и по схеме подключения можно было догадаться!!!). Поэтому всё очень просто организовываем счётчик, организовываем проверку " равен ли сигнал "LOW" на каком-нибудь пине кнопок". Если да, считаем скорость, согласно номеру кнопки, включаем моторчик с этой скоростью. Даже конструкция "else{}" - тут не нужна, только " if{}". Код выглядит так(кому-нибудь на будушее!): void loop() { for (int i = 0; i < BUTTON_COUNT; ++i) { if (digitalRead(i + FIRST_BUTTON_PIN) == LOW) { int speed = i * SPEED_STEP; analogWrite(MOTOR_PIN, speed); И не каких глобальных переменных здесь не надо. Зациклился на них и упустил главное!!! Спасибо Unixon, за совет - будем изучать!!!