Сигнал отправляется при изменении выхода - PullRequest
0 голосов
/ 29 июня 2019

В последнее время я пытаюсь написать код, поток которого является сигналом, который посылается, в то время как выход «1» сразу меняется на «0».

Кроме того, этот код соединяется с простым нажатиемПереключатель кнопки, так что когда я нажимаю кнопку, вся функция будет отправлять «1».К счастью, я преуспел!

AS = serial.Serial('COM8',9600)
url = 'https://xxx.firebaseio.com/'
AoS = 40
FB = firebase.FirebaseApplication(url, None)

result = FB.patch('/ParkingSeat/',{'Amount of the seats': str(AoS) + '/40'})
while (1==1):
    if(AS.inWaiting()>0):
        msg = AS.readline().strip().decode()
        if (msg == '1') and (AoS>0):
            AoS-=1
            print ("The Signal now is " + str(AoS))
            result = FB.patch('/ParkingSeat/',{'Amount of the seats': str(AoS) + '/40'})
        if (msg == '2') and (AoS<40):
            AoS+=1
            print ("The Signal now is " + str(AoS))
            result = FB.patch('/ParkingSeat/',{'Amount of the seats': str(AoS) + '/40'})
        print(msg)

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

Следовательно, решение, которое я нашел, заключается в том, что сигнал будет отправлен после того, как пользователь или яотпустите кнопку.Даже если пользователь или я случайно нажмем кнопку слишком долго и будет отправлено более одного сигнала, это будет считаться только один раз!

AS = serial.Serial('COM8',9600)
url = 'https://xxx.firebaseio.com/'
AoS = 40
FB = firebase.FirebaseApplication(url, None)

result = FB.patch('/ParkingSeat/',{'Amount of the seats': str(AoS) + '/40'})
while (1==1):
    if(AS.inWaiting()>0):
        msg = AS.readline().strip().decode()
        if (msg == '1'):
            print ("Waiting for release")
            print (msg)
            if (AoS>0) and (msg == '0'):
                AoS-=1
                print ("The Signal now is " + str(AoS))
                result = FB.patch('/ParkingSeat/',{'Amount of the seats': str(AoS) + '/40'})
        if (msg == '2'):
            print ("Waiting for release")
            print (msg)
            if (AoS<40) and (msg == '0'):
                AoS+=1
                print ("The Signal now is " + str(AoS))
                result = FB.patch('/ParkingSeat/',{'Amount of the seats': str(AoS) + '/40'})
        print(msg)

Однако я не могу найти лучший алгоритм для решения этого потока.Алгоритм продолжает придерживаться части «Ожидание выпуска».

Это поток до того, как я изменил

0 0 0 0 0 1 1 1 0 0 0

Так что сигнал будет отправлен 3 раза

Но поток, который я хочу

0 0 0 0 0 1 1 1 0 0 0

Затем при обнаружении 0 после 1 сигнал будет отправлен только 1 раз.

Приведенный ниже код является кодом для Arduino.Это может не повлиять на результат, но я думаю, что это поможет вам понять это.

const int BUTTON1 = 6;
const int BUTTON2 = 7;
String i, j, x;

int ButtonState = 0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(BUTTON1, INPUT_PULLUP);
  pinMode(BUTTON2, INPUT_PULLUP);
}

void loop() {
  if (digitalRead(BUTTON1) == LOW) {
    delay(500);
    i = "1";
    Serial.println(i);
  } 
  else if (digitalRead(BUTTON2) == LOW) {
    delay(500);
    j = "2";
    Serial.println(j);
  } 
  else {
    delay(500);
    x = "0";
    Serial.println(x);
  }
}

Все, что я хочу сделать, - это система онлайн-парковки.Доска Arduino получит сообщение и отправит сообщение на python.Python получает сообщение и обнаруживает его для отправки сигнала в базу данных реального времени firebase.

Наконец, спасибо за попытку помочь мне!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...