Прямоугольная волна с последовательным плоттером
У меня есть этот код, который создает прямоугольную волну:
int output_state = 0;
unsigned long start;
void setup() {
Serial.begin(1200);
start = millis();
}
void loop() {
if((millis() - start) >=1000){
output_state = ! output_state;
//output_state *= 1023;
start = millis();
}
Serial.println(output_state);
}
но должен ли я умножить сигнал на 1023:
output_state *= 1023;
этот сигнал генерируется последовательным плоттером:
Имейте в виду, что время выбрано правильно, просто ось x ускоряется до нулевых значений. Почему это происходит и как это можно решить?
Любые мысли будут оценены по достоинству.
@user3060854, 👍2
1 ответ
Лучший ответ:
Для печати "1023" требуется вдвое больше времени (6 байт, включая терминатор строки CRLF), чем для печати "0" (3 байта). Таким образом, в то же время вы печатаете вдвое больше "0", чем "1023".
Если вы хотите, чтобы точки данных печатались с постоянной скоростью,
вы можете задать время печати точно так же, как вы это сделали для
output_state
. Имейте в виду, что вы не можете печатать более 20 образцов
в секунду со скоростью 1200 бит / с. Вы также можете подкладывать строки так, чтобы они
всегда были одинаковой длины:
char s[5]; // один байт для нулевого терминатора
sprintf(s, "%4d", output_state);
Serial.println(s);
Я бы предпочел первое решение (явно контролируйте время).
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- В чем разница между Serial.write и Serial.print? И когда они используются?
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Программы построения последовательных данных
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Очистить существующий массив при получении новой последовательной команды