Programmazione

di il
6 risposte

Programmazione

Buongiorno essendo un principiante nell'acquisizione delle nozioni su PYTHON versione 3.8 e C++, chiedo la cortesia di fornirmi, se possibile, un esempio concreto di come richiamare un programma c++ dall'interno di python. Ho sviluppato un programma ( No classe e no funzione ) in c++ che muove un braccio meccanico. In python ho realizzato una schermata che propone un bottom da cliccare e lo scopo è che se clicco deve essere richiamato questo programma e trasferirlo sulla scheda arduino uno. Ho provato a verificare con ctypes,swig e altro ma non riesco a capire come posso richiamarlo. Gli esempi visti tratattano solo funzioni o classi.L'editor che sto utilizzando è visual studio code. A tal proposito volevo anche sapere come rintracciare la libreria dove è stato compilato il mio programma arm.cpp. Cio' perchè l'istruzione CTYPES per esempio, fa riferimento ad una dll ma non so quale è e come reperirla. Grazie mille anticipatamente

6 Risposte

  • Re: Programmazione

    os.system("c:/dove/sta/il/mio/eseguibile.exe")
    oppure
    subprocess.run("c:/dove/sta/il/mio/eseguibile.exe", "-parametri")
    subprocess è una classe, vedi https://docs.python.org/3/library/subprocess.html#module-subprocess per tutte le caratteristiche.
  • Re: Programmazione

    Grazie mille non appena mi è possibile faro' la verifica e la terro' informata. Saluti
  • Re: Programmazione

    Buonasera ho inserito nel sorgente la seguente definizione di funzione:
    
    import time
    import subprocess
    import serial
    import tkinter as tk
    window = tk.Tk()
    window.geometry("600x200")
    window.title("Hello World")
    window.resizable(False, False)
    window.configure(background="yellow")
    arduino = serial.Serial('COM4',9600)
    
    def str_arm():
        time.sleep(1)
        subprocess.run(["arm"], 'arm.cpp.o')
    
    def fine_arm():
        time.sleep(1)
        arduino.close()
    
    
    first_button=tk.Button(text="Start Robotic Arm",  command=str_arm)
    first_button.place(x=220, y=60)
    
    second_button=tk.Button(text="End Robotic Arm" , command=fine_arm)
    second_button.place(x=220, y=100)
    
    if __name__== "__main__": 
    
       window.mainloop()
    
    La window si apre e se clicco sul bottom non esegue nulla. Credo di aver commesso un errore di logica poiche' , mi serve il comando da utilizzare per inviare l'eseguibile sulla scheda Arduino e non lanciare direttamente l'eseguibile. Se cosi fosse mi devo posizionare sul percorso dove c'è l'eseguibile ( con l'uso di OS?) e poi utilizzare i comandi di invio alla scheda?.. Grazie
  • Re: Programmazione

    A questo punto mi sono decisamente perso: tu hai un Arduino che controlla un braccio robotico (quello di Arduino?), e lo devi comandare da es. un portatile? I programmi in C sono per Arduino o per Windows?
    Premesso che non conosco Arduino, in genere i comandi da remoto non si danno inviando degli eseguibili a destinazione, ma tramite comandi fisici (pulsanti collegati alla scheda) o tramite messaggi inviati su canali di comunicazione (seriali, usb, reti varie, dipende dal tipo di scheda Arduino e da eventuali moduli aggiuntivi). Ovvero nell'Arduino avrai un programma che sta in attesa dei comandi da remoto.
  • Re: Programmazione

    Buonasera il braccio è compatibile 100% con Arduino . Il programma è scritto in Wiring ( Evoluzione del C++ ) e funziona correttamente sia da interfaccia IDE ARDUINO sia In visual studio code compilato con C++. In quest'ultimo caso , utilizzo il segno di spunta in basso all'editor VS CODE per l'upload dell'eseguibile sulla scheda. La stessa cosa la devo fare da python quando l'utente clicca sul primo bottom, devo utilizzare il / i comando/i che mi permettono di effettuare l'upload dell'eseguibile sulla scheda Arduino Uno. E' qui che mi sono fermato e spero in un supporto. In ogni caso la ringrazio per la disponibilita' mostrata. Saluti
  • Re: Programmazione

    Ho fatto una rapida ricerca su StackExchange (Arduino StackExchange) e mi sembra di aver capito che il plugin (Visual Micro) è uno script (quello che ho visto si chiama "clupload_win.sh") che fa alcune cose usando l'eseguibile 'lsz.exe' in una shell Unix:
Devi accedere o registrarti per scrivere nel forum
6 risposte