TeensyPhonon
Active member
I am trying to transfert float data between a PC (python) and a teensy 4.1, but my attempt with serial is a little bit... ugly.
python code :
teensy code :
Unfortunately, the data didn't survive the trip...
Before :
After :
python code :
Python:
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import serial
import time
import scipy.signal as signal
Fs = 44100
arduinos = [serial.Serial(port='COM17', baudrate=115200, timeout=1)]
arduinos[0].write(bytes("ready",'utf-8'))
time.sleep(0.05)
nc = int(arduinos[0].readline().decode("utf-8")[:-2])
#signal
t = np.linspace(0,nc/Fs,nc)
f0 = 200
f1 = 2000
chirp = signal.chirp(t,f0,t[-1],f1).astype(np.float32)
time.sleep(0.05)
arduinos[0].write(bytes("chirp",'utf-8'))
arduinos[0].write(bytes(chirp))
x = arduinos[0].read(nc*4) # nc 32 bits floats = 4*nc bytes
for i in range(nc):
try:
y[i] = struct.unpack('>f', x[4*i:4*(i+1)])[0]
except: pass
teensy code :
C:
#include <arm_const_structs.h>
bool bool_record = true;
const uint32_t nc = 12800;
#define BUFFSIZE 4*nc
uint8_t buffer[BUFFSIZE] DMAMEM;
void setup() {
pinMode(0,INPUT_PULLDOWN);
pinMode(LED_BUILTIN,OUTPUT);
while(bool_record){
Serial.begin(115200);
while(!Serial);
while(Serial.readString()!="ready"){}
Serial.println(nc);
digitalWrite(LED_BUILTIN,HIGH);
while(bool_record){
if(Serial.readString()=="chirp"){
Serial.readBytes((char *)&buffer, 4*nc);
Serial.write((unsigned char *)&buffer[0], 4*nc);
digitalWrite(LED_BUILTIN,LOW);
}
}
}
}
void loop() {
if(digitalRead(0) == HIGH){SCB_AIRCR = 0x05FA0004;} //reset
}
Unfortunately, the data didn't survive the trip...
Before :
After :