Comunicacion Python-Arduino Due

Buenas tardes a todos! Estoy queriendo armar un codigo para poder enviar y recibir datos entre una Raspberry con python y un Arduino Due utilizando comunicacion SERIAL.

La idea es que el Arduino pueda tanto enviar como recibir datos dependiendo la orden que le emita la Raspberry (Yo lo llamo flags).

Entonces La raspberry le envia una Flag, el arduino lo procesa y ejecuta algun codigo.

Hasta ahi todo bien, el problema me surge cuando quiero pasarle un array al arduino.

Necesito enviarle 14 valores de LONG. Para esto le señalo la operacion a realizar con la flag adecuada (En este caso, flag = '8').

Luego de recibir esa flag, el arduino entra a un ciclo for donde itera 14 veces, igual a la longitud de elementos a recibir. Dentro de cada ciclo, le puse un while para que espere a que halla un dato disponible y, si recibe un dato, entonces que lo pase nuevamente por el serial para poder ver que es lo que recibe el arduino desde la consola de python.

Mi codigo de python es el siguiente:

import serial
arduino = serial.Serial(port='COM3', baudrate=115200, timeout=0.1, write_timeout=0.1)
def send_data(flag,data=None):
    
    
    
    arduino.reset_input_buffer()
    arduino.write(str(flag).encode('ascii'))
    init_t=time.time()*1000
    while(arduino.inWaiting()<1 and init_t+20>time.time()*1000):
        a=1
    if not init_t+200>time.time()*1000:
        raise ConnectionError('Arduino no responde a la FLAG')
    recived=arduino.read(5).decode('ascii')
    print("Flag: ",recived)
   
    if flag in recived:
        
        if data:
            
            for value in data:
                arduino.write(str(value).encode('ascii'))
                
                init_t=time.time()*1000
                while(arduino.inWaiting()<1 and init_t+1000>time.time()*1000):
                    a=1
                
                recived=arduino.read(10).decode('ascii')
                arduino.reset_input_buffer()
                print("recibimos: ",recived)
                
    arduino.reset_input_buffer()
    arduino.reset_output_buffer()


send_data('8',[17123123,17123123,17123123,17123123,17123123,17123123,17123123,17123123,17123123,17123123,17123123,17123123,17123123,17123123])

El de Arduino:



void clearSerialBuffer() {      
   
   if (Serial.available()){
      String value = "";
      while(Serial.available()){
     char data= Serial.read();
     value=value+data;
     }
     }
     }

     
void catchLISTValue(){               
  for(int i=0; i<14;i++){
    while (Serial.available()<=0){}
    Serial.print(Serial.read()-48);
    
    }}
 
void setup() {
  Serial.begin(115200);
 
}
void loop() {
  if (Serial.available() > 0){
    
   
    ord = Serial.read()-48;

      
    if(ord==8){           
      clearSerialBuffer();
      Serial.print("8");  
      catchLISTValue();
      
      }                                                               

  
  

Cuando ejecuto mi codigo en python, recibo la siguiente salida:

Puerto Usado:  COM3
Flag:  8
recibimos:  
recibimos:  7
recibimos:  7
recibimos:  7
recibimos:  7
recibimos:  7
recibimos:  7
recibimos:  7
recibimos:  7
recibimos:  7
recibimos:  7
recibimos:  7
recibimos:  7
recibimos:  7

Como se aprecia, el arduino responde con la misma flag, indicando que entro al ciclo que se desea. Pero los valores no son correctos. Si intento enviar otros valores, a veces no me responde nada las primeras 5/6 iteracciones. Si saben que puedo estar haciendo mal, se los agradeceria!!

please use English in the general forum

por favor usa inglés en el foro general

➜ movido al foro español

Te resolví el enigma.
EL código en Python esta bien.
El código en arduino no.
Este código responde a lo que le envias.

#include <Arduino.h>

char ord;

void setup() {
  Serial.begin(115200);
}

void loop() {
  if (Serial.available() > 0){
      ord = Serial.read();
      if (ord-48 == 8){           
          Serial.print("8");   
      } 
      else {
        Serial.print(ord);   
      }
  }
}

Resultado

.exe "c:/Users/surby/Documents/Platformio/Python Projects/pySerial.py"
Flag:  8
recibimos:  17123123
recibimos:  17123123
recibimos:  17123123
recibimos:  17123123
recibimos:  17123123
recibimos:  17123123
recibimos:  17123123
recibimos:  17123123
recibimos:  17123123
recibimos:  17123123
recibimos:  17123123
recibimos:  17123123
recibimos:  17123123
recibimos:  17123123
PS C:\Users\surby\Documents\Platformio> 

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.