Форум ModelldepO  

Вернуться   Форум ModelldepO > Моделизм > Электрика и DCC > Arduino
Ответ
 
Опции темы Опции просмотра
Старый 25.04.2018, 15:46   #51
shalex
Местный
 
Регистрация: 08.07.2015
Адрес: МО
Сообщений: 2,853
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 4,634
Поблагодарили 3,271 раз(а) в 1,169 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
1 Всего
Репутация: репутация неоспорима (3282)
По умолчанию

Цитата:
Сообщение от laba Посмотреть сообщение
либо включите её аппаратно, задав в setup
Эх, к сожалению, это будет неполным решением. Реле все равно может сработать, пока ардуина загружается.
shalex вне форума  
Вверх
Старый 25.04.2018, 15:59   #52
Sobaka74
Новичок
 
Регистрация: 22.07.2017
Адрес: Россия
Сообщений: 35
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 11
Поблагодарили 5 раз(а) в 4 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: пока неопределено (5)
По умолчанию

Домой приду, буду пробовать.
Sobaka74 вне форума  
Вверх
Старый 25.04.2018, 16:02   #53
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 2,829
Сказал(а) 'не согласен(а)'!: 6
Сказали 'не согласен'! 2 раз(а) в 2 сообщениях
Сказал(а) спасибо: 971
Поблагодарили 2,639 раз(а) в 1,561 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
1 Всего
Репутация: репутация неоспорима (2665)
По умолчанию

Цитата:
Сообщение от shalex Посмотреть сообщение
Эх, к сожалению, это будет неполным решением. Реле все равно может сработать, пока ардуина загружается.
В данном случае этого не произойдёт.
Т.к. уже выяснили какие реле используются. Там оптрон на входе. И его можно не подтягивать.
Вот если бы там была база транзистора или вход микросхемы - вот тогда другое дело.
Alexmit вне форума  
Вверх
Старый 25.04.2018, 16:45   #54
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,693
Сказал(а) 'не согласен(а)'!: 10
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,942
Поблагодарили 4,844 раз(а) в 1,822 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: репутация неоспорима (5127)
По умолчанию

Цитата:
Сообщение от Alexmit Посмотреть сообщение
А одно число пересылать это не дело.
Как вариант, этим числом можно сразу передать номер того порта, который нужно включить и присвоить его переменной, саму переменную прописать уже в коде, типа:
Код:
int port;
port=Serial.read();
digitalWrite(port, LOW); // "включаем" реле 1-1 путь
delay(500) ; // ждем 500 mс
digitalWrite(port, HIGH); // "выключаем" реле
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!
laba вне форума  
Вверх
Старый 25.04.2018, 16:55   #55
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 2,829
Сказал(а) 'не согласен(а)'!: 6
Сказали 'не согласен'! 2 раз(а) в 2 сообщениях
Сказал(а) спасибо: 971
Поблагодарили 2,639 раз(а) в 1,561 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
1 Всего
Репутация: репутация неоспорима (2665)
По умолчанию

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

Добавил строку: for (int i = 8; i <= 13; i++) digitalWrite(i, HIGH);.
При включении ардуины, выходы все равно с начало в низкий уровень. Только после нажатия кнопки, переходит в высокий уровень.
Sobaka74 вне форума  
Вверх
Старый 25.04.2018, 19:01   #57
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,693
Сказал(а) 'не согласен(а)'!: 10
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,942
Поблагодарили 4,844 раз(а) в 1,822 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: репутация неоспорима (5127)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
При включении ардуины, выходы все равно с начало в низкий уровень. Только после нажатия кнопки, переходит в высокий уровень.
Чудес-то не бывает.......
ИМХОЗначит у Вас в loop что-то сразу переводит их в низкий уровень или в setup установка уровня HIGH не проходит.
Попробуйте без цикла выставить все выходы в HIGH:
Код:
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!
laba вне форума  
Вверх
2 пользователя(ей) сказали cпасибо:
Старый 25.04.2018, 19:36   #58
Sobaka74
Новичок
 
Регистрация: 22.07.2017
Адрес: Россия
Сообщений: 35
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 11
Поблагодарили 5 раз(а) в 4 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: пока неопределено (5)
По умолчанию

Цитата:
Сообщение от laba Посмотреть сообщение
Попробуйте без цикла выставить все выходы в HIGH:
В таком варианте все ОК.

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

А возможно записать эти условия в одной строке, а то получится 30 строк для 30 кнопок.
Sobaka74 вне форума  
Вверх
Старый 25.04.2018, 20:06   #59
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 2,829
Сказал(а) 'не согласен(а)'!: 6
Сказали 'не согласен'! 2 раз(а) в 2 сообщениях
Сказал(а) спасибо: 971
Поблагодарили 2,639 раз(а) в 1,561 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
1 Всего
Репутация: репутация неоспорима (2665)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
А возможно записать эти условия в одной строке, а то получится 30 строк для 30 кнопок.
Ну не в одной, а например в шести можно.

Но всё-таки попробуйте через for. Только как положено с кавычками.
Arduino код:
for (int i 8<= 13i++) {
digitalWrite(iHIGH);

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

Большое спасибо. Все получилось.
Sobaka74 вне форума  
Вверх
Старый 26.04.2018, 00:16   #61
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,693
Сказал(а) 'не согласен(а)'!: 10
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,942
Поблагодарили 4,844 раз(а) в 1,822 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: репутация неоспорима (5127)
По умолчанию

Цитата:
Сообщение от Alexmit Посмотреть сообщение
Но всё-таки попробуйте через for. Только как положено с кавычками.
Тогда может в том же цикле делать, где определяются порты?
Код:
// назначаем цифровые выходы 
  for (int i =  8; i <= 13; i++) 
     {
       pinMode(i, OUTPUT); 
       digitalWrite(i, HIGH);
     }
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!
laba вне форума  
Вверх
Старый 26.04.2018, 17:12   #62
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 2,829
Сказал(а) 'не согласен(а)'!: 6
Сказали 'не согласен'! 2 раз(а) в 2 сообщениях
Сказал(а) спасибо: 971
Поблагодарили 2,639 раз(а) в 1,561 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
1 Всего
Репутация: репутация неоспорима (2665)
По умолчанию

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

С выходами разобрался с вашей помощью, все работает на мастере как надо.
С передачей на слейв пока ни как не получается. Вопрос для смеха, может я не правильно соединяю?
На мастере TX0, на слейве RX0.
Код мастера:

Arduino код:
// Подключаем библиотеки:
#include <Wire.h>                            // подключаем библиотеку для работы с шиной I2C
#include <LCD_1602_RUS.h>                    // подключаем библиотеку для работы с LCD_Rus дисплеем
#include <Keypad.h>                          // подключаем библиотеку для работы с матричной клавиатурой
 
// Объявляем переменные и константы:
LCD_1602_RUS lcd1(0x27204);               // объявляем переменную для работы с LCD дисплеем, указывая параметры дисплея (адрес I2C = 0x3F, количество столбцов = 20, количество строк = 4)

const byte ROWS 4;                         // 4 строки
const byte COLS 5;                         // 5 столбца
char keys[ROWS][COLS] = {
  {
'1''3''9''A''G'},
  {
'2''4''0''B''I'},
  {
'5''7''C''E''K'},
  {
'6''8''D''F''L'},
  };
byte rowPins[ROWS] = { A0A1A2A3};
byte colPins[COLS] = { A5A6A7A8A9};
 
Keypad keypad KeypadmakeKeymap(keys), rowPinscolPinsROWSCOLS );

void setup() {
   
Serial.begin(9600);
  
Serial1.begin(9600);
  
//Serial2.begin(9600);
  
  
lcd1.init();                                // инициируем LCD дисплей
  
lcd1.backlight();                           // включаем подсветку LCD дисплея

 // выводим общие данные на дисплей
  
lcd1.setCursor(00);                       // устанавливаем курсор в позицию: столбец 0, строка 0
  
lcd1.print( L"Станция");                    // выводим текст "Станция"
  
 // назначаем цифровые выходы
  
for (int i =  2<= 19i++) pinMode(iOUTPUT);  // устанавливает режим работы порта - выход
// устанавливаем выходы в высокое состояние

for (int i 219i++) { 
digitalWrite(iHIGH); 

  
  }

  
void loop() { 
  
char key keypad.getKey(); 
  
//char key = (char)Serial.read(); 
  
Serial.println(key); 
// Управление станцией с левой стороны 
  
if (key != 0) { 

// Управление станцией с левой стороны
  //if (key) {
    
lcd1.setCursor(51);                    // устанавливаем курсор в позицию: столбец 5, строка 1
 
    
switch (key) {
      case 
'1':
        
lcd1.print("1");                  // выводим -- на LCD дисплей
        
digitalWrite(13LOW);          // "включаем" реле 1-1 путь
        
delay(200) ;                     // ждем 500 mс
        
digitalWrite(13HIGH);           // "выключаем" реле
        
break;
 
      case 
'2':
        
lcd1.print("2");                  // выводим -- на LCD дисплей
        
Serial1.println('2')  ;          // "включаем" реле 1-2 путь
        
digitalWrite(12LOW);          // "включаем" реле 1-1 путь
        
delay(500) ;                     // ждем 500 mс
        
digitalWrite(12HIGH);           // "выключаем" реле
        
break;
   
      case 
'3':
        
lcd1.print("3");                  // выводим -- на LCD дисплей
        
Serial1.println('3')  ;          // "включаем" реле 1-2 путь
        
digitalWrite(11LOW);          // "включаем" реле 1-1 путь
        
delay(500) ;                     // ждем 500 mс
        
digitalWrite(11HIGH);           // "выключаем" реле
        
break;    
        }
      }  
    } 
Если что-то не правильно, подскажите пожалуйста.
Вложения:
Тип файла: zip Stancia_master_11.zip (1.5 Кб, 46 просмотров)
Sobaka74 вне форума  
Вверх
Старый 26.04.2018, 19:47   #64
Sobaka74
Новичок
 
Регистрация: 22.07.2017
Адрес: Россия
Сообщений: 35
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 11
Поблагодарили 5 раз(а) в 4 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: пока неопределено (5)
По умолчанию

Код слейва:

Arduino код:
//char key = (char)Serial1.read(); 
void setup() { 
  
Serial.begin(9600); 
  
Serial1.begin(9600); 
  
//Serial2.begin(9600); 
  
 // назначаем цифровые выходы 
  
for (int i =  8<= 13i++) pinMode(iOUTPUT);  // устанавливает режим работы порта - выход 
  


  
void loop() {  
  
char key = (char)Serial1.read();  
  
Serial.println(key);  
// Управление станцией с левой стороны  
  
if (key != 0) {  

// Управление станцией с левой стороны 
  //if (key) { 
  
    
switch (key) { 
      case 
'2'
        
Serial.println("2"); 
        
digitalWrite(13HIGH);          // "включаем" реле 1-1 путь 
        
delay(500) ;                     // ждем 500 mс 
        
digitalWrite(13LOW);           // "выключаем" реле 
        
break; 

      case 
'3':
        
Serial.println("3");
        
digitalWrite(11HIGH);          // "включаем" реле 1-1 путь
        
delay(500) ;                     // ждем 500 mс
        
digitalWrite(11LOW);           // "выключаем" реле
        
break;

 
        }
      }  
    } 
Вложения:
Тип файла: zip Stancia_slave_Rus.zip (848 байт, 42 просмотров)
Sobaka74 вне форума  
Вверх
Старый 26.04.2018, 19:52   #65
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 2,829
Сказал(а) 'не согласен(а)'!: 6
Сказали 'не согласен'! 2 раз(а) в 2 сообщениях
Сказал(а) спасибо: 971
Поблагодарили 2,639 раз(а) в 1,561 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
1 Всего
Репутация: репутация неоспорима (2665)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
С передачей на слейв пока ни как не получается. Вопрос для смеха, может я не правильно соединяю?
На мастере TX0, на слейве RX0.
Естественно неправильно.
В коде же написано Serial1.println('2');, соответственно это TX1 - 18 пин.

В слейве char key = (char)Serial1.read();, соответственно это RX1 - 19 пин.

А TX0 и RX0 это то, что на USB разъём идёт.
Alexmit вне форума  
Вверх
Пользователь сказал cпасибо:
Старый 26.04.2018, 20:05   #66
Sobaka74
Новичок
 
Регистрация: 22.07.2017
Адрес: Россия
Сообщений: 35
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 11
Поблагодарили 5 раз(а) в 4 сообщениях
Все 'Спасибо' этого пользователя. :
0 за это сообщение
0 Всего
Репутация: пока неопределено (5)
По умолчанию

Ура, вроде заработало. Спасибо.
Sobaka74 вне форума  
Вверх
Ответ

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Аксессуарный пульт Alexmit Arduino 55 18.05.2021 00:04
Новый пульт от 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


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


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