আমারে আরডিনো ডিজিটাল পোর্টের মানগুলি পেতে চেষ্টা করতে সমস্যা হচ্ছে এবং এই মানগুলিকে পাইথন টিনকিটার উইজেট স্কেলে সেট করতে পারি।
আমি পাইথন এবং আরডুইনো ফিরমাটার সাথে ব্যবহার করছি। আমি পাইথন কোড দিয়ে আমার আরডুইনো বোর্ড অ্যাক্সেস করতে সক্ষম। উদাহরণস্বরূপ কোনও লেবেল উইজেটে আমি আরডুইনো এনালগ পোর্ট মানটি রিয়েল-টাইমে কোনও লেবেলে কোনও সমস্যা ছাড়াই নিম্নলিখিত কোড হিসাবে সেট করে নিচ্ছি:
import Tkinter
import pyfirmata
def onStartButtonPress():
while True:
if flag.get():
analogReadLabel.config(text=str(a0.read()))
analogReadLabel.update_idletasks()
top.update()
else:
break
board.exit()
top.destroy()
def onExitButtonPress():
flag.set(False)
port = 'COM7'
board = pyfirmata.Arduino(port)
it = pyfirmata.util.Iterator(board)
it.start()
a0 = board.get_pin('a:0:i')
top = Tkinter.Tk()
top.title("Reading Analog pins")
descriptionLabel = Tkinter.Label(top, text="Potentiometer input:- ")
descriptionLabel.grid(column=1, row=1)
analogReadLabel = Tkinter.Label(top, text="Press Start..")
analogReadLabel.grid(column=2, row=1)
flag = Tkinter.BooleanVar(top)
flag.set(True)
startButton = Tkinter.Button(top, text="Start", command=onStartButtonPress)
startButton.grid(column=1, row=2)
exitButton = Tkinter.Button(top, text="Exit", command=onExitButtonPress)
exitButton.grid(column=2, row=2)
top.mainloop()
এই মুহুর্তে এটি ঠিক আছে এবং জিইউআই আমাকে এমন কিছু দেখায়:
তবে আমি যা করার চেষ্টা করছি এবং পাচ্ছি না তা হ'ল:
কোডটি এখানে:
import Tkinter
import pyfirmata
import serial;
def onStartButtonPress():
while True:
if flag.get():
analogReadLabel.config(text=str(d8.read()))
analogReadLabel1.config(text=str(d9.read()))
analogReadLabel2.config(text=str(d10.read()))
analogReadLabel.update_idletasks()
pos1 = d8.read()
if pos1 == True:
pos1 = int(pos1)
pos1 = 0
brightnessScale.set(pos1)
pos2 = d9.read()
if pos2 == True:
pos2 = int(pos2)
pos2 = 100
brightnessScale.set(pos2)
''' and so on '''
brightnessScale.update_idletasks()
top.update()
else:
break
board.exit()
top.destroy()
def onExitButtonPress():
flag.set(False)
port = 'COM7'
board = pyfirmata.Arduino(port)
it = pyfirmata.util.Iterator(board)
it.start()
a0 = board.get_pin('a:0:i')
d4 = board.get_pin('d:4:i')
d5 = board.get_pin('d:5:i')
d6 = board.get_pin('d:6:i')
d7 = board.get_pin('d:7:i')
d8 = board.get_pin('d:8:i')
d9 = board.get_pin('d:9:i')
d10 = board.get_pin('d:10:i')
top = Tkinter.Tk()
top.geometry("800x600")
top.title("Reading Analog pins")
descriptionLabel = Tkinter.Label(top, text="Potentiometer input:- ")
descriptionLabel.grid(column=1, row=1)
analogReadLabel = Tkinter.Label(top, text="Level 1")
analogReadLabel.grid(column=2, row=1)
analogReadLabel1 = Tkinter.Label(top, text="Level 2")
analogReadLabel1.grid(column=3, row=1)
analogReadLabel2 = Tkinter.Label(top, text="Level 3")
analogReadLabel2.grid(column=4, row=1)
brightnessScale = Tkinter.Scale(top, from_ = 500,
to = 0,
length = 500,
width = "30",
tickinterval = 50,
bg = "lightskyblue",
highlightcolor = "darkblue",
highlightbackground = "royalblue",
troughcolor = "darkblue",
state = Tkinter.DISABLED,
sliderlength = 50,
relief = "sunken",
label = "Volume do Reservatorio em %",
orient = Tkinter.VERTICAL)
brightnessScale.grid(column=1, row=5)
Tkinter.Label(top,text="Volume da Caixa em (%)").grid(column=1, row=6)
flag = Tkinter.BooleanVar(top)
flag.set(True)
startButton = Tkinter.Button(top, text="Start", command=onStartButtonPress)
startButton.grid(column=1, row=2)
exitButton = Tkinter.Button(top, text="Exit", command=onExitButtonPress)
exitButton.grid(column=2, row=2)
top.mainloop()
সংক্ষিপ্তসার হিসাবে: আমি কোডে ঘোষিত প্রতিটি ডিজিটাল পোর্টে রিডগুলি রেখেছি। এই রিডগুলি স্যুইচগুলি সাধারণত উন্মুক্ত স্থিতি হয়, যখন আমি তাদের কাছে একটি চৌম্বক ক্ষেত্র রাখি এটি বন্ধ হয়ে যায় এবং আমি ফলস থেকে সত্য হিসাবে এর মানটিতে পরিবর্তন পাই। আমি যা করার চেষ্টা করছি তা হ'ল টিন্টার স্কেল উইজেটটি রিয়েল টাইমে লেবেল হিসাবে আপডেট করা কিন্তু আমি তা পাচ্ছি না।
পাইথন কোডে এমন কোন কৌশল আছে যা আমার সমস্যার সমাধান করতে পারে? কারণ আমি ইন্টারনেটে প্রচুর গবেষণা করেছি এবং আমি কাজটি করতে পারিনি, কারণ আপনি দ্বিতীয় চিত্রটিতে দেখতে পারবেন যখন দ্বিতীয় ডিজিটাল পিনের অবস্থা পরিবর্তিত হয়, একটি লেবেল সত্যে পরিবর্তিত হয় এবং স্কেল কোডে এটি মানটির সাথে মিলে যায় 100, তবে এটি এখনও 0 চিহ্নে রয়েছে।
কমান্ড এবং স্কেল উইজেটের পরিবর্তনশীল পরামিতি ব্যবহার করেও আমি স্বাচ্ছন্দ্য বোধ করি না।
সংক্ষেপে, আমি ফার্মাটা ব্যবহার করে আরডুইনো থেকে ডিজিটাল বন্দরগুলির মান অনুযায়ী রিয়েল টাইম পাইথন টিকিনটার স্কেল উইজেট আপডেট করতে চাই।
আমি পাইথন ২.7 ব্যবহার করছি
পিএস: সম্পূর্ণতার জন্য:
এটি ফার্মাটা ছাড়া আমার আরডুইনো কোড (স্কেচ), যা প্রত্যাশা অনুযায়ী কাজ করছে।
int level;
int position;
void setup() {
pinMode(8, INPUT);
pinMode(9, INPUT);
pinMode(10, INPUT);
pinMode(11, INPUT);
pinMode(12, INPUT);
Serial.begin(9600); // ativa a porta serial
void loop() {
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(12, LOW);
position = digitalRead(8);
if ( position == HIGH) {level=0;}
position = digitalRead(9);
if ( position == HIGH) {Level=100;}
position = digitalRead(10);
if ( position == HIGH) {level=200;}
position = digitalRead(11);
if ( position == HIGH) {level=300;}
position = digitalRead(12);
if ( position == HIGH) {level=400;}
Serial.println(level);
delay(500);
}
আমি এখানে যা করতে পারলাম তা হল পাইথনের সিরিয়ালের মাধ্যমে এই মানগুলি পাওয়া এবং স্কেলটি আপডেট করার জন্য এগুলি ব্যবহার করা তবে আমি জানি না যে এই পদ্ধতিতে এটি কাজ করবে কিনা!
পাইথনে আমি যা ভেবেছিলাম: তবে আমার এখনও অ্যালগরিদম এবং ডেটা স্ট্রাকচারগুলিতে আরও অনেক কিছু শিখতে হবে। কেবলমাত্র সিউডো কোড:
def setScaleValue():
while True:
if flag.get():
pos1 = d4.read()
if pos1 == True: #or 1
#Here is the problem i don't know for sure what comes in my digital port
#If is a True bool or a 1 as HIGH value from arduino
#And probably i don't know if it's possible to change the values of a scale in this way !!!
#or if i'm mistaken the Cast stuff in Python
pos1 = int(pos1)
pos1 = 0
brightnessScale.set(pos1)
pos2 = d8.read()
if pos2 == True:
pos2 = int(pos2)
pos2 = 100
brightnessScale.set(pos2)
brightnessScale.update_idletasks()
top.update()
else:
break
board.exit()
top.destroy()
return
d4 = board.get_pin('d:4:i')
d5 = board.get_pin('d:5:i')
d6 = board.get_pin('d:6:i')
d7 = board.get_pin('d:7:i')
d8 = board.get_pin('d:8:i')
brightnessScale = Tkinter.Scale(top, from_ = 500,
to = 0,
length = 500,
width = "30",
tickinterval = 50,
bg = "lightskyblue",
highlightcolor = "darkblue",
highlightbackground = "royalblue",
troughcolor = "darkblue",
state = Tkinter.DISABLED,
sliderlength = 50,
relief = "sunken",
label = "Volume do Reservatorio em %",
orient = Tkinter.VERTICAL)
brightnessScale.grid(column=1, row=5)
Tkinter.Label(top,text="Volume da Caixa em (%)").grid(column=1, row=6)