Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

skryga
2018-01-03 19:59:29

Всем спасибо, в Proteus всё заработало как надо...
Финальный код:

const int relayPin = 0;
const int onPin = 1;
const int offPin = 2;
int relayState = 0;
int lastRelayState = 0;

void setup() {
  pinMode(relayPin, INPUT);
  pinMode(onPin, OUTPUT);
  pinMode(offPin, OUTPUT);
}

void loop() {
  relayState = digitalRead(relayPin);
  if (relayState != lastRelayState) {
    if (relayState == HIGH) {
      digitalWrite(onPin, HIGH);
      delay (1500);
      digitalWrite(onPin, LOW);
    } else {
      digitalWrite(offPin, HIGH);
      delay (1500);
      digitalWrite(offPin, LOW);
    }
  }
  lastRelayState = relayState ;
}

Спасибо, что навели на мысль...

MikeM
2018-01-03 17:31:53

Идея понята правильно, а на мелкие косяки укажет компилятор.
Удачи!

skryga
2018-01-03 07:18:32

Сигнал будет постоянньім - или есть или нет... Програмка должна следить за состояние сигнала на входному пине, и менять состояние вьіходньіх пинов (иипульсом) в зависимости от входа.

vvr
2018-01-02 23:52:37

А сколько будет подаваться с реле сигнал ?

skryga
2018-01-02 23:47:49

Так должно работать, доберусь до proteus'a, проверю:

const int relayPin = 1;
const int onPin = 2;
const int offPin = 3;
int  = 0;
int lastRelayState = 0;

void setup() {
    pinMode(relayPin, INPUT);
    pinMode(onPin, OUTPUT);
    pinMode(offPin, OUTPUT);
    }
   
    void loop() {
    relayState = digitalRead(relayPin);
  if (relayState != lastRelayState){
    if (relayState == HIGH) {
    digitalWrite(onPin, HIGH);
     delay (1500);
     digitalWrite(onPin, LOW);
    } else {
    digitalWrite(offPin, HIGH);
     delay (1500);
    digitalWrite(offPin, LOW); } }
  lastRelayState = relayState   
    }

MikeM
2018-01-02 22:22:51

Следует добавить ещё одну переменную, в которой запоминать текущее состояние relayPin.
Импульс формировать только тогда, когда значение relayPin изменилось.

skryga
2018-01-02 21:03:06

Привет, пишу тут маленькую програмку для arduino digispark. Суть такая: при подаче на PB0 постоянного напряжения 5В (5В подаеться через контакты реле), на выходе PB1 должен появиться импульс 5В длительностю 1,5 сек (через транзисторный ключ и реле управляю актуатором от центрального замка - замок должен закрытьса ); при переключении PB0 на низкий уровень (размыкании реле и подтяжка к земле через 10к) на на выходе PB2 должен появиться импульс 5В длительностю 1,5 сек. (через транзисторный ключ и реле - замок должен открытьса).
Схемка в Proteus и код в архиве...
sketch_blink.rar

const int relayPin = 1;
const int onPin = 2;
const int offPin = 3;
int relayState = 0;

void setup() {
  // put your setup code here, to run once:
pinMode(relayPin, INPUT);
pinMode(onPin, OUTPUT);
pinMode(offPin, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
relayState = digitalRead (relayPin);
  if (relayState == HIGH) {
 digitalWrite(onPin, HIGH);
 delay (1500);
 digitalWrite(onPin, LOW);
} else {
  digitalWrite(offPin, HIGH);
  delay (1500);
  digitalWrite(offPin, LOW);
}
}

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