ОБНОВЛЕНИЕ: ошибка в коде обработки - не получает правильные данные от 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();
}
}
@user62091, 👍0
Обсуждение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
- Как получить ненулевой выход из HX711 и ячейки загрузки?
- Отправка информации (например, строки) через цифровые контакты
- Как остановить серводвигатель в текущем положении при использовании последовательного порта? Я хочу, чтобы он оставался в одном положении при получении «0».
- Метод перебора битов в байте, отправленном по последовательному каналу.
- Arduino Uno по-прежнему загружается и работает, но нет последовательной связи через USB
- Отправка строки с Arduino на ESP8266 работает на UNO, но не на Pro Mini
- Повреждение данных SoftwareSerial - поиск предложений
- Настройка количества цифр для последовательной печати выходного значения датчика
Убедитесь, что вывод, который вы показываете, принадлежит коду, который вы показываете. Я сомневаюсь, что у вас есть
Serial.println(lightval);
в той версии, вывод которой мы видим., @Edgar BonetИзвините, да, я закомментировал Serial.println(lightval), когда запускал скрипт, и буквы все еще там, @user62091
Затем отредактируйте вопрос, чтобы закомментировать эту строку. Рискуя повториться, пожалуйста, **убедитесь, что вывод, который вы показываете, принадлежит коду, который вы показываете**., @Edgar Bonet