পাইথন 3 এবং মডিউল সিরিয়ালের মাধ্যমে কীভাবে আরডুইনো ইউএনওতে নম্বর প্রেরণ করা যায়


9

আমি আরডিনো (এবং সাধারণভাবে কম্পিউটার প্রোগ্রামিং) এ নতুন, তাই এই প্রশ্নটি নিরীহ মনে হলে আমি ক্ষমা চাই।

আমি একবার বেসিক আরডুইনো-এলইডি সংযোগ স্থাপন করার পরে সিরিয়াল পোর্টের মাধ্যমে আইএনটিগ্রার্সকে আরডুইনোতে প্রেরণে আমার সমস্যা হয়। আমি সহজেই 'এম', 'ও' এবং এর মতো অক্ষরগুলি প্রেরণ করতে পারি .. তবে আমি যদি একটি নম্বর পাঠাই তবে মনে হয় এটি কেবল এটি পায় না get

এখানে আরডুইনো কোডটি রয়েছে, আদর্শভাবে এটি ইউএসবি বন্দর থেকে পাইথন বা সিরিয়াল মনিটরের মাধ্যমে একটি মান পাওয়া উচিত এবং তারপরে মান অনুযায়ী এলইডি এর উজ্জ্বলতা সামঞ্জস্য করে। (মান অবশ্যই [0,255] এর মধ্যে হতে হবে)।

দ্রষ্টব্য: আমি আরডুইনো ইউএনও এবং পাইথন 3 ব্যবহার করছি

// --------------------------

int LED = 10;
int number;

void setup(){

pinMode(LED,OUTPUT);
Serial.begin(9600);
}

void loop(){

number = Serial.read();
Serial.print(number);
Serial.print('\n');
if(number == -1){
number = 0;
}

else if(number > 255){

number = 255;

}

else if(number < 0){

number = 0;
}

analogWrite(LED,number);
delay(1000);
}

যাইহোক, যখন আমি সিরিয়াল বন্দরে বা পাইথনের মাধ্যমে একটি মান ইনপুট করি, উদাহরণস্বরূপ 0, এটি আমাকে উত্তর হিসাবে 48 দেয় (যা আকর্ষণীয়ভাবে, 0 এর জন্য এএসসিআইআই কোড!) এবং এলইডি আলোকিত করে যা যা হওয়ার পরে তা নয় since 0 এ এলইডি বন্ধ করা উচিত !! আমি কিছু মিস করছি তবে আমি কী খুঁজে পাচ্ছি না ... আপনি কি দয়া করে আমাকে ভুল বলতে পারেন?

পাইথনে আমি যে কোডটি ব্যবহার করি তা এখানে:

import serial
import time
try:
    arduino = serial.Serial(port,speed)
    time.sleep(2)
    print("Connection to " + port + " established succesfully!\n")
except Exception as e:
    print(e)

#Note: for characters such as 'a' I set data = b'a' to convert the data in bytes
#However the same thing does not work with numbers...
data = 0
data = arduino.write(valueToWrite)
time.sleep(2)
arduino.close()

আমি কি ভুল বা ভুল বোঝাবুঝি করছি? ধন্যবাদ.


1
চেষ্টা করুনarduino.write(chr(valueToWrite))
গারবেন

এই সমাধানটি এমনকি অক্ষরগুলির জন্যও কাজ করে না .. তাছাড়া যতদূর অক্ষর সম্পর্কিত, এটি কেবল বাইট হিসাবে প্রেরণ করে: বি'ম 'ঠিক কাজ করে। যাইহোক, উত্তরের জন্য ধন্যবাদ।
মিক্কক

উত্তর:


6

আরডুইনোর উপর পার্সিং করা ধীর এবং সময় সাপেক্ষ হতে পারে (আপনি যদি ক্লক প্রেস্কেলিং ব্যবহার করেন বা সময়-সমালোচনামূলক কাজগুলি করেন তবে এটি খারাপ), সুতরাং পাইথনে এটি করা যাক।

সমস্যাটি হ'ল আপনি সংখ্যাগুলি ASCII হিসাবে প্রেরণ করছেন যেখানে আপনাকে তাদের কাঁচা বাইনারি হিসাবে প্রেরণ করা দরকার। এখানেই structআসে।

3>> import struct
3>> print(struct.pack('>B', 0))
b'\x00'
3>> print(struct.pack('>B', 255))
b'\xff'
3>> print(struct.pack('>2B', 255, 0))
b'\xff\x00'
3>> print(struct.pack('>H', 9000))
b'#('

সুতরাং আপনি যা চান তা হ'ল:

data = arduino.write(struct.pack('>B', valueToWrite))

বা এই প্রভাব কিছু।


আপনাকে অনেক ধন্যবাদ! আমি ঠিক এটিই খুঁজছিলাম!
মিক্কক

খালি মন্তব্য বাক্সটি গ্রেড টেক্সট যা বলেছে তা সত্ত্বেও, আমি ধন্যবাদ বলতে যাচ্ছি! একটি এসপিআই ফ্ল্যাশ চিপকে পিসি -> ফ্ল্যাশ ইন্টারফেস হিসাবে আরডুইনো দিয়ে টেনেসি ৩.২ ব্যবহার করে একটি বিট-স্ট্রিম (এফপিজিএ .bin প্রোগ্রাম ফাইল) লেখার চেষ্টা করছিল এবং এটি এটি পিসির শেষদিকে কাজ করার মূল চাবিকাঠি।
কিরানএফ

1

Serial.read()সিরিয়াল পোর্ট থেকে কেবল একটি অক্ষর পড়ে এবং এর ASCII মান প্রদান করে, যা 48আপনাকে পেয়েছে তা ব্যাখ্যা করে ।

একটি সম্পূর্ণ নম্বর পড়তে আপনার কাছে দুটি বিকল্প রয়েছে:

  1. Serial.parseInt()প্রয়োজনীয় হিসাবে যতগুলি অক্ষর পড়ে এবং এমন হিসাবে পাঠ্য নম্বর ফেরত দেওয়ার আগে রূপান্তর সম্পাদন করে তা ব্যবহার করুন int। এখানে আরও রেফারেন্স চেক করুন।
  2. আপনি শেষেরটি Serial.read()অবধি লুপে (প্রতিটি সাথে ) প্রতিটি চরিত্রটি পড়েন, প্রতিটি পঠন চারকটারকে একটি বাফারে ( charঅ্যারে) রাখুন তারপরে ফলাফলটি স্ট্রিংটিকে স্ট্যান্ডার্ড সি ফাংশন সহ একটি সংখ্যায় রূপান্তর করুন atoi

অবশ্যই, প্রথম বিকল্পটি সবচেয়ে সহজতম তবে 01s সময়সীমা (এর সাথে কনফিগারযোগ্য Serial.setTimeout()) এর পরে যদি কিছু না পড়ে তবে তা ফিরে আসবে ।


এই উত্তরটি আমি যা চেয়েছিলাম ঠিক তা নয়, তবে এটি খুব কার্যকর হয়েছে এবং আমি এটি ব্যবহার করব! সাহায্যের জন্য আপনাকে অনেক ধন্যবাদ!
মিক্ক্ক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.