Как включить светодиод, но выключить его после запуска программы с использованием Arduino Uno Coding с IDE - PullRequest
0 голосов
/ 02 октября 2019

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

Датчик выключения (sD) включается (ledB) и выключается (ledG) при активации. Датчик вверх (sU) включается (ledG) и выключается (ledB) при активации.


Контекст: Датчик бесконтактного датчика определяет, когда поршневой насос достигнет конца хода, который сообщит Arduino о необходимости переключениясоленоидный клапан в другом направлении, реверсивное направление насоса. (светодиоды представляют соленоид для простоты тестирования)


Проблема: Когда тумблер переключен в закрытое положение и если насос находится в среднем положении хода, он не будет двигаться, пока не будет включен электромагнитный клапан, инасос достигает конца хода, который активирует датчик, запускающий процесс. Мне нужен один светодиодный / соленоидный клапан, чтобы загорелся и затем отключился, как только один из прокси-датчиков активировался.


Редактировать: Видео о том, что у меня есть и чего я пытаюсь достичь:https://drive.google.com/file/d/15bgbLU_OcVZIzw9IDD_5R_cjSMGxHwGZ/view?usp=sharing


Спасибо за любой вклад ...

Это поставило меня в тупик

-Sam

int sD = 4;
int ledB = 2;
int ledG = 3;
int sU = 5;
int mainSwitch = 7;
int ledBin = 8;
int ledGin = 9;

void setup() 
{
  // put your setup code here, to run once:
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  pinMode(7, INPUT_PULLUP);
  pinMode(8, INPUT);
  pinMode(9, INPUT);
}

void loop() 
{

  mainSwitch = digitalRead(7);

  if (mainSwitch == true) //Ends Program
  {
    sD = digitalRead(4);
    sU = digitalRead(5);

    digitalWrite(ledB, LOW);
    digitalWrite(ledG, LOW);
  }


  if (mainSwitch == false)//Starts program 
  {
    sD = digitalRead(4);
    sU = digitalRead(5);

    if (sD == false) digitalWrite(ledB, HIGH); //sD(proximity sensor) Turns on ledB turns off ledG when activated
    if (sD == false) digitalWrite(ledG, LOW); 

    if (sU == false) digitalWrite(ledG, HIGH); //sU(poximity sensor) Turns on ledG turns off ledB when activated
    if (sU == false) digitalWrite(ledB, LOW);
  }
}

Ответы [ 3 ]

0 голосов
/ 02 октября 2019

Я так понимаю, вам нужен либо один, либо другой светодиод (поршень), когда главный выключатель включен. Вы изменяете их в конечной точке и сохраняете их неизменными, когда конечная точка не достигнута.

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

И не путайте постоянные номера выводов и их переменные состояния :)

const byte ledB = 2;
const byte ledG = 3;

// other pin numbers, hardcoded usage in code 
// sU = 5; sD = 4;
// mainSwitch = 7;

bool dir = true; // Direction:  default = up 

void setup() 
{
  pinMode(ledG, OUTPUT);
  pinMode(ledB, OUTPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  pinMode(7, INPUT_PULLUP);
}

void loop() 
{
  bool mainSwitch = digitalRead(7);
  if (mainSwitch == true) // stops Program
  {
    digitalWrite(ledB, LOW);
    digitalWrite(ledG, LOW);
  }
  else  
  {  // normal mode, one of both LED on
    // Read end switches 
    bool sD = digitalRead(4);
    bool sU = digitalRead(5);
    delay(5); // debounce, if these are mechanical switches

    if (sD) dir = true;  // switch to Up
    if (sU) dir = false; // switch to Down
    // else don't change direction

    if (dir) { 
      digitalWrite(ledG, LOW);
      digitalWrite(ledB, HIGH);
    }
    else {
      digitalWrite(ledB, LOW);
      digitalWrite(ledG, HIGH);
    }
  }
}
0 голосов
/ 03 октября 2019

Я решил свой вопрос, спасибо за помощь. -Sam

int sD = 4;
int ledB = 2;
int ledG = 3;
int sU = 5;
int mainSwitch = 7;
int ledBin = 8;
int ledGin = 9;

void setup() 
{

 pinMode(2, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(4, INPUT);
 pinMode(5, INPUT);
 pinMode(7, INPUT_PULLUP);
 pinMode(8, INPUT);
 pinMode(9, INPUT);
}

void loop() 
{

 mainSwitch = digitalRead(7);

 if (mainSwitch == true) //Ends Program
  {
   sD = digitalRead(4);
   sU = digitalRead(5);

   digitalWrite(ledB, LOW);
   digitalWrite(ledG, LOW);
  }


 if (mainSwitch == false)//Starts program 
 {
  sU = digitalRead(5);
  sD = digitalRead(4);

  if (sU == HIGH) //Turns on ledG(down solenoid) at first start. sU(upper 
  sensor) in deactivated
  {
   ledGin = digitalRead(9);
   ledBin = digitalRead(8);

   if (ledBin == LOW)digitalWrite(ledG, HIGH);
  }

 else if (sU == LOW) //sU(upper sensor) is activated turning on ledB(down 
 solenoid) turning off ledG(up solenoid)
 {
  ledBin = digitalRead(8);
  ledGin = digitalRead(9);

  if (ledBin == LOW) digitalWrite(ledB, HIGH);//ledB(down solenoid) turn on
  if (ledGin == HIGH) digitalWrite(ledG, LOW);//ledG(up solenoid) turn off
 }

if (sD == LOW)//sD(Bottom sensor) is activated turning on ledB(down 
solenoid) turning off ledG(down solenoid)
 {
  ledBin = digitalRead(8);
  ledGin = digitalRead(9);

  if (ledBin == HIGH) digitalWrite(ledB, LOW);//ledB(down solenoid) turn off
  if (ledGin == LOW) digitalWrite(ledG, HIGH);//ledB(up solenoid) turn on
 }
}
}.
0 голосов
/ 02 октября 2019

Из того, что я могу понять

Когда вы используете digitalRead () на Arduino, он может возвращать либо «HIGH», либо «LOW»

 if (sD == false)
 if (sU == false)

Попробуйте изменить «false» на«НИЗКИЙ» и посмотрите, работает ли это для вас.

Не забудьте проверить здесь для получения более подробной информации.

...