Форум ModelldepO

Форум ModelldepO (http://forum.modelldepo.ru/index.php)
-   Arduino (http://forum.modelldepo.ru/forumdisplay.php?f=220)
-   -   Кнопочный пульт. (http://forum.modelldepo.ru/showthread.php?t=19439)

Sobaka74 19.04.2018 19:35

Кнопочный пульт.
 
Здравствуйте. Хочу собрать пульт управления макетом на ардуине. Помогите пожалуйста написать скетч для ардуино мега. Сам пробовал, но ничего не получилось. Пробовал использовать прерывание цикла с помощью команды break. Прошу помощи. Если поможете, буду благодарен.
Есть 3 ардуино мега. 1-мега =мастер, 1-мега =слейв1, 1-мега = слейв2.
На мастере 6 кнопок. 1 и 2 кнопки включают 2 цифровых выхода на мастере, 3 и 4 включают 2 цифровых выхода на слейв 1, 5 и 6 включают 2 цифровых выхода на слейв 2. Связь между ардуинами по I2C.
При нажатии на кнопку срабатывает один цифровой выход, длительность срабатывания выхода не более 1 сек.(чтобы не сжечь привод стрелки) не зависимо от состоя кнопки ( через какое время будет отпущена кнопка).

Пробовал как то так:

Arduino код:

if (key) {
    
lcd.setCursor(51);                    // устанавливаем курсор в позицию: столбец 5, строка 1
     
switch (key) {
      case 
'1':
          
lcd.print("1");                  // выводим -- на LCD дисплей
        
digitalWrite(13HIGH);          // "включаем" реле 1-1 путь
        
delay(500) ;                     // ждем 500 mс
        
digitalWrite(13LOW);           // "выключаем" реле
        
break; 


Alexmit 19.04.2018 19:42

У вас структура то правильная? (это просто пример)
Arduino код:

  switch (RCount) {
      case 
0x00

      break;
      case 
0x01:
         
sfbgr1 true;
      break;
      case 
0x02:
        
      break;
      case 
0x03:
        
sfbgr0 true;
      break;
      case 
0x04:
         
RCount 0x00;
      break;
      default:   
// UNKNOWN_COMMAND 
      // Serial.print("UNKNOWN_COMMAND 0x"); 
      // Serial.println(RCount, HEX);
      
break;
  } 


Elwood 19.04.2018 19:44

Цитата:

Сообщение от Sobaka74 (Сообщение 324697)
Сам пробовал, но ничего не получилось.

А что именно не получилось?

Sobaka74 19.04.2018 19:56

Не заработало даже на 1 ардуине.

---------- Сообщение добавлено в 22:56 ---------- Предыдущие сообщение было в 22:55 ----------

Еще бы понимать что писать в скобках.

Alexmit 19.04.2018 19:58

Цитата:

Сообщение от Sobaka74 (Сообщение 324700)
Не заработало даже на 1 ардуине.

Вы уж тогда весь текст в архиве выложите.
Цитата:

Сообщение от Sobaka74 (Сообщение 324700)
Еще бы понимать что писать в скобках.

В каких?
Или закрывающие не поставили?
Поэтому лучше давайте весь текст.

laba 19.04.2018 20:09

ИМХОА зачем I2C? Раз у Вас Mega, то можно и Serial обойтись. Для каждого Slave, можно свой Serial выделить, отдельный. Тем более, что Вам обмен не нужен, значит можно обойтись только линией TX.
И выдержку времени лучше делать без функции delay.

Sobaka74 19.04.2018 20:12

Цитата:

Сообщение от laba (Сообщение 324704)
ИМХОА зачем I2C? Раз у Вас Mega, то можно и Serial обойтись. Для каждого Slave, можно свой Serial выделить, отдельный. Тем более, что Вам обмен не нужен, значит можно обойтись только линией TX.

Без разницы кокой будет обмен. Информация с кнопок выводится на экран с мастера.

Sobaka74 19.04.2018 20:15

Вложений: 1
За основу взял скетч на одной ардуине мега и матричной клавиатуре. Но мне нужно больше кнопок и больше стрелок и светофоров. Хочется разнести ардуины по макету. Скетч большой, поэтому прикрепил архив.

shalex 19.04.2018 21:27

Как вариант - снимок экрана, на котором можно увидеть то, что "не получилось".
Тут либо код не компилируется, либо правильно не работает.

Alexmit 20.04.2018 03:07

Цитата:

Сообщение от Sobaka74 (Сообщение 324706)
Скетч большой, поэтому прикрепил архив.

Который либо битый, либо пустой. И пожалуйста пакуйте в ZIP.

Sobaka74 20.04.2018 04:31

Вложений: 1
Прошу прощения, не проверил. Переупаковал.

Alexmit 20.04.2018 12:44

Код который управляет выходами рабочий.
Клавиатуры у меня такой нет проверить не могу.
Поставьте после строки:
char key = (char)Serial.read();
строку:
Serial.println(key);

Что бы видеть что приходит с клавиатуры и приходит ли вообще.

---------- Сообщение добавлено в 12:44 ---------- Предыдущие сообщение было в 12:33 ----------

По поводу связи. Как рекомендовал laba, используйте Serial порты.
На слейвах замените:
char key = keypad.getKey();
на
char key = (char)Serial1.read();
И в setup соответственно:
Serial1.begin(115200);
Хотя скорость и поменьше можно поставить.

А в мастере вместо:
digitalWrite(22, HIGH); - (строчка взята для примера)
поставьте:
Serial1.println("W"); - (только с нужной буквой)
Для управления вторым слейвом используйте:
Serial2.println("W"); - (только с нужной буквой)

Sobaka74 20.04.2018 14:20

Как ра
Цитата:

Сообщение от Alexmit (Сообщение 324725)
Клавиатуры у меня такой нет проверить не могу.

Как раз и надо сделать на кнопках, а не на матричной клавиатуре.

Alexmit 20.04.2018 14:31

Цитата:

Сообщение от Sobaka74 (Сообщение 324731)
Как раз и надо сделать на кнопках,

Тогда подробно пишем, что надо сделать.
Кнопки - сколько?
Куда и как планировали подключить?

Sobaka74 20.04.2018 16:54

Цитата:

Сообщение от Alexmit (Сообщение 324732)
Тогда подробно пишем, что надо сделать.
Кнопки - сколько?
Куда и как планировали подключить?

Все описал в перво посте.

Alexmit 20.04.2018 17:36

Вложений: 1
Цитата:

Сообщение от Sobaka74 (Сообщение 324735)
Все описал в перво посте.

Если всего 6, то на мастере вообще примитивно.
Вложение 157751
Надеюсь с исправлениями сами справитесь.
А на слейвах надо исправить как написано выше и лишнее убрать.

Sobaka74 20.04.2018 17:56

Цитата:

Сообщение от Alexmit (Сообщение 324737)
Если всего 6, то на мастере вообще примитивно.

Вообще кнопок планируется около 30, на мастере всего 6 реле, остальные реле будут на слейвах. 6 кнопок указано для упрощения
вопроса, остальное надеюсь дописать сам. (Хочется самому з\хоть чтото понимать и сделать).
Завтра буду дома, займусь. Все равно большое СПАСИБО.

Alexmit 20.04.2018 18:04

Цитата:

Сообщение от Sobaka74 (Сообщение 324740)
Вообще кнопок планируется около 30,

Это немного другое дело. Хотя входов хватает. Например 16 аналоговых и 16 с 22 по 37 пин.

Цитата из моего же поста в другой теме:
Инициализацию кнопок сделал на Си.
Arduino код:

//SETUP INPUT PIN:
  
DDRC 0x00;  //set input mode pin (37-30)
  
PORTC 0xFF//Turn on internal Pull-Up Resistor (37-30) 

Пины 22 - 29 это порт A. Получится:
Arduino код:

//SETUP INPUT PIN:
  
DDRA 0x00;  //set input mode pin (22-29)
  
PORTA 0xFF//Turn on internal Pull-Up Resistor (22-29) 

И соответственно работа с кнопками, для каждой кнопки:

Arduino код:

  if ((digitalRead(34) == LOW) && (Button34LastState == false)) {  //Button DOWN
    
Button34LastState true//save state
    
digitalWrite(9HIGH); // - (исполняемая команда)
  
}
  if ((
digitalRead(34) == HIGH) && (Button34LastState == true)) {  //Button UP
      
Button34LastState false//save state
  


И в начало, где определение переменных для каждой кнопки со своим номером:
bool Button34LastState = false;

laba 20.04.2018 20:43

Цитата:

Сообщение от Sobaka74 (Сообщение 324731)
Как раз и надо сделать на кнопках, а не на матричной клавиатуре.

А что мешает кнопки подключить в режиме матрицы? Хоть на меге портов и навалом, но всё-таки экономия.

Sobaka74 20.04.2018 21:07

Цитата:

Сообщение от laba (Сообщение 324748)
А что мешает кнопки подключить в режиме матрицы? Хоть на меге портов и навалом, но всё-таки экономия.

У меня возникла проблема, как управлять реле на слейвах. Может я ошибаюсь, мне показалось что прописать кнопки проще чем матрицу для управлением реле на слейвах. Может я не прав?

shalex 20.04.2018 21:08

Что конкретно не работает?

laba 20.04.2018 21:19

Цитата:

Сообщение от Sobaka74 (Сообщение 324749)
Может я ошибаюсь, мне показалось что прописать кнопки проще чем матрицу

Теоритически конечно проще.

Sobaka74 20.04.2018 21:20

Уважаемый Shalex, Вам отдельное спасибо за идею с диагональной станцией, вообще за ваш макет. Мой будущий макет чем то похож на ваше творение.

shalex 20.04.2018 21:34

Цитата:

Сообщение от Sobaka74 (Сообщение 324753)
Уважаемый Shalex, Вам отдельное спасибо за идею с диагональной станцией, вообще за ваш макет. Мой будущий макет чем то похож на ваше творение.

И Вам спасибо за теплые слова! Рад, что публикации на форуме достигают своей цели :) Идея диаг. станции была подсказана форумчанами, кстати.

Могу помочь с ардуиной, и не только я, но надо понять в чем проблема. Скетч не работает как задумывалось, не грузится, не компилируется?

Sobaka74 20.04.2018 21:40

Завтра попробую более точнее сформулировать что хочу сделать, и какая помощь нужна. А пока Всем большое спасибо за отклик на мою проблему.


Текущее время: 15:43. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
Copyright © ModelldepO.ru 2006 -