Понадобилось завести ещё одну серву для управления фиксированными поворотами по заданным углам, но только уже на четыре позиции. Принцип тот же, что и прежде, но что-то никак не получается прописать вторую серву. Делаю вроде все по аналогии, добавляя порядковый номер к новой серве и прочее, но ничего не выходит. Скорее всего какие-то команды дублировать с присвоением порядкового номера не следует, из за использования в скетче массива, но я так за два дня и не разобрался с этим. Решил ещё раз обратиться к вам за помощью.
Всё, добил я этот код! Поиграл со скобками в конце - после delay(2) и все сразу встало на свои места. ua6em, огромное вам спасибо за оказанную помощь, правда, вы мне сильно помогли. Публикую законченный вариант кода. Теперь осталось сделать по человечески антидребезг и можно считать, что время потеряно не зря.
Теперь точно все! Сделал защиту от дребезга - как и полагается. Доволен на 100%. Удалил светодиоды от второй сервы. Они для моего проекта не предусматривались. Ещё раз спасибо!
Понадобилось завести ещё одну серву для управления фиксированными поворотами по заданным углам, но только уже на четыре позиции. Принцип тот же, что и прежде, но что-то никак не получается прописать вторую серву. Делаю вроде все по аналогии, добавляя порядковый номер к новой серве и прочее, но ничего не выходит. Скорее всего какие-то команды дублировать с присвоением порядкового номера не следует, из за использования в скетче массива, но я так за два дня и не разобрался с этим. Решил ещё раз обратиться к вам за помощью.
#include <Servo.h> Servo mode; Servo mode2; int LEDS[3] = {12, 13, 2}; int LEDS2[4] = {6, 9, 10, 11}; int sizeof_LEDS = 3; int sizeof_LEDS2 = 4; int current_led_index = 0; int current_led2_index = 0; const int BUTTON = 7; const int BUTTON2 = 8; bool but_state = false; bool but2_state = false; void setup() { for(int i = 0; i < sizeof_LEDS; i++) for(int i = 0; i < sizeof_LEDS2; i++) { pinMode(LEDS[i], OUTPUT); pinMode(LEDS2[i], OUTPUT); } digitalWrite(LEDS[current_led_index], HIGH); digitalWrite(LEDS2[current_led2_index], HIGH); pinMode(BUTTON, INPUT_PULLUP); pinMode(BUTTON2, INPUT_PULLUP); mode.attach(3); mode2.attach(5); } void loop() { bool current_but_state = digitalRead(BUTTON); bool current_but2_state = digitalRead(BUTTON2); if( (current_but_state == true) && (but_state == false) ) if( (current_but2_state == true) && (but2_state == false) ) { but_state = true; but2_state = true; digitalWrite(LEDS[current_led_index], LOW); digitalWrite(LEDS2[current_led2_index], LOW); current_led_index = check_contact_param(current_led_index + 1); current_led2_index = check_contact_param2(current_led2_index + 1); digitalWrite(LEDS[current_led_index], HIGH); digitalWrite(LEDS2[current_led2_index], HIGH); if(current_led_index ==0) if(current_led2_index ==0) mode.write(0); mode2.write(20); if(current_led_index ==1) if(current_led2_index ==1) mode.write(90); mode2.write(90); if(current_led_index ==2) if(current_led2_index ==2) mode.write(160); mode2.write(180); if(current_led2_index ==3) mode2.write(180); } else if( (current_but_state == false) && (but_state == true) ) else if( (current_but2_state == false) && (but2_state == true) ) { but_state = false; but2_state = false; } delay(2); } int check_contact_param (int param) int check_contact_param2 (int param2) { if (param >= sizeof_LEDS) if (param2 >= sizeof_LEDS2) return 0; else return param; return param2; }серва не на PWM пине, на нано это 3, 5, 6, 9, 10, 11
а не, на правильном ... )))
Не, вроде все правильно, я это учитывал.
28mode.attach(3);29mode2.attach(5);Код не компилируется, вы считаете что должен?
if ы закавычивать надо правильно...и код конечно бредятина
вот так хотя бы
if(current_led_index ==0) mode.write(0); if(current_led2_index ==0) mode2.write(20); if(current_led_index ==1) mode.write(90); if(current_led2_index ==1) mode2.write(90); if(current_led_index ==2) mode.write(160); if(current_led2_index ==2) mode2.write(180); if(current_led2_index ==3) mode2.write(180);PS не программист, терминами не владею )))
Не помогло, по прежнему компилятор ругается. Это после моих правок возможно он стал бредовым, а изначально он выглядел так.
#include <Servo.h> Servo mode; int LEDS[3] = {12, 13, 2}; int sizeof_LEDS = 3; int current_led_index = 0; const int BUTTON = 7; bool but_state = false; void setup() { for(int i = 0; i < sizeof_LEDS; i++) { pinMode(LEDS[i], OUTPUT); } digitalWrite(LEDS[current_led_index], HIGH); pinMode(BUTTON, INPUT_PULLUP); mode.attach(3); } void loop() { bool current_but_state = digitalRead(BUTTON); if( (current_but_state == true) && (but_state == false) ) { but_state = true; digitalWrite(LEDS[current_led_index], LOW); current_led_index = check_contact_param(current_led_index + 1); digitalWrite(LEDS[current_led_index], HIGH); if(current_led_index ==0) mode.write(0); if(current_led_index ==1) mode.write(90); if(current_led_index ==2) mode.write(180); } else if( (current_but_state == false) && (but_state == true) ) { but_state = false; } delay(2); } int check_contact_param (int param) { if (param >= sizeof_LEDS) return 0; else return param; }после 40 строки вставляй такой же блок но на вторую серву и будет тебе счастье )))
deleted
deleted
Всё, добил я этот код! Поиграл со скобками в конце - после delay(2) и все сразу встало на свои места. ua6em, огромное вам спасибо за оказанную помощь, правда, вы мне сильно помогли. Публикую законченный вариант кода. Теперь осталось сделать по человечески антидребезг и можно считать, что время потеряно не зря.
#include <Servo.h> Servo mode; Servo mode2; int LEDS[3] = {10, 11, 6}; int sizeof_LEDS = 3; int current_led_index = 0; const int BUTTON = 7; bool but_state = false; int LEDS2[4] = {12, 13, 2, 4}; int sizeof_LEDS2 = 4; int current_led2_index = 0; const int BUTTON2 = 8; bool but2_state = false; void setup() { for(int i = 0; i < sizeof_LEDS; i++) for(int i = 0; i < sizeof_LEDS2; i++) { pinMode(LEDS[i], OUTPUT); pinMode(LEDS2[i], OUTPUT); } digitalWrite(LEDS[current_led_index], HIGH); digitalWrite(LEDS2[current_led2_index], HIGH); pinMode(BUTTON, INPUT_PULLUP); pinMode(BUTTON2, INPUT_PULLUP); mode.attach(3); mode2.attach(4); } void loop() { bool current_but_state = digitalRead(BUTTON); if( (current_but_state == true) && (but_state == false) ) { but_state = true; digitalWrite(LEDS[current_led_index], LOW); current_led_index = check_contact_param(current_led_index + 1); digitalWrite(LEDS[current_led_index], HIGH); if(current_led_index ==0) mode.write(0); if(current_led_index ==1) mode.write(90); if(current_led_index ==2) mode.write(180); } else if( (current_but_state == false) && (but_state == true) ) { but_state = false; } bool current_but2_state = digitalRead(BUTTON2); if( (current_but2_state == true) && (but2_state == false) ) { but2_state = true; digitalWrite(LEDS2[current_led2_index], LOW); current_led2_index = check_contact_param2(current_led2_index + 1); digitalWrite(LEDS2[current_led2_index], HIGH); if(current_led2_index ==0) mode2.write(20); if(current_led2_index ==1) mode2.write(90); if(current_led2_index ==2) mode2.write(160); if(current_led2_index ==3) mode2.write(180); } else if( (current_but2_state == false) && (but2_state == true) ) { but2_state = false; } delay(5); } int check_contact_param (int param) { if (param >= sizeof_LEDS) return 0; else return param; } int check_contact_param2 (int param2) { if (param2 >= sizeof_LEDS2) return 0; else return param2; }Теперь точно все! Сделал защиту от дребезга - как и полагается. Доволен на 100%. Удалил светодиоды от второй сервы. Они для моего проекта не предусматривались. Ещё раз спасибо!
#include <Servo.h> Servo mode; Servo mode2; int LEDS[3] = {12, 13, 2}; int sizeof_LEDS = 3; int current_led_index = 0; const int BUTTON = 7; bool but_state = false; int sizeof_LEDS2 = 4; int current_led2_index = 0; const int BUTTON2 = 8; bool but2_state = false; unsigned long last_press; void setup() { for(int i = 0; i < sizeof_LEDS; i++) for(int i = 0; i < sizeof_LEDS2; i++) { pinMode(LEDS[i], OUTPUT); } digitalWrite(LEDS[current_led_index], HIGH); pinMode(BUTTON, INPUT_PULLUP); pinMode(BUTTON2, INPUT_PULLUP); mode.attach(3); mode2.attach(5); } void loop() { bool current_but_state = digitalRead(BUTTON); if( (current_but_state == true) && (but_state == false) && (millis() - last_press > 500)) { but_state = true; digitalWrite(LEDS[current_led_index], LOW); current_led_index = check_contact_param(current_led_index + 1); digitalWrite(LEDS[current_led_index], HIGH); if(current_led_index ==0) mode.write(0); if(current_led_index ==1) mode.write(90); if(current_led_index ==2) mode.write(180); last_press = millis(); } else if( (current_but_state == false) && (but_state == true) ) { but_state = false; } bool current_but2_state = digitalRead(BUTTON2); if( (current_but2_state == true) && (but2_state == false) && (millis() - last_press > 100)) { but2_state = true; current_led2_index = check_contact_param2(current_led2_index + 1); if(current_led2_index ==0) mode2.write(20); if(current_led2_index ==1) mode2.write(90); if(current_led2_index ==2) mode2.write(160); if(current_led2_index ==3) mode2.write(180); last_press = millis(); } else if( (current_but2_state == false) && (but2_state == true) ) { but2_state = false; } } int check_contact_param (int param) { if (param >= sizeof_LEDS) return 0; else return param; } int check_contact_param2 (int param2) { if (param2 >= sizeof_LEDS2) return 0; else return param2; }