Моя система посещаемости RFID arduino не будет правильно отображать нарисованные круги (отмечены / выписаны) при обработке - PullRequest
0 голосов
/ 25 марта 2019

Я студент, живущий в студенческом доме вместе с 15 другими. Я пытаюсь сделать систему посещаемости, которая будет отображать на экране, кто дома, а кто нет. Я подумал, что это отличный план - дать каждому ярлык RFID, поэтому, когда они вернутся домой или уйдут, они могут зарегистрироваться и проверить. Это будет показано на экране с зелеными или красными кружками (с использованием обработки).

Я использовал часть кода из https://www.youtube.com/channel/UC6LO26f_9qwysjvSHdVmfrQ и https://github.com/InfinityWorldHI/RFID_Excel для кода Arduino.

Я запрограммировал обработку только для первых двух соседей. Однако при регистрации заезда или отъезда оба круга меняют цвет. Мне бы хотелось иметь 2 ряда по 8 кругов, которые могут изменить цвет с красного на зеленый, и наоборот, чтобы увидеть, дома ли кто-то.

Моя программа arduino выводит номер комнаты "," 1 или 0 (как зарегистрировано или выписано), например, = 11,1.

Программа обработки нарисует зеленый или красный круг в зависимости от регистрации или отъезда.

Вот мой код обработки:

Код Arduino (где он выводится на последовательный порт):


      if(NumbCard[j] == 1 && statu[s] == 0 && Number == 11) {
        statu[s]=1;
        NumbCard[j]=0;
        Serial.print(Number);
        Serial.print(",");
        Serial.println(1);
        //Serial.println("is uitgecheckt");
        //write led uit
      }
      else if(NumbCard[j] == 1 && statu[s] == 0 && Number == 22) {
        statu[s]=1;
        NumbCard[j]=0;
        Serial.print(Number);
        Serial.print(",");
        Serial.println(1);
        //Serial.println("is uitgecheckt");
        //write led uit
      }

Обработка кода для создания кругов:

import processing.serial.*;

// ControlP5 Example 1 : Basic UI elements

import controlP5.*; // import controlP5 library
ControlP5 controlP5; // controlP5 object

Serial myPort;  // Create object from Serial class
int val;     // Data received from the serial port
int end = 10;    // Linefeed in ASCII
String myString = null;
int i =0;

PShape led_on, led_off;

String persoon_status;

color [] colors = new color[2]; 


void setup() {
  colors[0] = color(0,255,0);
  colors[1] = color(255,0,0);
   //change the 0 to a 1 or 2 etc. to match your port
  myPort = new Serial (this, Serial.list()[0], 9600);
  //led_on = createShape(RECT,10,70,40,40,40);


 size(800,800);
}

void draw() { 
  background(255);
  do{
    myString = myPort.readStringUntil(end);
    if (myString != null) {
      println(myString);
    }
  }
  while (myPort.available() > 0); {

     if(myString != null && myString.trim().equals("11,1") == true) {
    fill(colors[1]);
    } else {
      if (myString != null && myString.trim().equals("11,0") == true)
      fill(colors[0]);
      else{
        rect(10,70,40,40,40);
      }
    }

   if(myString != null && myString.trim().equals("22,1") == true){
    fill(colors[1]);
   } else {
     if(myString != null && myString.trim().equals("22,0") == true)
     fill(colors[0]);
  else {
    rect(10,130,40,40,40);
    }
}
  }
}

Я думаю, что я близок к тому, чтобы дойти до конца, однако я не мог понять эту проблему.

Может ли кто-нибудь указать мне правильное направление?

Пожалуйста, не стесняйтесь спрашивать меня о дополнительной информации.

Ваша помощь будет очень признательна!

1 Ответ

0 голосов
/ 26 марта 2019

Когда вы устанавливаете цвет fill(), все фигуры, нарисованные из этой точки, будут иметь один и тот же цвет, пока вы не установите fill() с новым цветом.В вашем коде вы меняете цвет только при считывании RFID, в противном случае вы просто рисуете фигуру, что означает, что у них у всех последний заданный цвет.
Вместо этого вы должны использовать массив для хранения статуса для каждого соседа по комнате.Затем вы можете перебрать этот массив и установить заливку на соответствующий цвет перед рисованием прямоугольника.

Этот фрагмент кода показывает, как вы могли бы реализовать это.

boolean[] isPresent = { false, false};

void draw() {
  // put the code that handles the RFID processing in
  // a separate function that you call in draw
  readRFID();

  background(255);
  //loop through the array
  for (int i = 0; i < isPresent.length; i++) {     
    //check status and set fill color
    if (isPresent[i]) {
      fill(colors[0]);
    } else {
      fill(colors[1]);
    }
    //draw rectangle with x-pos based on array index
    rect(10+i*50, 10, 40, 40);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...