Форум ModelldepO  

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

Цитата:
Сообщение от Alexmit Посмотреть сообщение
Поставьте после строки:
char key = (char)Serial.read();
строку:
Serial.println(key);
Не могли бы вы выложить часть скетча, что бы было видно где должны быть строки: char key = (char)Serial.read(); и
Serial.println(key);. Пытаюсь вставить сам, компилятор выдает ошибку.
Sobaka74 вне форума   Вверх
Старый 21.04.2018, 20:53   #27
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 1,833
Сказал(а) 'не согласен(а)'!: 3
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 605
Поблагодарили 1,742 раз(а) в 1,019 сообщениях
Репутация: обеспечил(а) себе прекрасное будущее (1742)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Не могли бы вы выложить часть скетча,
PHP код:
void loop() {
//  char key = keypad.getKey();
  
char key = (char)Serial.read();
  
Serial.println(key);
// Управление станцией с левой стороны
  
if (key != 0) {

    switch (
key) {
      case 
'1'
Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Пытаюсь вставить сам, компилятор выдает ошибку.
А что именно хотите сделать? Это для чего скетч.
Alexmit вне форума   Вверх
Пользователь сказал cпасибо:
Старый 21.04.2018, 22:52   #28
Sobaka74
Новичок
 
Регистрация: 22.07.2017
Адрес: Россия
Сообщений: 35
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 11
Поблагодарили 5 раз(а) в 4 сообщениях
Репутация: пока неопределено (5)
По умолчанию

Скетч для кнопочного пульта управления стрелок и семафоров на макете.

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

Помогите пожалуйста заменить матричную клавиатуру на обычные кнопки. Проблема в большом количестве кнопок
(более 30). Далее кнопки останутся на мастере, еще останутся 6 реле. Остальные реле будут подключаться на слейвах.


PHP код:
// Подключаем библиотеки:
#include <Wire.h>                            // подключаем библиотеку для работы с шиной I2C
#include <LiquidCrystal_I2C.h>                    // подключаем библиотеку для работы с LCD_Rus дисплеем
#include <Keypad.h>                          // подключаем библиотеку для работы с матричной клавиатурой
 
// Объявляем переменные и константы:
LiquidCrystal_I2C lcd(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] = { 10987};
byte colPins[COLS] = { 65432};
 
Keypad keypad KeypadmakeKeymap(keys), rowPinscolPinsROWSCOLS );

void setup() {
  
Serial.begin(9600);
  
lcd.init();                                // инициируем LCD дисплей
  
lcd.backlight();                           // включаем подсветку LCD дисплея
  
 // выводим общие данные на дисплей
  
lcd.setCursor(00);                       // устанавливаем курсор в позицию: столбец 0, строка 0
  
lcd.print("Stancia");                      // выводим текст "Stancia"
 
  
 // назначаем цифровые выходы
  
  
for (int i 22<= 37i++) pinMode(iOUTPUT); // устанавливает режим работы порта - выход
  
}

void loop() {
  
char key keypad.getKey();


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

      case 
'4':
        
lcd.print(" ");                  // выводим -- на LCD дисплей
        
digitalWrite(24HIGH);          // "включаем" реле
        
digitalWrite(22HIGH);          // "включаем" реле
        
delay(500) ;                     // ждем 500 mс
        
digitalWrite(24LOW);           // "выключаем" реле
        
digitalWrite(22HIGH);          // "включаем" реле 
        
        
break;
        
        }
      }  
   
      } 
Sobaka74 вне форума   Вверх
Старый 21.04.2018, 22:58   #29
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 1,833
Сказал(а) 'не согласен(а)'!: 3
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 605
Поблагодарили 1,742 раз(а) в 1,019 сообщениях
Репутация: обеспечил(а) себе прекрасное будущее (1742)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Скетч для кнопочного пульта управления стрелок и семафоров на макете.
Ну это-то я помню. Для мастера или для слейва?
А лучше добавляйте архив со скетчем.
Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Проблема в большом количестве кнопок (более 30).
Вы хотите что-бы я за вас 30 раз copy-paste сделал. В 18 сообщении шаблон есть.
Alexmit вне форума   Вверх
Старый 21.04.2018, 23:14   #30
Sobaka74
Новичок
 
Регистрация: 22.07.2017
Адрес: Россия
Сообщений: 35
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 11
Поблагодарили 5 раз(а) в 4 сообщениях
Репутация: пока неопределено (5)
По умолчанию

Скетч прикрепил. Скопировать я сам смогу, и назначить выходы.
Цитата:
Сообщение от Alexmit Посмотреть сообщение
Для мастера или для слейва?
Пока для мастера.

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

Если не трудно, вставьте пожалуйста в скетч. (хотя для 6 кнопок).
Sobaka74 вне форума   Вверх
Старый 21.04.2018, 23:16   #31
Sobaka74
Новичок
 
Регистрация: 22.07.2017
Адрес: Россия
Сообщений: 35
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 11
Поблагодарили 5 раз(а) в 4 сообщениях
Репутация: пока неопределено (5)
По умолчанию

Сам скетч.
Вложения:
Тип файла: zip Stancia_4x5_LCD_Mega_3str.zip (1.4 Кб, 23 просмотров)
Sobaka74 вне форума   Вверх
Старый 22.04.2018, 00:05   #32
shalex
Местный
 
Регистрация: 08.07.2015
Адрес: Ступино
Сообщений: 2,508
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 3,986
Поблагодарили 2,542 раз(а) в 966 сообщениях
Репутация: репутация неоспорима (2543)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Сам скетч.
Могу ошибаться, но судя по скетчу и библиотеке keypad - в итоге опрашивается только первая кнопка.

Код:
// Returns a single key only. Retained for backwards compatibility.
char Keypad::getKey() {
	single_key = true;

	if (getKeys() && key[0].stateChanged && (key[0].kstate==PRESSED))
		return key[0].kchar;
	
	single_key = false;

	return NO_KEY;
}

Посмотрите пример из библиотеки, которую использует скетч. Он называется MultiKey. Дело в том, что нажать можно несколько кнопок сразу и это надо тоже учитывать.

Для решения узкой задачи - реакции на нажатие, как вариант, кусок кода из примера:

Код:
 switch (kpd.key[i].kstate) {  // Report active key state : IDLE, PRESSED, HOLD, or RELEASED
                    case PRESSED:
                    msg = " PRESSED.";
                break;
                    case HOLD:
                    msg = " HOLD.";
                break;
                    case RELEASED:
                    msg = " RELEASED.";
                break;
                    case IDLE:
                    msg = " IDLE.";
}
заменить на что-то вроде:


Код:
if (kpd.key[i].kstate == PRESSED)
switch (kpd.key[i].kchar) {
      case '1':
        lcd.print("1");                  // выводим -- на LCD дисплей
        digitalWrite(22, HIGH);          // "включаем" реле
        delay(500) ;                     // ждем 500 mс
        digitalWrite(22, LOW);           // "выключаем" реле
        
        break;
 
      case '2':
        lcd.print("2");                  // выводим -- на LCD дисплей
        digitalWrite(23, HIGH);          // "включаем" реле
        delay(500) ;                     // ждем 500 mс
        digitalWrite(23, LOW);           // "выключаем" реле
        
        break; 
/*
 и т.д. все остальные кнопки
*/
}
А еще лучше, этот длиннющий switch вынести в отдельную функцию. Там проще будет обработать противоречивые команды.
__________________
Стройка
shalex вне форума   Вверх
Старый 22.04.2018, 00:29   #33
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 1,833
Сказал(а) 'не согласен(а)'!: 3
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 605
Поблагодарили 1,742 раз(а) в 1,019 сообщениях
Репутация: обеспечил(а) себе прекрасное будущее (1742)
По умолчанию

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

Помогите пожалуйста с передачей команд с мастера на слейв1. Мастер работает нормально. Слейв не исполняет команды.
В мониторе порта слейва вижу кнопки которые нажимаю на мастере. Подскажите что не так написано в коде.
Код мастера:

PHP код:
// Подключаем библиотеки:
#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);  // устанавливает режим работы порта - выход
 
  
}

  
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(13HIGH);          // "включаем" реле 1-1 путь
        
delay(500) ;                     // ждем 500 mс
        
digitalWrite(13LOW);           // "выключаем" реле
        
break;
 
      case 
'2':
        
lcd1.print("2");                  // выводим -- на LCD дисплей
        
Serial1.println('2')  ;          // "включаем" реле 1-2 путь
        
break;
   
      case 
'3':
        
lcd1.print(" ");                  // выводим -- на LCD дисплей
        
Serial2.println('2')  ;          // "включаем" реле 1-2 путь
        
break;    
        }
      }  
    } 
Код слейва 1:

PHP код:
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 = keypad.getKey(); 
  //char key = (char)Serial.read(); 
  
Serial1.println(key); 
// Управление станцией с левой стороны 
  
if (key != 0) { 

// Управление станцией с левой стороны
  //if (key) {

 
    
switch (key) {
      case 
'2':
        
Serial1.println("2");
        
digitalWrite(13HIGH);          // "включаем" реле 1-1 путь
        
delay(500) ;                     // ждем 500 mс
        
digitalWrite(13LOW);           // "выключаем" реле
        
break;
 
        }
      }  
    } 
Вложения:
Тип файла: zip Stancia_master_Rus.zip (1.5 Кб, 16 просмотров)
Тип файла: zip Stancia_slave_Rus.zip (833 байт, 20 просмотров)
Sobaka74 вне форума   Вверх
Старый 24.04.2018, 18:19   #35
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,597
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,686
Поблагодарили 4,672 раз(а) в 1,771 сообщениях
Репутация: репутация неоспорима (4956)
По умолчанию

А вот эта строчка разве не в Loop должна быть?
char key = (char)Serial1.read();

Вот у меня так работает:
Код:
void loop() { 
   int i = 0;
  if (Serial1.available()) 
  {
      i = Serial1.read();
      if (i==0)
      {
       Serial.println("Reset port"); 
      }
      else
      {Serial.print("Activate port: ");
      Serial.println(i,DEC);}
     switch (i){
case 0:
      digitalWrite(2, HIGH);
      digitalWrite(statusLED, LOW);
      break;

case 1:
      digitalWrite(2, LOW);
      digitalWrite(statusLED, HIGH);
      break; 
     }
   }
}
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!
laba вне форума   Вверх
Старый 24.04.2018, 19:05   #36
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 1,833
Сказал(а) 'не согласен(а)'!: 3
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 605
Поблагодарили 1,742 раз(а) в 1,019 сообщениях
Репутация: обеспечил(а) себе прекрасное будущее (1742)
По умолчанию

Цитата:
Сообщение от laba Посмотреть сообщение
А вот эта строчка разве не в Loop должна быть?
Тем более она там почти есть, достаточно раскомментировать и добавить 1.
PHP код:
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;
 
        }
      }  
    } 
А потом действительно надо через if (Serial1.available()) { сделать.
Alexmit вне форума   Вверх
Пользователь сказал cпасибо:
Старый 24.04.2018, 19:22   #37
Sobaka74
Новичок
 
Регистрация: 22.07.2017
Адрес: Россия
Сообщений: 35
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 11
Поблагодарили 5 раз(а) в 4 сообщениях
Репутация: пока неопределено (5)
По умолчанию

Цитата:
Сообщение от Alexmit Посмотреть сообщение
А потом действительно надо через if (Serial1.available()) { сделать.
Пробовал, не получилось. Пробовать буду уже завтра.
Sobaka74 вне форума   Вверх
Старый 24.04.2018, 21:40   #38
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,597
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,686
Поблагодарили 4,672 раз(а) в 1,771 сообщениях
Репутация: репутация неоспорима (4956)
По умолчанию

ИМХОЕсли Вы не собираетесь использовать матричную клавиатуру, то зачем Вам посылать данные в формате символов(ASCII), определяемые библиотекой для клавы? Отправляйте просто какое-то числовое значение, а слейв, получив определённое число, активирует тот или иной порт.
Или Вы всё-таки решили делать с клавиатурой?
ИМХОВы по-моему и себя и других уже запутали.
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!
laba вне форума   Вверх
Старый 24.04.2018, 23:16   #39
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 1,833
Сказал(а) 'не согласен(а)'!: 3
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 605
Поблагодарили 1,742 раз(а) в 1,019 сообщениях
Репутация: обеспечил(а) себе прекрасное будущее (1742)
По умолчанию

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

void loop() { 
  if (
Serial1.available()) { 
    
char key = (char)Serial1.read(); 
    
Serial.println(key); 

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

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

Цитата:
Сообщение от laba Посмотреть сообщение
Или Вы всё-таки решили делать с клавиатурой?
Буду использовать матричную клавиатуру, меньше входов - больше кнопок.

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

Единственная проблема: цыфровые выходы при включении принимают значение "0", а мне желательно нужна "1".
Это связано с подключением релейных модулей, при "0" на входе реле включается и будет висеть под напряжением, а это лишния нагрузка на бп.
Sobaka74 вне форума   Вверх
Старый 25.04.2018, 10:09   #41
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,597
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,686
Поблагодарили 4,672 раз(а) в 1,771 сообщениях
Репутация: репутация неоспорима (4956)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Единственная проблема: цыфровые выходы при включении принимают значение "0", а мне желательно нужна "1".
Это связано с подключением релейных модулей, при "0" на входе реле включается и будет висеть под напряжением, а это лишния нагрузка на бп.
Сделайте инверсию. Пусть там по-умолчанию будет HIGH, а для активации, выход будете переводить в состояние LOW.
В setup переводите все выходы в состояние HIGH, а в loop меняете строчки активации порта местами.
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!
laba вне форума   Вверх
Старый 25.04.2018, 11:09   #42
shalex
Местный
 
Регистрация: 08.07.2015
Адрес: Ступино
Сообщений: 2,508
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 3,986
Поблагодарили 2,542 раз(а) в 966 сообщениях
Репутация: репутация неоспорима (2543)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
"0", а мне желательно нужна "1".
Резистором подтянуть к +5В ?
__________________
Стройка
shalex вне форума   Вверх
Старый 25.04.2018, 12:05   #43
Pooh
Садовод
 
Аватар для Pooh
 
Регистрация: 02.01.2008
Адрес: Москва
Сообщений: 1,242
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 14 раз(а) в 10 сообщениях
Сказал(а) спасибо: 717
Поблагодарили 2,330 раз(а) в 605 сообщениях
Репутация: репутация неоспорима (2369)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Это связано с подключением релейных модулей, при "0" на входе реле включается и будет висеть под напряжением, а это лишния нагрузка на бп.
Дык реле есть как с нормально открытыми выходами, так и с нормально закрытыми. Можно выбрать, что удобнее. Более того, современные реле очень часто вообще с перекидными контактами и вопрос лишь в том, откуда брать сигнал.

Или у Вас уже есть конкретное "железо" и подстраиваетесь именно под него?
Pooh вне форума   Вверх
Старый 25.04.2018, 13:20   #44
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,597
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,686
Поблагодарили 4,672 раз(а) в 1,771 сообщениях
Репутация: репутация неоспорима (4956)
По умолчанию

Цитата:
Сообщение от Pooh Посмотреть сообщение
Или у Вас уже есть конкретное "железо" и подстраиваетесь именно под него?
ИМХОЯ думаю, что у товарища есть готовые релейные модули для Arduino, они как раз управляются низким уровнем сигнала.
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!
laba вне форума   Вверх
Старый 25.04.2018, 14:46   #45
Sobaka74
Новичок
 
Регистрация: 22.07.2017
Адрес: Россия
Сообщений: 35
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 11
Поблагодарили 5 раз(а) в 4 сообщениях
Репутация: пока неопределено (5)
По умолчанию

У меня как раз релейные модули для Arduino, они как раз управляются низким уровнем сигнала.

---------- Сообщение добавлено в 17:46 ---------- Предыдущие сообщение было в 17:45 ----------

Может кто подсказать как сделать инверсию на выходах.
Sobaka74 вне форума   Вверх
Старый 25.04.2018, 14:52   #46
shalex
Местный
 
Регистрация: 08.07.2015
Адрес: Ступино
Сообщений: 2,508
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 3,986
Поблагодарили 2,542 раз(а) в 966 сообщениях
Репутация: репутация неоспорима (2543)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Может кто подсказать как сделать инверсию на выходах.
...
digitalWrite(13, LOW); // "включаем" реле 1-1 путь
delay(500) ; // ждем 500 mс
digitalWrite(13, HIGH); // "выключаем" реле
...
__________________
Стройка
shalex вне форума   Вверх
Пользователь сказал cпасибо:
Старый 25.04.2018, 15:07   #47
Sobaka74
Новичок
 
Регистрация: 22.07.2017
Адрес: Россия
Сообщений: 35
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 11
Поблагодарили 5 раз(а) в 4 сообщениях
Репутация: пока неопределено (5)
По умолчанию

Цитата:
Сообщение от shalex Посмотреть сообщение
digitalWrite(13, LOW); // "включаем" реле 1-1 путь
delay(500) ; // ждем 500 mс
digitalWrite(13, HIGH); // "выключаем" реле
это инверсия при управлении. Нужно чтобы при включении на выходах был высокий уровень, реле будет выключено.

---------- Сообщение добавлено в 18:07 ---------- Предыдущие сообщение было в 18:06 ----------

Нужно чтобы при включении питании ардуино на выходах был высокий уровень, реле будет выключено
Sobaka74 вне форума   Вверх
Старый 25.04.2018, 15:16   #48
shalex
Местный
 
Регистрация: 08.07.2015
Адрес: Ступино
Сообщений: 2,508
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 3,986
Поблагодарили 2,542 раз(а) в 966 сообщениях
Репутация: репутация неоспорима (2543)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Нужно чтобы при включении на выходах был высокий уровень, реле будет выключено.
Вроде написал выше - подтянуть вывод к +5В через резистор, например 10кОм.
__________________
Стройка
shalex вне форума   Вверх
Старый 25.04.2018, 15:36   #49
laba
Местный
 
Аватар для laba
 
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,597
Сказал(а) 'не согласен(а)'!: 9
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,686
Поблагодарили 4,672 раз(а) в 1,771 сообщениях
Репутация: репутация неоспорима (4956)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Нужно чтобы при включении на выходах был высокий уровень, реле будет выключено.
Либо сделайте подтяжку через резистор, либо включите её аппаратно, задав в setup.
Как это сделать читайте в описании цифровых портов ввода/вывода для Arduino. Там правда написано для портов настроенных, как INPUT, но что Вам мешает ещё в setup все выходы сделать с уровнем HIGH? По-моему ничего......

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

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Может кто подсказать как сделать инверсию на выходах.
Цитата:
Сообщение от shalex Посмотреть сообщение
Вроде написал выше - подтянуть вывод к +5В через резистор, например 10кОм.
Цитата:
Сообщение от laba Посмотреть сообщение
Сделайте инверсию. Пусть там по-умолчанию будет HIGH, а для активации, выход будете переводить в состояние LOW.
В setup переводите все выходы в состояние HIGH, а в loop меняете строчки активации порта местами.
Вы будите внимательно читать, что Вам люди пишут.......
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB
С приветом из подземки!!!
laba вне форума   Вверх
Старый 25.04.2018, 15:37   #50
Alexmit
Местный
 
Регистрация: 29.06.2010
Адрес: Москва
Сообщений: 1,833
Сказал(а) 'не согласен(а)'!: 3
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 605
Поблагодарили 1,742 раз(а) в 1,019 сообщениях
Репутация: обеспечил(а) себе прекрасное будущее (1742)
По умолчанию

Цитата:
Сообщение от Sobaka74 Посмотреть сообщение
Нужно чтобы при включении питании ардуино на выходах был высокий уровень, реле будет выключено
Добавьте строчку сразу под:
for (int i = 8; i <= 13; i++) pinMode(i, OUTPUT); // устанавливает режим работы порта - выход

for (int i = 8; i <= 13; i++) digitalWrite(i, HIGH);
Alexmit вне форума   Вверх
Пользователь сказал cпасибо:
Ответ

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

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

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:13. Часовой пояс GMT +3.


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