В прошлой версии лайфхака было такое неудобство: у нас открывалась Ардуино_2.0 с НЕвыбранной платой и приходилось каждый раз выбирать плату в Ардуино_2.0 по новому.
В Ардуино_1.0, например, мы могли (перед ее открытием) указать в файле preference.txt необходимую плату и ее настройки и запуская, после этого Ардуино_1.0, мы получали уже настроенную плату.
В Ардуино_2.0 такой возможности НЕТ. Разработчики предлагают ручками выбирать каждый раз плату, либо использовать вариант открытия Ардуино_2.0 "c последней используемой платой".
Поэтому выкладываю новую версию лайфхака для FLProg с вариантом "последней используемой платы" в Ардуино_2.0:
Инструкция:
-если использовали предыдущую версию лайфхака, то удалите файлы: "arduino.exe" (из папки C:\FLProg\ideV8) и "setting_run_arduino2.ini" (из папки C:\FLProg) и пройдите шаги с пункта #3
1. Откройте папку "FLProg -> ideV8".
2. Переименуйте файл "arduino.exe" в "old_arduino.exe" (СТРОГО в "old_arduino.exe"!).
3. Скопируйте в эту папку (FLProg\ideV8) скачанный файл "arduino.exe".
4. Теперь при нажатии кнопки в программе FLProg "Компилировать проект", будет открываться окно выбора ArduinoIDE.
5. В ПУТИ ДО Ардуино 1.0 укажите файл "old_arduino.exe" (тот который мы выше переименовывали)!!!.
6. Теперь создайте в папке FLPog папку "start" и в этой папке создайте пустой файл "start.ino".
7. Откройте Arduino 2.0 и наберите комбинацию CTRL+SHIFT+P
8. Введите текст "параметры" и выберите "Oткрыть параметры (пользовательский интерфейс)".
9. Наберите текст "blue".
10. В разделе "Arduino › Sketch: Ino Blueprint" укажите путь до созданного файла "start.ino" (например C:\FLProg\start\start.ino).
11. Закройте вкладку "Параметры", нажав крестик сверху-слева и выберите какую нибудь плату и закройте Arduino 2.0.
12. Теперь у нас при открытии Ардуино 2.0 будет последняя выбранная нами плата.
*имейте в виду - выбор платы осуществляется только из под Ардуино 2.0!, т.к. сделать это из FLProg - (пока) невозможно.
**настройки можно изменять и в файле "setting_run_arduino2.ini", создающимся в папке "PortableFLProg" при первом запуске.
Получаем более-менее приемлимый вариант работы с Ардуино2.0 из-под FLProg
Скачать Лайфхак версии #0.3: https://disk.yandex.ru/d/uV5hLH_BgoiM_w
исходный код для Pyton 3.11.4:
import pyperclip
import requests
import random
import sys
import subprocess
import os
import configparser
import os.path
import time
from tkinter import messagebox as mbox
#окно уведомлений
def onError(self):
mbox.showerror("Ошибка", self)
file_created=0
config = configparser.ConfigParser() # создаём объекта парсера
from tkinter import *
import tkinter.filedialog as fd
window = Tk()
if __name__ == "__main__":
for param in sys.argv:
print(param)
#window.title('Выбор версии Arduino IDE ' + param
window.title('Выбор версии Arduino IDE в FLProg (v.0.3)')
#subprocess.run([os.getcwd()+'\ideV8\old_arduino.exe', param])
#-----скидываем код в буфер----------------
if os.path.isfile(param):
fo = open(param, 'r',encoding="utf-8").read().strip()
pyperclip.copy(str(fo))
else:
onError('Файл скетча не найден!')
#------------------------атозапуск по чек боксу-----иначе в ошибку автозапуск ардуино падает----------------
def clicked2():
if ((config["Arduino_1"]['path'] == '')&(chekbox_1.get()==1)):onError('не указан путь для Arduino 1.0')
else:
if ((config["Arduino_2"]['path'] == '')&(chekbox_2.get()==1)):onError('не указан путь для Arduino 2.0')
else:
if (((config["Arduino_1"]['path'] == '')&(chekbox_1.get()==0))&((config["Arduino_2"]['path'] == '')&(chekbox_1.get()==0))):onError('не указан путь для Arduino IDE и не выбрана версия')
else:
if ((chekbox_1.get()==0)&(chekbox_2.get()==0)):onError('не выбрана версия Arduino')
#Aрдуино 1
if ((config["Arduino_1"]['path'] != '')&(chekbox_1.get()==1)):subprocess.run([config["Arduino_1"]['path'], param])
#Ардуино 2
if ((config["Arduino_2"]['path'] != '')&(chekbox_2.get()==1)):subprocess.run([config["Arduino_2"]['path'], config["start.ino"]['path']])
#--------------------------------------------запуск по кнопке-----------------------------------------------------
def clicked():
window.after(1000, window.destroy())
if(config["start.ino"]['path']==''):onError('не указан путь для start.ino')
else:read_start_ino()
if ((config["Arduino_1"]['path'] == '')&(chekbox_1.get()==1)):onError('не указан путь для Arduino 1.0')
else:
if ((config["Arduino_2"]['path'] == '')&(chekbox_2.get()==1)):onError('не указан путь для Arduino 2.0')
else:
if (((config["Arduino_1"]['path'] == '')&(chekbox_1.get()==0))&((config["Arduino_2"]['path'] == '')&(chekbox_1.get()==0))):onError('не указан путь для Arduino IDE и не выбрана версия')
else:
if ((chekbox_1.get()==0)&(chekbox_2.get()==0)):onError('не выбрана версия Arduino')
#Aрдуино 1
if ((config["Arduino_1"]['path'] != '')&(chekbox_1.get()==1)):subprocess.run([config["Arduino_1"]['path'], param])
#Ардуино 2
if ((config["Arduino_2"]['path'] != '')&(chekbox_2.get()==1)):subprocess.run([config["Arduino_2"]['path'], config["start.ino"]['path']])
#-----------------------------запись настроек в файл при изменении пути к ардуине 1--------------------------------
def open_file1():
# Show the open file dialog by specifying path
f = fd.askopenfilename()
txt1.config(text=f)
config.set('Arduino_1', 'path', f)
with open('setting_run_arduino2.ini', 'w') as configfile:config.write(configfile)
#------------------------------запись настроек в файл при изменении пути к start.ino-------------------------------
def start_ino():
f = fd.askopenfilename()
txt3.config(text=f)
config.set('start.ino', 'path', f)
with open('setting_run_arduino2.ini', 'w') as configfile:config.write(configfile)
#------------------------------запись настроек в файл при изменении пути к ардуине 2-------------------------------
def open_file2():
f = fd.askopenfilename()
txt2.config(text=f)
config.set('Arduino_2', 'path', f)
with open('setting_run_arduino2.ini', 'w') as configfile:config.write(configfile)
#------------------------------запись настроек в файл при изменении чекбокса автозапуска-------------------------------
def func_autorun():
config.set('run_app', 'chekbox_run_app', str(chekbox_run_app.get()))
with open('setting_run_arduino2.ini', 'w') as configfile:config.write(configfile)
#------------------------------запись настроек в файл при изменении чекбокса ардуине 1-------------------------------
def func_chekbox_1():
config.set('Arduino_1', 'chekbox_1', str(chekbox_1.get()))
with open('setting_run_arduino2.ini', 'w') as configfile:config.write(configfile)
#------------------------------запись настроек в файл при изменении чекбокса ардуине 2-------------------------------
def func_chekbox_2():
config.set('Arduino_2', 'chekbox_2', str(chekbox_2.get()))
with open('setting_run_arduino2.ini', 'w') as configfile:config.write(configfile)
#--------------------кнопка файла 1-----------------------------------------
open_button = Button(window, text='Путь до Arduino 1.0',bg='white', command=open_file1)
open_button.place(x = 190, y = 20, width = 150)
#-------------------поле ввода 1------------------------------------------
txt1=Label(window, text='', font=("Arial Bold", 10))
txt1.place(x = 350, y = 22)
if(file_created==1):
txt1.config(text=config["Arduino_1"]['path'])
#--------------------кнопка файла 2-----------------------------------------
open_button2 = Button(window, text='Путь до Arduino 2.0',bg='white', command=open_file2)
open_button2.place(x = 190, y = 70, width = 150)
#-------------------поле ввода start.ino------------------------------------------
txt3=Label(window, text='', font=("Arial Bold", 10))
txt3.place(x = 350, y = 115)
if(file_created==1):
txt3.config(text=config["start.ino"]['path'])
#--------------------кнопка файла Путь до start.ino-----------------------------------------
open_button3 = Button(window, text='Путь до start.ino',bg='white', command=start_ino)
open_button3.place(x = 190, y = 115, width = 150)
#-------------------поле ввода 2------------------------------------------
txt2=Label(window, text='', font=("Arial Bold", 10))
txt2.place(x = 350, y = 72)
if(file_created==1):
txt1.config(text=config["Arduino_2"]['path'])
#-------------------------------------------------------------
chekbox_1 = IntVar()
checkbutton1 = Checkbutton(window, text="Запускать в Arduino 1.0", variable=chekbox_1,command=func_chekbox_1)
checkbutton1.place(x = 20, y = 21)
if(file_created==1):
checkbutton1.config(variable=config["Arduino_1"]['chekbox_1'])
#-------------------------------------------------------------
chekbox_2 = IntVar()
checkbutton2 = Checkbutton(window, text="Запускать в Arduino 2.0", variable=chekbox_2,command=func_chekbox_2)
checkbutton2.place(x = 20, y = 71)
if(file_created==1):
checkbutton2.config(variable=config["Arduino_2"]['chekbox_2'])
#------------------------------ридми-------------------------------
txt4=Label(window,justify='left', text='1. Откройте папку "FLProg -> ideV8"\n2. Переименуйте файл "arduino.exe" в "old_arduino.exe" (СТРОГО в "old_arduino.exe"!)\n3. Скопируйте в эту папку (FLProg\ideV8) скачанный файл "arduino.exe"\n4. Теперь при нажатии кнопки в программе FLProg "Компилировать проект",\n будет открываться окно выбора ArduinoIDE\n5. В ПУТИ ДО Ардуино 1.0 укажите файл "old_arduino.exe" (тот который мы выше переименовывали)!!!\n6. Теперь создайте в папке FLPog папку "start" и в этой папке создайте пустой файл "start.ino"\n7. Откройте Arduino 2.0 и наберите комбинацию CTRL+SHIFT+P\n8. Введите текст "параметры" и выберите "Oткрыть параметры (пользовательский интерфейс)"\n9. Наберите текст "blue"\n10. В разделе "Arduino › Sketch: Ino Blueprint" укажите путь до сoзданного файла "start.ino"\n (например C:\FLProg\start\start.ino)\n11. Закройте вкладку "Параметры", нажав крестик сверху-слева и выберите какую нибудь плату и закройте Arduino 2.0\n12. Теперь у нас при открытии Ардуино 2.0 будет последняя выбранная нами плата\n\n*имейте в виду - выбор платы осуществляется только из под Ардуино 2.0!, т.к. сделать это из FLProg - (пока) невозможно\n**настройки можно изменять и в файле "setting_run_arduino2.ini", создающимся в папке "PortableFLProg" при первом запуске', font=("Arial Bold", 10))
txt4.place(x = 10, y = 350)
#-----------------------------чекбокс запускать Ардуино IDE автоматически--------------------------------
chekbox_run_app = IntVar()
check_chekbox_run_app = Checkbutton(window, text="запускать Ардуино IDE автоматически", variable=chekbox_run_app,command=func_autorun)
check_chekbox_run_app.place(x = 230, y = 200)
if(file_created==1):
check_chekbox_run_app.config(variable=config["run_app"]['chekbox_run_app'])
#-------------------------------------------------------------
#создаю файл при первом запуске
def create_settings():
print('создаю файл настроек')
my_file = open("setting_run_arduino2.ini", "w+")
my_file = open("setting_run_arduino2.ini", "a+")
my_file.write("[run_app]\n")
my_file.write("chekbox_run_app=0\n")
my_file.write("[Arduino_1]\n")
my_file.write("path=\n")
my_file.write("chekbox_1=0\n")
my_file.write("[Arduino_2]\n")
my_file.write("path=\n")
my_file.write("chekbox_2=0\n")
my_file.write("[timer_close_app]\n")
my_file.write("value=2000\n")
my_file.write("[start.ino]\n")
my_file.write("path=\n")
my_file.close()
file_created=1
# если файла настроек нет, то создаем и ждем пока файл создастся
while not os.path.exists('setting_run_arduino2.ini'):
create_settings()
time.sleep(1)
# если файл настроек существует
if os.path.isfile('setting_run_arduino2.ini'):
# read file
config.read("setting_run_arduino2.ini") # читаем конфиг
if(config["Arduino_1"]['path']==''):txt1.config(text='не указан путь!')
else:txt1.config(text=config["Arduino_1"]['path'])
if(config["Arduino_2"]['path']==''):txt2.config(text='не указан путь!')
else:txt2.config(text=config["Arduino_2"]['path'])
if(config["start.ino"]['path']==''):txt3.config(text='не указан путь!')
else:txt3.config(text=config["start.ino"]['path'])
chekbox_1.set(config["Arduino_1"]['chekbox_1'])
chekbox_2.set(config["Arduino_2"]['chekbox_2'])
chekbox_run_app.set(config["run_app"]['chekbox_run_app'])
else:
raise ValueError("%s isn't a file!" % 'setting_run_arduino2.ini')
onError('Файл скетча не найден!')
#----------------------кнопка Запустить вручную Arduino IDE--------
btn = Button(window, text="Запустить вручную Arduino IDE",width=30, bg="lightblue", fg="red", command=clicked)
btn.place(x = 240, y = 260)
#---------------------запуск ардуино 2 через файл старт ино ----------------------
def read_start_ino():
my_file2 = open(config["start.ino"]['path'], "w")
my_file2.write(str(fo))
my_file2.close()
#subprocess.run([config(text=config["Arduino_2"]['path'],config["start.ino"]['path'])
#------------------размер окна + центрирование
WIDTH = 800
HEIGHT = 700
x = int((window.winfo_screenwidth() / 2) - (WIDTH / 2))
y = int((window.winfo_screenheight() / 2) - (HEIGHT / 2))
window.geometry(f'{WIDTH}x{HEIGHT}+{x}+{y}')
if(chekbox_run_app.get()==1):
#timer1 = int(config["timer_close_app"]['value'])
window.after(int(config["timer_close_app"]['value']), window.destroy)
#window.after(2000, window.destroy)
#----------обработка крестика---
vixod=0
from tkinter import messagebox
def on_closing():
global vixod
vixod = 1
if messagebox.askokcancel("Выход", "Выйти из программы?"):
window.destroy()
window.protocol("WM_DELETE_WINDOW", on_closing)
#----------------------------
window.mainloop()
if (vixod==0):
if(chekbox_run_app.get()==1):
clicked2()
#запуск компилятора в .exe из cmd
#auto-py-to-exe