Всех приветсвую и заранее спасибо.
Не программист совсем сел вот прошло 1 час накатал скетч который преследует следующую цель. Скажем так устройтво переключает видео сигнал с 8 камер на один канал по нажатию кнопок. Задача от Ардуинки в общем такая 8 входов кнопок и 8 выходов . Нажал на 1 нопку активировался 1 канал . Нажал на него опять выключился. Если включен к примеру первый ты нажал 4 то первый выключился и 4 включился , далее нажал на 4 он выкл. Схема простая вот что у меня получилось и оно работает ‘’'unsigned long last_press;
boolean but1_flag = 0;
boolean butt1;
boolean led1_flag = 0;
boolean but2_flag = 0;
boolean butt2;
boolean led2_flag = 0;
int but1 = 7;
int led1 = 8;
int but2 = 10;
int led2 = 9;
void setup() {
pinMode (but1, INPUT);
pinMode (led1, OUTPUT);
pinMode (but2, INPUT);
pinMode (led2, OUTPUT);
}
if (butt2 == 0 && but2_flag == 1){
but2_flag = 0;
last_press = millis();
if (digitalRead(led1)== HIGH)
digitalWrite(led1, LOW);
}
}
‘’’
проблема в следующем что когда включен канал 1 нажатие кнопки второго канала сначала выключает 1 канал и второе нажатие включает второй канал. Вроде как ничего но хотелось бы идеала. Подскажите что я делаю в коде не так и может что то можно пофиксить =) Только учусь результат этого кода это всего 1 час проведенного мною времени за этим делом.
Да по факту на каналах реле и будут стоять. Техническая обвязка для меня вообще не проблема =) мало времени заниматься программровнием хотя очень хочется и интересно. То что вы предложили мне и хотелось но не могу понять как сразу читать состояние нескольких кнопок . Если есть возможно просто пример на примере двух этого будет достаточно как на большее колличество растянуть я пойму =)
Это не истина в одном лице, но у меня всего 3 реле было и меня устроило и так.
В твоем случае с 8 реле, наверное, есть более изящное решение (имею ввиду реализацию по коду, скорее всего - через массивы будет проще):
Для примера (код не полный, как пример)
// Номера пинов:
#define button_one 5
#define button_two 6
#define led_one 7
#define led_two 8
// Переменные состояния кнопок
uint8_t button_one_state, button_two_state;
void setup() {
pinMode (button_one, INPUT_PULLUP);
pinMode (button_two, INPUT_PULLUP);
pinMode (led_one, OUTPUT);
pinMode (led_two, OUTPUT);
}
void loop() {
// Читаем состояния кнопок:
button_one_state = buttonRead(button_one); // В функции buttonRead() выполняется чтение пина и возвращает его значение (эту функцию нужно написать отдельно)
button_two_state = buttonRead(button_two);
// Опеределяем что нужно выключить, а что нужно включить
if (button_one_state) {
button_one_state = !digitalRead(button_one);
button_two_state = LOW;
}
if (button_two_state) {
button_one_state = LOW;
button_two_state = !digitalRead(button_two);
}
// А это третий пункт:
digitalWrite(led_one, button_one_state);
digitalWrite(led_two, button_two_state);
}
Спасибо за базу. Буду её сейчас мысленно прорабатывать чтобы каждый шаг понять. С переменными так то интереснее получается. Я их видел но как это работает не понимал. Сейчас вот вижу и уже более понятно становится.
Тестирую сие дело на ATMEGA 2560 , Потом подгоняю под что то более маленькое. Последний раз что то делал брал С++ из скетча и заливал в attiny85 =) прикольно было =) Потом загрузчик научилс туда заливать чтобы digispark получить =)
получается что #define ты обозначаешь переменные , а потом uint8_t указываешь ряд переменных. Не могу понять чем #define от int отличается. И что если #define заменить на byte если это одно и тоже ?
Так это уже не на ночь глядя понимать =) Блин спасибо за столько инфы =) завтра на чистую голову буду все осваивать. Больше от Вас узнал и понял чем по всему интернету кусками информацию хватал =)