#1 Re: Програмування Arduino » Передача значений из порта в порт в пределах одной Arduino - реально? » 2020-01-16 14:18:29

г0сть пише:
valerakopay пише:
MikeM пише:

INPUT заменить на INPUT_PULLUP

спасибо за совет, попробовал - теперь даже при разомкнутых проводниках при чтении порта всегда HIGH.

так и должно быть. Инвертируйте в скетче сигналы

вы имеете ввиду записывать в порт LOW а не HIGH? и если при чтении будет LOW значит порты замкнуты друг на друга?

#2 Re: Програмування Arduino » Передача значений из порта в порт в пределах одной Arduino - реально? » 2020-01-16 00:03:56

MikeM пише:

INPUT заменить на INPUT_PULLUP

спасибо за совет, попробовал - теперь даже при разомкнутых проводниках при чтении порта всегда HIGH.

#3 Re: Програмування Arduino » Передача значений из порта в порт в пределах одной Arduino - реально? » 2020-01-14 20:15:36

Настало время установки smile по указанному коду выше когда порты замкнуты (без резистора) - все отлично, реле замыкается и не размыкается пока не разомкнуть проводники что замыкают порты.
Но вот в разомкнутом состоянии реле то замыкается то размыкается на глаз как раз в пол секунды, по логам 10 лупов с паузой по 20 мс connected, 10 - disconnected.
При этом если рукой взяться за проводник который идёт к порту с которого считывается сигнал, скорость размыкания и замыкания ускоряется.
Стоит экспериментировать с резисторами? Они могут тут помочь ?

#4 Re: Програмування Arduino » Передача значений из порта в порт в пределах одной Arduino - реально? » 2019-10-29 11:36:29

Kaka пише:
valerakopay пише:

в теории можно конечно будет выход с выходом или вход в входом закоротить

Через килоомный резистор. А то случайно включишь оба на OUTPUT, в один сунешь HIGH, а в другой LOW - придётся комнату проветривать.

поставить на каждый OUTPUT 1кОм резистор что бы не было проблем?

#5 Re: Програмування Arduino » Как через аналоговый пин сортировань значения » 2019-10-22 14:46:40

если прям сразу после запуска и прям только один раз и прям только 5 секунд, то

int max = 0;
void setup() {
  pinMode(A0, INPUT);
  Serial.begin(115200);

  for (int i= 1; i <= 5; i++) {
    int val = analogRead(A0);
    if (val >= max) {
      max = val;
    }
  }
  Serial.print("max=");
  Serial.println(max);
}
void loop() {
}

Пример работы:
пример

#6 Re: Програмування Arduino » Передача значений из порта в порт в пределах одной Arduino - реально? » 2019-10-22 11:45:40

Green пише:

Забыл. При проверке нужно и остальные входа проверять на отсутствие связи, иначе можно все скрутить в кучу.)

не понял что за проверка. физически это будут соединятся тюльпаны - папы с мамами. в теории можно конечно будет выход с выходом или вход в входом закоротить - это может быть проблемой?

#7 Re: Програмування Arduino » Передача значений из порта в порт в пределах одной Arduino - реально? » 2019-10-22 11:43:36

MikeM пише:

Подаёшь активный уровень (цифровой) на whitePinWrite и проверяешь состояние whitePinRead, затем снимаешь активный уровень.

Вроде получилось, спасибо. Не привык еще к этой специфике вечного лупа и быстрой работы ардуины - вариант самый простой получается конечно.

void setup() {
  Serial.begin(115200);
  for (int r = 2; r <= 6; r++ ) {
    pinMode(r, INPUT);
    int w = r + 5;
    pinMode(w, OUTPUT);
  }
}

void loop() {
  for (int r = 2; r <= 6; r++ ) {
    int w = r + 5;
    digitalWrite(w, HIGH);
    Serial.print(r);
    if (digitalRead(r) == HIGH) {
      Serial.println("=connected");
    } else {
      Serial.println("=disconnected");
    }
    digitalWrite(w, LOW);
  }
  delay(20);
}

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

предложенный второй более сложный вариант с фильтром тоже попробую чуть позже, может пригодится рано или поздно.

#8 Re: Програмування Arduino » Передача значений из порта в порт в пределах одной Arduino - реально? » 2019-10-21 22:07:54

Kaka пише:

Зачем ты пытаешься читать ШИМ как аналоговое значение? .

писал же что не разбираюсь, пробовал по разному, просто это последний вариант

Kaka пише:

Хочешь читать как аналоговое, сначала сделай его аналоговым - проинтегрируй.

можно подробней или пример? по наводке нашел только как интегрировать полученный сигнал а не как наоборот делать.

#9 Re: Програмування Arduino » Передача значений из порта в порт в пределах одной Arduino - реально? » 2019-10-21 21:52:03

MikeM пише:

Зачем усложнять жизнь ШИМом и "аналоговыми" значениями?
Подаёшь активный уровень (цифровой) на whitePinWrite и проверяешь состояние whitePinRead.
"И так восемь раз" (прямо как в анекдоте)

так тогда можно любой порт откуда идет выход соеденить с любым портом который читается и никак не различить правильный цвет был соединен или нет?

#10 Програмування Arduino » Передача значений из порта в порт в пределах одной Arduino - реально? » 2019-10-21 13:43:29

valerakopay
відповідей: 21

Цель - сделать игрушку для маленького рёбенка - соединяя провода разных цветов - при правильном соеденении одного цвета - зажигать светодиод соотвествующего цвета.

Не силен в ардуино, но поидее если у нас есть pwm порты которые могут отсылать значения используя шим от 0 до 255 и есть аналоговые порты которые могут считывать аналоговые значения - в теории всё реально?
Код для UNO(хотя пробовал и мегу):

int whitePinWrite = 5;
int bluePinWrite = 6;
int redPinWrite = 9;
int yellowPinWrite = 10;
int greenPinWrite = 11;

int whitePinRead = A0;
int bluePinRead = A1;
int redPinRead = A2;
int yellowPinRead = A3;
int greenPinRead = A4;

  int whiteCode = 10;
  int blueCode = 20;
  int redCode = 30;
  int yellowCode = 40;
  int greenCode = 50;

  int white = 10;
  int blue = 20;
  int red = 30;
  int yellow = 40;
  int green = 50;
    
void setup() {
 pinMode(whitePinWrite, OUTPUT);
 pinMode(bluePinWrite, OUTPUT);
 pinMode(redPinWrite, OUTPUT);
 pinMode(yellowPinWrite, OUTPUT);
 pinMode(greenPinWrite, OUTPUT);
 
 pinMode(whitePinRead, INPUT);
 pinMode(bluePinRead, INPUT);
 pinMode(redPinRead, INPUT);
 pinMode(yellowPinRead, INPUT);
 pinMode(greenPinRead, INPUT);
 Serial.begin(115200); 
 
}

void loop() {

  analogWrite(whitePinWrite,whiteCode);
  analogWrite(bluePinWrite,blueCode);
  analogWrite(redPinWrite,redCode);
  analogWrite(yellowPinWrite,yellowCode);
  analogWrite(greenPinWrite,greenCode);

white = analogRead(whitePinRead);
blue = analogRead(bluePinRead);
red = analogRead(redPinRead);
yellow = analogRead(yellowPinRead);
green = analogRead(greenPinRead);
 
 Serial.print("white=\t");
 Serial.println(analogRead(whitePinRead));
 
if(white == whiteCode){
  Serial.println("White connected");
}

 Serial.print("blue=\t");
 Serial.println(blue);
 
if(blue == blueCode){
  Serial.println("blue connected");
}
 Serial.print("red=\t");
 Serial.println(red);
if(red  == redCode){
  Serial.println("red connected");
}
 Serial.print("yellow=\t");
 Serial.println(yellow);
if(yellow == yellowCode){
  Serial.println("yellow connected");
}
 Serial.print("green=\t");
 Serial.println(green);
if(green == greenCode){
  Serial.println("green connected");
}
Serial.println("___");
delay(500);
}

В итоге если не соединять кабельки - ловит рандомный шум, при соеденении, если передаваемое значение будет меньше 200 - то почти всегда будет показывать 0, больше 200 - почти всегда 1023, но не без рандома так же:
___
white=    0
blue=    0
red=    0
yellow=    0
green=    0
___
white=    0
blue=    0
red=    0
yellow=    748
green=    1023
___
white=    0
blue=    1023
red=    0
yellow=    0
green=    1022
___

Я что то делаю явно не так, а что не ясно, пробовал уже всё что только можно.
Или данную задачу можно решить только подавая HIGH и на каждый провод по резистору цеплять разного номинала?
Заранее спасибо тем, кто откликнулся!

Підвал форуму