ОБНОВЛЕНИЕ: ошибка в коде обработки - не получает правильные данные от Arduino

Я получаю данные от LDR, которые ввожу в обработку. Кажется, что данные поступают в Arduino правильно, и я просмотрел данные, отправляемые через последовательный монитор, и все кажется правильным. Однако данные, полученные при обработке, не отражают данные, полученные LDR, поэтому я думаю, что сделал что-то не так, но не уверен, что именно, поскольку я новичок во всем этом. (Пожалуйста, посмотрите на изображение, что печатается в последовательном мониторе обработки).

Любая помощь в определении моей ошибки будет очень полезной!

КОД ARDUINO

int rval=0;
int lightval;

//Записанные минимальные и максимальные значения
int minval=0;
int maxval=950;

void setup() 
{
  Serial.begin(9600); 
}

void loop() 
{
  rval = analogRead(1);
  //Serial.println(rval);
  rval=constrain(rval,minval,maxval); 
  lightval=map(rval,minval,maxval,0,255); 
  //Serial.println(lightval);
  Serial.write(lightval);
}

КОД ОБРАБОТКИ

import processing.serial.*;

Splash paintsplash;
Serial port;

float value=0;

void setup()
{
  size(600,600);
  smooth();
  background(255);
  paintsplash= new Splash();
  port=new Serial(this, Serial.list()[6],9600);
  //printArray(Serial.list());
}

void draw()
{
  paintsplash.display();
  paintsplash.splash();
  delay(200);

  if(0<port.available())
  {
    value=port.read();
  }

  println(value);

  if(value<=75)
  {
    fill(255,137,132);
  }

  else if(value>75 && value<=125)
  {
    fill(32,78,95);
  }

  else
  {
    fill(183,215,216);
  }
}

КЛАСС ОБРАБОТКИ — PAINT_SPLASH

class Splash
{ 
  float x;
  float y;
  float size;

  Splash()
  {
    x=0;
    y=0;
    size=int(random(35));
  }

  void display()
  { 
    //fill(255,137,132);
    noStroke(); 
    ellipse(x,y,size,size); 
  } 

  void splash()
  { 
  float xcord=int(random(600));
  float ycord=int(random(600)); 
  pushMatrix();
  translate(xcord,ycord);

     for ( float i =3; i < 29; i ++)
     {
       float splashX = x + random(100); 
       float splashY = y + random(100);

       ellipse(splashX,splashY,size-i,(size-i+random(3)));
     }

   popMatrix();
  } 
}

, 👍0

Обсуждение

Убедитесь, что вывод, который вы показываете, принадлежит коду, который вы показываете. Я сомневаюсь, что у вас есть Serial.println(lightval); в той версии, вывод которой мы видим., @Edgar Bonet

Извините, да, я закомментировал Serial.println(lightval), когда запускал скрипт, и буквы все еще там, @user62091

Затем отредактируйте вопрос, чтобы закомментировать эту строку. Рискуя повториться, пожалуйста, **убедитесь, что вывод, который вы показываете, принадлежит коду, который вы показываете**., @Edgar Bonet


1 ответ


1

Вы отправляете свой lightval дважды: один раз как текстовое представление числа и один раз как символ, представляющий младшие 8 бит:

Serial.println(lightval);
Serial.write(lightval);

Например:

Q308
R304
Q306

Если вы возьмете 308 и объедините его с 255, вы получите 52. 52, поскольку символ ASCII - это R.

Итак, вы печатаете 308, включая новую строку, а затем печатаете "R". Затем вы печатаете 304, что будет 48 после И с 255, что, конечно же, является Q.

,

Спасибо вам большое за это! Вы были правы, теперь я получаю правильные значения в последовательном мониторе Arduino! Теперь у меня проблемы с обработкой кода. Если вы можете одолжить еще немного вашего гения, я был бы очень благодарен!, @user62091