Ви не увійшли.
Сторінки 1
valerakopay пише:MikeM пише:INPUT заменить на INPUT_PULLUP
спасибо за совет, попробовал - теперь даже при разомкнутых проводниках при чтении порта всегда HIGH.
так и должно быть. Инвертируйте в скетче сигналы
вы имеете ввиду записывать в порт LOW а не HIGH? и если при чтении будет LOW значит порты замкнуты друг на друга?
INPUT заменить на INPUT_PULLUP
спасибо за совет, попробовал - теперь даже при разомкнутых проводниках при чтении порта всегда HIGH.
Настало время установки по указанному коду выше когда порты замкнуты (без резистора) - все отлично, реле замыкается и не размыкается пока не разомкнуть проводники что замыкают порты.
Но вот в разомкнутом состоянии реле то замыкается то размыкается на глаз как раз в пол секунды, по логам 10 лупов с паузой по 20 мс connected, 10 - disconnected.
При этом если рукой взяться за проводник который идёт к порту с которого считывается сигнал, скорость размыкания и замыкания ускоряется.
Стоит экспериментировать с резисторами? Они могут тут помочь ?
valerakopay пише:в теории можно конечно будет выход с выходом или вход в входом закоротить
Через килоомный резистор. А то случайно включишь оба на OUTPUT, в один сунешь HIGH, а в другой LOW - придётся комнату проветривать.
поставить на каждый OUTPUT 1кОм резистор что бы не было проблем?
если прям сразу после запуска и прям только один раз и прям только 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() {
}
Пример работы:
Забыл. При проверке нужно и остальные входа проверять на отсутствие связи, иначе можно все скрутить в кучу.)
не понял что за проверка. физически это будут соединятся тюльпаны - папы с мамами. в теории можно конечно будет выход с выходом или вход в входом закоротить - это может быть проблемой?
Подаёшь активный уровень (цифровой) на 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);
}
правда подключил реле и просто дергая но не замыкая провода иногда срабатывает почему то как будто нужный порт получил вовремя сигнал. может пауз добавить нужно и поможет конечно. буду пробовать.
предложенный второй более сложный вариант с фильтром тоже попробую чуть позже, может пригодится рано или поздно.
Зачем ты пытаешься читать ШИМ как аналоговое значение? .
писал же что не разбираюсь, пробовал по разному, просто это последний вариант
Хочешь читать как аналоговое, сначала сделай его аналоговым - проинтегрируй.
можно подробней или пример? по наводке нашел только как интегрировать полученный сигнал а не как наоборот делать.
Зачем усложнять жизнь ШИМом и "аналоговыми" значениями?
Подаёшь активный уровень (цифровой) на whitePinWrite и проверяешь состояние whitePinRead.
"И так восемь раз" (прямо как в анекдоте)
так тогда можно любой порт откуда идет выход соеденить с любым портом который читается и никак не различить правильный цвет был соединен или нет?
Цель - сделать игрушку для маленького рёбенка - соединяя провода разных цветов - при правильном соеденении одного цвета - зажигать светодиод соотвествующего цвета.
Не силен в ардуино, но поидее если у нас есть 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 и на каждый провод по резистору цеплять разного номинала?
Заранее спасибо тем, кто откликнулся!
Сторінки 1