Я в процессе отправки массива в Arduino Nano через pySerial, который после получения Nano отправляет напрямую на чип SRAM с использованием SPI.Однако при выполнении кода, связанного с SPI (например, установка режима передачи для отправки отдельных байтов), передача данных из Python блокируется.
Я знаю, что проблема заключается не в использовании обоих одновременно, поскольку они используютразные выводы, поэтому я думаю, что есть проблема с определениями функций.Я чувствую себя обязанным сказать, что мой опыт в Python и Arduino минимален.Приносим свои извинения за длинный код и любую помощь с этим !!
# Python code
import serial
import time #To use delay functions
ArduinoNano = serial.Serial('com6',9600) #Create Serial port object called ArduinoNano
x = ArduinoNano.readline() #Read the serial data and print it
print(x)
gImage_1 = bytes([
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XC0,
0X00,0X00,0X00,0X00,0X00,0X00]);
t = 0
for t in gImage_1:
ArduinoNano.write(bytes([t]))
y = ArduinoNano.readline()
print(y)
----------
# Arduino Code
#include <SPI.h>
#define WRSR 1 // Write to the Status Register
#define WRITE 2 // Write command
#define ByteMode 0x00 // Byte mode (read/write one byte at a time)
#define SS1 10 // Slave Select Line for Nano
uint16_t address = 0; // create a 16 bit variable to hold the address
byte incomingData = 0; // data from pySerial
int dataCount = 0;
void SetMode(char Mode);
void WriteByte(uint16_t address, byte data_byte);
void setup()
{
pinMode(SS1, OUTPUT);
Serial.begin(9600);
SPI.begin;
Serial.println("Hello! Waiting... ");
SetMode(ByteMode);
}
void loop()
{
while(Serial.available() > 0)
{
address = dataCount;
incomingData = Serial.read();
WriteByte(address, incomingData);
Serial.println(incomingData);
dataCount += 1;
}
}
void SetMode(char Mode) // Select for single or multiple byte transfer
{
digitalWrite(SS1, LOW); // set SPI slave select LOW;
SPI.transfer(WRSR); // command to write to status register
SPI.transfer(Mode); // set for byte mode
digitalWrite(SS1, HIGH); // release chip select to finish command
}
void WriteByte(uint16_t address, byte data_byte)
{
digitalWrite(SS1, LOW); // set SPI slave select LOW;
SPI.transfer(WRITE); // send WRITE command to the memory chip
SPI.transfer((byte)(address >> 8)); // send first byte of address
SPI.transfer((byte)address); // send last byte of address
SPI.transfer(data_byte); // write the data to the memory location
digitalWrite(SS1, HIGH); // set SPI slave select HIGH
}