Я пытаюсь получить данные от моего Arduino Serial.println("No Format");
. Когда я открываю arduino-serial-monitor, я могу видеть результат, как я этого хотел.Haskell: Последовательные принятые данные неверно напечатаны
No Format
No Format
...
Я использую serialport package. Но выход напечатанный на GHCI является:
*Main> main
"\r\nNo Forma"
"t\r\nNo Form"
"at\r\nNo For"
"mat\r\nNo Fo"
"rmat\r\nNo F"
"ormat\r\nNo "
"Format\r\nNo"
" Format\r\nN"
"o Format\r\n"
...
...
"\nNo"
" For"
"mat\r"
"\nNo "
"Form"
"at\r\n"
....
Haskell:
import qualified Data.ByteString.Char8 as B
import System.Hardware.Serialport
import System.IO
import Control.Monad
main :: IO()
main = forever $ do
let port = "/dev/ttyACM0"
s <- openSerial port SerialPortSettings { commSpeed = CS9600,
bitsPerWord = 8,
stopb = One,
parity = NoParity,
flowControl = NoFlowControl,
timeout = 10 }
recv s 10 >>= print
closeSerial s
Arduino:
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("No Format");
}
Любая помощь будет удивительным. Благодарю.
Попробуйте использовать 'putStr' вместо' print'. Вам также может потребоваться сбросить стандартный вывод или изменить режим буферизации на 'LineBuffering' – pat
Также вы открываете и закрываете последовательный порт для каждых 10 символов. Это действительно то, что вы хотите сделать? – pat
@pat: Ваш второй комментарий правильный. «\ r \ nNo Forma» действительно является байтовой строкой длины 10. Возможно, байтовая строка должна быть проанализирована в строку (возможно, даже с использованием страшного Data.ByteString.Char8, в зависимости от потребности) – Sarah