Форум ModelldepO  

Вернуться   Форум ModelldepO > Моделизм > Электрика и DCC > Arduino
Ответ
 
Опции темы Опции просмотра
Старый 19.04.2018, 19:35   #1
Sobaka74
Новичок
 
Регистрация: 22.07.2017
Адрес: Россия
Сообщений: 35
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 11
Поблагодарили 5 раз(а) в 4 сообщениях
Репутация: пока неопределено (5)
По умолчанию Кнопочный пульт.

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

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

PHP код:
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; 
Sobaka74 вне форума   Вверх
Пользователь сказал cпасибо:
Старый 19.04.2018, 19:42   #2
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 1,576
Сказал(а) 'не согласен(а)'!: 3
Сказали 'не согласен'! 1 раз в 1 сообщении
Сказал(а) спасибо: 428
Поблагодарили 1,470 раз(а) в 850 сообщениях
Репутация: этим человеком можно гордиться (1470)
По умолчанию

У вас структура то правильная? (это просто пример)
PHP код:
  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;
  } 
Alexmit вне форума   Вверх
Старый 19.04.2018, 19:44   #3
Elwood
Хоббит
 
Аватар для Elwood
 
Регистрация: 22.01.2012
Адрес: Долгопрудный
Сообщений: 2,071
Сказал(а) 'не согласен(а)'!: 54
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 6,145
Поблагодарили 5,054 раз(а) в 1,046 сообщениях
Репутация: репутация неоспорима (5083)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Сам пробовал, но ничего не получилось.
А что именно не получилось?
Elwood вне форума   Вверх
Старый 19.04.2018, 19:56   #4
Sobaka74
Новичок
 
Регистрация: 22.07.2017
Адрес: Россия
Сообщений: 35
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 11
Поблагодарили 5 раз(а) в 4 сообщениях
Репутация: пока неопределено (5)
По умолчанию

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

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

Еще бы понимать что писать в скобках.
Sobaka74 вне форума   Вверх
Старый 19.04.2018, 19:58   #5
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 1,576
Сказал(а) 'не согласен(а)'!: 3
Сказали 'не согласен'! 1 раз в 1 сообщении
Сказал(а) спасибо: 428
Поблагодарили 1,470 раз(а) в 850 сообщениях
Репутация: этим человеком можно гордиться (1470)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Не заработало даже на 1 ардуине.
Вы уж тогда весь текст в архиве выложите.
Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Еще бы понимать что писать в скобках.
В каких?
Или закрывающие не поставили?
Поэтому лучше давайте весь текст.
Alexmit вне форума   Вверх
Старый 19.04.2018, 20:09   #6
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,485
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,285
Поблагодарили 4,419 раз(а) в 1,700 сообщениях
Репутация: репутация неоспорима (4672)
По умолчанию

ИМХОА зачем I2C? Раз у Вас Mega, то можно и Serial обойтись. Для каждого Slave, можно свой Serial выделить, отдельный. Тем более, что Вам обмен не нужен, значит можно обойтись только линией TX.
И выдержку времени лучше делать без функции delay.
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!
laba вне форума   Вверх
Старый 19.04.2018, 20:12   #7
Sobaka74
Новичок
 
Регистрация: 22.07.2017
Адрес: Россия
Сообщений: 35
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 11
Поблагодарили 5 раз(а) в 4 сообщениях
Репутация: пока неопределено (5)
По умолчанию

Цитата:
Сообщение от laba Посмотреть сообщение
ИМХОА зачем I2C? Раз у Вас Mega, то можно и Serial обойтись. Для каждого Slave, можно свой Serial выделить, отдельный. Тем более, что Вам обмен не нужен, значит можно обойтись только линией TX.
Без разницы кокой будет обмен. Информация с кнопок выводится на экран с мастера.
Sobaka74 вне форума   Вверх
Старый 19.04.2018, 20:15   #8
Sobaka74
Новичок
 
Регистрация: 22.07.2017
Адрес: Россия
Сообщений: 35
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 11
Поблагодарили 5 раз(а) в 4 сообщениях
Репутация: пока неопределено (5)
По умолчанию

За основу взял скетч на одной ардуине мега и матричной клавиатуре. Но мне нужно больше кнопок и больше стрелок и светофоров. Хочется разнести ардуины по макету. Скетч большой, поэтому прикрепил архив.
Вложения:
Тип файла: rar Stancia_4x5_LCD_Mega_3str.rar (2.2 Кб, 21 просмотров)
Sobaka74 вне форума   Вверх
Старый 19.04.2018, 21:27   #9
shalex
Местный
 
Регистрация: 08.07.2015
Адрес: Ступино
Сообщений: 2,040
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 3,312
Поблагодарили 1,822 раз(а) в 717 сообщениях
Репутация: обеспечил(а) себе прекрасное будущее (1823)
По умолчанию

Как вариант - снимок экрана, на котором можно увидеть то, что "не получилось".
Тут либо код не компилируется, либо правильно не работает.
__________________
Стройка
shalex на форуме   Вверх
Старый 20.04.2018, 03:07   #10
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 1,576
Сказал(а) 'не согласен(а)'!: 3
Сказали 'не согласен'! 1 раз в 1 сообщении
Сказал(а) спасибо: 428
Поблагодарили 1,470 раз(а) в 850 сообщениях
Репутация: этим человеком можно гордиться (1470)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Скетч большой, поэтому прикрепил архив.
Который либо битый, либо пустой. И пожалуйста пакуйте в ZIP.
Alexmit вне форума   Вверх
Старый 20.04.2018, 04:31   #11
Sobaka74
Новичок
 
Регистрация: 22.07.2017
Адрес: Россия
Сообщений: 35
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 11
Поблагодарили 5 раз(а) в 4 сообщениях
Репутация: пока неопределено (5)
По умолчанию

Прошу прощения, не проверил. Переупаковал.
Вложения:
Тип файла: zip Stancia_4x5_LCD_Mega_3str.zip (2.5 Кб, 8 просмотров)
Sobaka74 вне форума   Вверх
Старый 20.04.2018, 12:44   #12
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 1,576
Сказал(а) 'не согласен(а)'!: 3
Сказали 'не согласен'! 1 раз в 1 сообщении
Сказал(а) спасибо: 428
Поблагодарили 1,470 раз(а) в 850 сообщениях
Репутация: этим человеком можно гордиться (1470)
По умолчанию

Код который управляет выходами рабочий.
Клавиатуры у меня такой нет проверить не могу.
Поставьте после строки:
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"); - (только с нужной буквой)
Alexmit вне форума   Вверх
Старый 20.04.2018, 14:20   #13
Sobaka74
Новичок
 
Регистрация: 22.07.2017
Адрес: Россия
Сообщений: 35
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 11
Поблагодарили 5 раз(а) в 4 сообщениях
Репутация: пока неопределено (5)
По умолчанию

Как ра
Цитата:
Сообщение от Alexmit Посмотреть сообщение
Клавиатуры у меня такой нет проверить не могу.
Как раз и надо сделать на кнопках, а не на матричной клавиатуре.
Sobaka74 вне форума   Вверх
Старый 20.04.2018, 14:31   #14
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 1,576
Сказал(а) 'не согласен(а)'!: 3
Сказали 'не согласен'! 1 раз в 1 сообщении
Сказал(а) спасибо: 428
Поблагодарили 1,470 раз(а) в 850 сообщениях
Репутация: этим человеком можно гордиться (1470)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Как раз и надо сделать на кнопках,
Тогда подробно пишем, что надо сделать.
Кнопки - сколько?
Куда и как планировали подключить?
Alexmit вне форума   Вверх
Старый 20.04.2018, 16:54   #15
Sobaka74
Новичок
 
Регистрация: 22.07.2017
Адрес: Россия
Сообщений: 35
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 11
Поблагодарили 5 раз(а) в 4 сообщениях
Репутация: пока неопределено (5)
По умолчанию

Цитата:
Сообщение от Alexmit Посмотреть сообщение
Тогда подробно пишем, что надо сделать.
Кнопки - сколько?
Куда и как планировали подключить?
Все описал в перво посте.
Sobaka74 вне форума   Вверх
Старый 20.04.2018, 17:36   #16
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 1,576
Сказал(а) 'не согласен(а)'!: 3
Сказали 'не согласен'! 1 раз в 1 сообщении
Сказал(а) спасибо: 428
Поблагодарили 1,470 раз(а) в 850 сообщениях
Репутация: этим человеком можно гордиться (1470)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Все описал в перво посте.
Если всего 6, то на мастере вообще примитивно.
pult-1.zip
Надеюсь с исправлениями сами справитесь.
А на слейвах надо исправить как написано выше и лишнее убрать.
Alexmit вне форума   Вверх
Пользователь сказал cпасибо:
Старый 20.04.2018, 17:56   #17
Sobaka74
Новичок
 
Регистрация: 22.07.2017
Адрес: Россия
Сообщений: 35
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 11
Поблагодарили 5 раз(а) в 4 сообщениях
Репутация: пока неопределено (5)
По умолчанию

Цитата:
Сообщение от Alexmit Посмотреть сообщение
Если всего 6, то на мастере вообще примитивно.
Вообще кнопок планируется около 30, на мастере всего 6 реле, остальные реле будут на слейвах. 6 кнопок указано для упрощения
вопроса, остальное надеюсь дописать сам. (Хочется самому з\хоть чтото понимать и сделать).
Завтра буду дома, займусь. Все равно большое СПАСИБО.
Sobaka74 вне форума   Вверх
Старый 20.04.2018, 18:04   #18
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 1,576
Сказал(а) 'не согласен(а)'!: 3
Сказали 'не согласен'! 1 раз в 1 сообщении
Сказал(а) спасибо: 428
Поблагодарили 1,470 раз(а) в 850 сообщениях
Репутация: этим человеком можно гордиться (1470)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Вообще кнопок планируется около 30,
Это немного другое дело. Хотя входов хватает. Например 16 аналоговых и 16 с 22 по 37 пин.

Цитата из моего же поста в другой теме:
Инициализацию кнопок сделал на Си.
PHP код:
//SETUP INPUT PIN:
  
DDRC 0x00;  //set input mode pin (37-30)
  
PORTC 0xFF//Turn on internal Pull-Up Resistor (37-30) 
Пины 22 - 29 это порт A. Получится:
PHP код:
//SETUP INPUT PIN:
  
DDRA 0x00;  //set input mode pin (22-29)
  
PORTA 0xFF//Turn on internal Pull-Up Resistor (22-29) 
И соответственно работа с кнопками, для каждой кнопки:

PHP код:
  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;
Alexmit вне форума   Вверх
2 пользователя(ей) сказали cпасибо:
Старый 20.04.2018, 20:43   #19
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,485
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,285
Поблагодарили 4,419 раз(а) в 1,700 сообщениях
Репутация: репутация неоспорима (4672)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Как раз и надо сделать на кнопках, а не на матричной клавиатуре.
А что мешает кнопки подключить в режиме матрицы? Хоть на меге портов и навалом, но всё-таки экономия.
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!
laba вне форума   Вверх
Старый 20.04.2018, 21:07   #20
Sobaka74
Новичок
 
Регистрация: 22.07.2017
Адрес: Россия
Сообщений: 35
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 11
Поблагодарили 5 раз(а) в 4 сообщениях
Репутация: пока неопределено (5)
По умолчанию

Цитата:
Сообщение от laba Посмотреть сообщение
А что мешает кнопки подключить в режиме матрицы? Хоть на меге портов и навалом, но всё-таки экономия.
У меня возникла проблема, как управлять реле на слейвах. Может я ошибаюсь, мне показалось что прописать кнопки проще чем матрицу для управлением реле на слейвах. Может я не прав?
Sobaka74 вне форума   Вверх
Старый 20.04.2018, 21:08   #21
shalex
Местный
 
Регистрация: 08.07.2015
Адрес: Ступино
Сообщений: 2,040
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 3,312
Поблагодарили 1,822 раз(а) в 717 сообщениях
Репутация: обеспечил(а) себе прекрасное будущее (1823)
По умолчанию

Что конкретно не работает?
__________________
Стройка
shalex на форуме   Вверх
Старый 20.04.2018, 21:19   #22
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,485
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,285
Поблагодарили 4,419 раз(а) в 1,700 сообщениях
Репутация: репутация неоспорима (4672)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Может я ошибаюсь, мне показалось что прописать кнопки проще чем матрицу
Теоритически конечно проще.
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!
laba вне форума   Вверх
Старый 20.04.2018, 21:20   #23
Sobaka74
Новичок
 
Регистрация: 22.07.2017
Адрес: Россия
Сообщений: 35
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 11
Поблагодарили 5 раз(а) в 4 сообщениях
Репутация: пока неопределено (5)
По умолчанию

Уважаемый Shalex, Вам отдельное спасибо за идею с диагональной станцией, вообще за ваш макет. Мой будущий макет чем то похож на ваше творение.
Sobaka74 вне форума   Вверх
Пользователь сказал cпасибо:
Старый 20.04.2018, 21:34   #24
shalex
Местный
 
Регистрация: 08.07.2015
Адрес: Ступино
Сообщений: 2,040
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 3,312
Поблагодарили 1,822 раз(а) в 717 сообщениях
Репутация: обеспечил(а) себе прекрасное будущее (1823)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Уважаемый Shalex, Вам отдельное спасибо за идею с диагональной станцией, вообще за ваш макет. Мой будущий макет чем то похож на ваше творение.
И Вам спасибо за теплые слова! Рад, что публикации на форуме достигают своей цели Идея диаг. станции была подсказана форумчанами, кстати.

Могу помочь с ардуиной, и не только я, но надо понять в чем проблема. Скетч не работает как задумывалось, не грузится, не компилируется?
__________________
Стройка
shalex на форуме   Вверх
Старый 20.04.2018, 21:40   #25
Sobaka74
Новичок
 
Регистрация: 22.07.2017
Адрес: Россия
Сообщений: 35
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 11
Поблагодарили 5 раз(а) в 4 сообщениях
Репутация: пока неопределено (5)
По умолчанию

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

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Аксессуарный пульт Alexmit Arduino 53 22.05.2018 21:48
Новый пульт от Lenz Saddam Электрика и DCC 0 17.11.2016 14:36
FB1-как стрелочный пульт. Возможно? lohmach Цифровая аппаратура Modelldepo 1 10.11.2010 13:49
Стрелочный пульт к DCC Roco ? Yuriy Электрика и DCC 57 18.09.2010 16:24
Пульт управления макетом. Doctor_MB Электрика и DCC 39 06.03.2010 22:38


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


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