Arduino පාඩම 12 - EEPROM එකේ Data save කරන්නේ මෙහෙමයි.

5:30 PM 17 Comments

අපිට Arduino එක්ක වැඩ කරන කොට සමහර දේවල් save කරගන්න උවමනා වෙනවා. Arduino එකට power එක දීලා තියෙන වෙලාවට විතරක් data එක save කරගෙන තියාගන්න ඕනේ උනාම අපි variable use කරනවා. නමුත් Arduino එක power එක off කරහම මේ data මැකිලා යනවා.
අපිට Power එක off කරපු වෙලාවට මැකිලා යන්නේ නැතුව data save කරලා තියගන්න ඕනෙ උනහම වෙනත් ක්‍රම පාවිච්චි කරන්න වෙනවා. උදාහරණයක් විදිහට කිව්වොත් EEPROM, SD Card, Pen Drive වගේ ඒවා  යොදාගන්න පුලුවන්.
මම මේ පාර පාඩමෙන් කියලා දෙන්නේ Ardunio වල තියෙන EEPROM එක use කරලා data save කරන්නේ කොහොමද කියන එක ගැනයි. Arduino board වල තියෙන Micro Controller එක අනුව මේ EEPROM එකේ තියෙන ඉඩ ප්‍රමාණය වෙනස් වෙනවා. පහලින් තියෙන්නේ විවිධ Arduino board වල තියෙන EEPROM size එකයි.

   - Arduno Duemilanove: 512b EEPROM storage.
    - Arduino Uno, Mini, Pro Mini, Nano:        1kb EEPROM storage. (Atmega 328 based boards)
    - Arduino Mega:       4kb EEPROM storage.

කොහොම උනත් මේ EEPROM එක පාවිච්චි කරන්න කලින් ඒකේ තියෙන සීමා හා සැකැස්ම ගැන පොඩ්ඩක් දැනගෙන ඉන්න ඕනේ.

EEPROM හි සැකැස්ම.

මම මෙතනදී කතා කරන්න බලාපොරොත්තු වෙන්නේ Arduino UNO හි ඇති EEPROM එක ගැනයි. නමුත් මේක Atmega 328 based වෙලා තියෙන Pro Mini, Nano වගේ board වලටත් අදාලයි. 
ඒ වගේම අනිත් ඕනෑම Arduino board  එකකටත් වලංගුයි. වෙනසකට තියෙන්නේ EEPROM එකේ size එක විතරයි.

Arduino UNO board එකක 1024 Bytes (= 1KB) ක EEPROM එකක් තියෙනවා. අපි data save කරන්නේ මේ එක byte එකක තමයි. මේ එක byte එකකට එහි පිටීමට අදාලව Byte address එකක් තියෙනවා. අපි data save කරන කොට ඒ data save කරන්නේ මොන byte එකේද කියලා හදුවලා දෙන්නේ මේ address එකේ උදව්වෙන්. 

ඒ වගේම තමයි අපිට මේ byte එකක් තුල ගබඩා කරන්න පුලුවන් වෙන්නේ 0 ඉදලා 255 දක්වා වෙන සංඛ්‍යාත්මක අගයන් විතරයි. ඒ කියන්නේ මේකේ වචන save කරන්න බෑ ඉලක්කම් විතරයි.

EEPROM  Data Write/Read

 මේ සඳහා යොදා ගන්න Keyword 2 ක් තියෙනවා. එකක් data write කරන්න අනික data read කරන්න.

 EEPROM.write(addr, val);

data write කරන්නේ මේ keyword එකෙන් තමයි. මෙතන addr කියලා තියෙන්නේ data write කිරීමට බලාපොරොත්තුවෙන Byte එකට හිමි address එකයි. val කියලා තියෙන්නේ write කරන value එකයි . මෙතන 0-255 වෙන අගයක් ලියන්න පුලුවන්.

EEPROM.read(address);

data read  කරන්නේ මේ keyword එකෙන් තමයි. මෙතන address කියලා තියෙන්නේ data read කිරීමට බලාපොරොත්තුවෙන Byte එකට හිමි address එකයි

මේක වැඩ කරන හැටි තේරුම්  ගන්න මුලින්ම මේ code එක ලියලා බලන්න. මෙතනදී මම කරලා තියෙන්නේ 1, 2 හා 3 කියන Byte වලට 128, 12 හා 0 කියන value write කරලා ඊට පස්සේ ඒ values read කරලා serial monitor එකේ print කරන එකයි.

#include <EEPROM.h>
void setup(){
    Serial.begin(9600);
    Serial.println(EEPROM.length());  
    //Write values
    EEPROM.write(1,128);
    EEPROM.write(2,12);
    EEPROM.write(3,0);
    //Read values
    Serial.println(EEPROM.read(1));
    Serial.println(EEPROM.read(2));
    Serial.println(EEPROM.read(3));
}

මම මෙතනදී මුලින්ම EEPROM library එක include කරගෙන තියෙනවා. 3 වෙනි පෙලියෙන් serial communication එක start කරලා තියෙනවා.

4 පේලියෙන් කරලා තියෙන්නේ EEPROM එකේ කොච්චර byte ප්‍රමාණයක් තියෙනවද කියන එක serial monitor එකේ print කරන එක.

6,7,8 පේලි වලින් කරලා තියෙන්නේ 1,2,3 කියන byte වල පිලිවලින් ඒ byte වලට 128,12,0 කියන values write කරලා තියෙනවා.

10,11,12 පේලි වලින් කරලා තියෙන්නේ 1,2,3 කියන byte වල තියෙන value එකින් එක serial monitor එකේ print කරන එකයි.

එක පාරක් මේ code එක upload කරලා arduino එකේ power off කරලා අයෙත් arduino එක PC එකට connect කරලා 6,7,8 පේලි delete කරලා code එක අයේ upload කරන්න. ඊර පස්සේ serial monitor එක ආයෙත් open කරලා බලන්න්. 128, 12, 0 කියන values අයේ ප්‍රින්ට් වේවි.



EEPROM Update.

EEPROM එකේ තියෙන එක byte එකක data write කරන්න පුලුවන් වාර ගණනක් තියෙනවා ඒ කියන්නේ මේ එක byte එකක data write කරන්න පුලුවන් 100,000 වතාවක් විතරයි. ඒ වගේම මේ එක data write එකකට 3.3 ms (3.3 මිලි තත්පර) කාලයක් වැයවෙනවා.

මේ කාරනා දෙකම මග හැර ගන්න අපිට මේ update keyword එක use කරන්න පුලුවන්. 

EEPROM.update(addr, val);

මෙතන addr කියලා තියෙන්නේ data update කිරීමට බලාපොරොත්තුවෙන Byte එකට හිමි address එකයි. val කියලා තියෙන්නේ write කරන value එකයි . මෙතන 0-255 වෙන අගයක් ලියන්න පුලුවන්.

#include <EEPROM.h>
void setup(){
    Serial.begin(9600);
    Serial.println(EEPROM.length());  
    //Write values
    EEPROM.update(1,255);
    EEPROM.update(2,25);
    EEPROM.update(3,1);
    //Read values
    Serial.println(EEPROM.read(1));
    Serial.println(EEPROM.read(2));
    Serial.println(EEPROM.read(3));
}

මේකටත් තියෙන්නේ කලින් පැහදිලි කිරීමම තමයි. වෙනසකට තියෙන්නේ data write කිරීම වෙනුවට data update කිරීමයි.
Ardunio සදහාම නිර්මාණය කෙරුනු ලංකාවේ පලවෙනි Alternative IDE එක මෙතනින් download කරගන්න.

article එක හොදයි නම් comment එකක් දාගෙනම යන්න !
article එක හොදයි නම් අනිත් අයටත් බල්න්න share කරන්න. අපේ page එකටත් like කරන්න අමතක කරන්න එපා.

WPF VB.Net පාඩම 13 - Message box වලින් වැඩ ගන්නේ මෙහෙමයි.

7:45 AM 5 Comments

මම මේ පාර පාඩමෙන් කියලා දෙන්නේ කොහොමද message box භාවිතා කරලා අපි හදන computer program එක භාවිත කරන user ට පණිවිඩයක් දෙන්නේ, user ගෙන් ප්‍රශ්නයක් අහලා උත්තරයක් ගන්න වගේ දේවල කොහොමද කරගන්නේ කියලා.

මේ කරන්න අපි වෙනම window ලබාගන්න ඕනෙ නෑ. මේ වගේ වැඩ කරග්න්න විශේෂ class library එකක් visual studio වැඩසටහන තුලින්ම අපිට සපයනවා. මෙතැන ඉදලා ඉස්සරහට විස්තර කරනේ මේ message box වලින් වැඩ කරන්නෙ කොහොමද කියන එක ගැනයි.

Message Box එකක පොදු ආකෘතිය.

හැම දෙයකටම වගේ message box එකකටත් පොදු ආකෘතියක් තියෙනවා. පහල තියෙන Code එක තමයි අපි බහුලව භාවිතා කරන පොදු ආකෘතිය. ඒ වගේම තමයි පහල රූපයේ තියෙන්නේ message box එකක user interface එකේ භාහිර පෙනුම හා එහි විවිධ කොටස්.

MessageBox.Show(Title, Content, MessageBoxButton, MessageBoxImage)

Message Box එකක් පෙන්වීම.

මේ කරන්න මුලින්ම අලුත් WPF application project එකක් open කරගෙන ලැබෙන MainWindow එකට අලුති button එකක් අරගෙන button එකේ content එකට කැමති නමක් යොදා ගන්න මම නම් යොදාගෙන තියෙන්නේ Show Message Box කියලා.

ඊට පස්සේ button එක්කේ Click event එක තුලදී පහලින් තියෙන code එක ලියන්න.

MessageBox.Show("Title","Content",MessageBoxButton.OK,MessageBoxImage.Information)



මෙතන Title එකයි content කියන එකටයි තමන් කැමති නමක් දෙන්න uපුලුවන් උනත් ඒවා දෙන්න ඕනේ String format එකෙන්, ඒ කියන්නේ පෙරලි කොමා ඇතුලේ.

ඒ වගේම තමයි Button style කියන Ok වෙනුවට වෙනත් style එකක් උනත් යොදා ගන්න පුලුවන්. Image  එකටත් එහෙම තමයි.

මේ විදිහට වෙන තියෙන style මොනවාද කියලා බලගන්න තියෙන හොදම විදිහ තමයි. MessageBoxButton කියලා type කරලා තිත තියපුවහම එන list එක කියවලා බලන එක

දැන් F5 ඔබලා program එක Run කරලා button එක click කරපු වහම පහලින් තියෙනවා වගේ Message Box එකක් දකින්න ලැබේවි.

වැදගත්.

අපි කලින් වගේ code එකක් ලියලා Message Box එකක්  show කරගත්තහම පස්සේ මතක තියාගන්න ඕනේ වැදගත් තියෙනවා. ඒ තමයි Message Box එකක් show කරහට පස්සේ Message Box එක close කරනකන් Message Box එක show කරන එකට අදාල code එකට පහලින් තියෙන code කිසිම එකක් වැඩ කරන්නෙ නෑ කියන එක.

තව දුරටත් උදාහරණයකින් කියනවනම් පහලින් තියෙන code එක බලන්න. එතන් දී මම පළවෙනි පේලියේ Message Box එකක්  show කරලා දෙවැනි පේලියේ button එකේ Content එක වෙනස් කරලා තියෙනවා.


නමුත් program එක run කරහම ලැmබුන Message Box එක close කරන කන් දෙවැනි පේලියේ තියෙන code එක වැඩ කරන්නේ නෑ.

Message Box එකකින් ලැබෙන පිළිතුර අනුව වැඩ කිරීම.

ඔයාලා දැකල ඇති සමහර software වලදී Message Box හරහා විවිධ ප්‍රශ්න අහලා එතනදී අපි ලබා දෙන උත්තරය අනුව ක්‍රියා කරනවා. මම කියන්න යන්නේත් ඒ විදිහට ප්‍රශ්න අහලා ලබා දෙන උත්තරය අනුව ඉදිරිය ක්‍රියත්මකවෙන ආකාරයේ program එකක් හදන හැටියි.
ඒකට button එකක් අරගෙන button එකේ click event එකේ පහලින් තියෙන code එක ලියන්න.

Select Case MessageBox.Show("Are you ok ?", "Question", MessageBoxButton.YesNo, MessageBoxImage.Question)
            Case MessageBoxResult.Yes
                MessageBox.Show("You are ok. That's good")
            Case MessageBoxResult.No
                MessageBox.Show("Oh no !")
End Select

ඔය නිල් පාට පේලිය තනි පේලියට ලියන්න ඕනේ.

Code එක පැහැදිලි කිරීම.

මම මෙතන කරලා  තියෙනේ button එක click කලහම Message Box එකක් හරහා User ගෙන්  Are you ok ?"  විදිහට  ප්‍රශ්නයක් අහනවා.
මෙතනදී මම select-case එක භවිත කරලා user ලබාදෙන උත්තරය මොකක්ද කියලා බලනවා.
user Yes කියලා ලබා දුන්නොත් You are ok. That's good කියන message box එක පෙන්වනවා

No කියලා ලබා දුන්නොත් Oh no !" කියන message box එක පෙන්වනවා.

මෙතනදී ඔයාලා මතක තියගන්න ඕනේ තව දෙයක් තියෙනවා. ඒ තමයි හැම වෙලේම Title, Button style හා Image/Icon එක මොකක්ද කියලා ලබා නොදීම උනත් message box එකක් පෙන්නන්න පුලුවන් කියන එක.

ලිපිය හොදයි නම comment එකක් දාලා තව කෙනෙකුට බලන්න share කරන්න.

Arduino පාඩම 11 - 7 Segment Display භාවිතය.

8:25 PM 3 Comments

මම මේ පාර පාඩමෙන් කියලා දෙන්නේ SSD එහෙමත් නැත්නම් 7 Segment Display (සප්ත කන්ඩ දර්ශක) Arduino එකත් එක්ක පාවිච්චි කරන්නේ කොහොමද කියන එක ගැනයි. SSD එකක් කියන්නේ output module එකක්. සාමාන්‍යයෙන් LCD එකකට වඩා අවධානය ගන්න ඕනේ අවස්ථාවල මේ SSD පාවිච්චි කරනවා. මම මෙතනදී කියලා දෙන්නේ ඉලක්කම් විතරක් පෙන්නන SSD  ගැනයි. නමුත් ඉංග්‍රීසි අක්ෂර පෙන්නන්න පුලුවන් Segment Display ත් තියෙනවා.

SSD හැදින්වීම

SSD එකක් හැදිලා තියෙන්නේ වෙන වෙනම පාලනය කරන්න පුලුවන් LED 8 කින් මේ 8 න් 7 ක්ම පාවිච්චි වෙන්නේ අංකයක් දර්ශනය කරන්නයි. ඉතුරු LED එක තියෙන්නේ දශම තිත සදහා යි. ඒවගේම තමයි අපි SSD එකක් මිලදී ගන්න කොට ප්‍රධාන වශයෙන් සැලකිලිමත් වියයුතු කරුන නම් Common පින් එකයි. මෙය ආකාර දෙකකට තියෙනවා. ඒ කියන්නේ common anode (පොදු අග්‍රය + ) හා common cathode (පොදු අග්‍රය -) වශයෙන් වර්ග දෙකක් වෙනවා. පහලින් තියෙන්නේ SSD එකක දල සැකැස්මයි.

සාමාන්‍යයෙන් SSD එකක් කියන්නෙ එක ඉලක්කමක් විතරක් පෙන්නන්න පුලුවන් තනි unit එකකට.  මේ එක unit  එකකට segment  එකක් කියල කියනවා. කොහොම උනත් හුගක් අවස්තා වල අපිට එක ඉලක්කමකට වඩා පෙන්නන්න ඕන අවස්ථා තියෙනවා. එතකොට අපි SSD කිහිපයක් එකතු කරලා හදලා තියෙන SSD unit එකක් ගන්න ඕනේ.

මම මේ පාර පාඩමෙන් කියලා දෙන්නේ අංක 4 ක් පෙන්නන්න පුලුවන් SSD unit එකකින් වැඩකරන හැටි ගැනයි. මේ වගේ SSD එකකට කියන්නේ 4-digit SSD කියලයි. සාමාන්‍යයෙන් මේ 4-digit SSD එකක්ත් common pin එකට අමතරව සැලකිලිමත් වෙන්න ඕනේ තව දෙයක් තියෙනවා. ඒ කියන්නේ pin ගණන ගැනයි. 4-digit SSD එකක් 12 pin හා 16 pin වශයෙන් වර්ග 2 ක් තියෙනවා මම මෙතන්දී කතා කරන්නේ 4-digit 12 pin common cathode seven segment display ගැනයි. පහලින් තියෙන්නෙ 4-digit SSD එකක් පෙනුම හා පින් පිහිටලා තියෙන හැටියි.


SSD Driver IC

මෙතනදී මම SSD Driver IC එකක් පාවිච්චි කරලා තියෙනවා. මේකට බහුලව යොදාගන්න IC 2 ක් තියෙනවා MAX7219, MAX7221. මම මෙතනදී ගන්නේ MAX 7219 කියන IC එක. මේ IC එකට එකවර අංක 8 තියෙන Display එකක් හසුරුවන්න උනත් පුලුවන්. ලංකවේ මේ IC එක රු.180/- විතර වෙනවා.
පහලින් තියෙන්නේ මේ IC එකේ පින් OUT එක.

Components

Arduino board
Max7219 Chip
4-digit 7-segment LED display (common cathode)
40KΩ resistor
10μF capacitor
100nF capacitor

Circuit Diagram


Arduino Code

#include <SPI.h>

const int slaveSelect= 10; //pin used to enable the active slave

const int numberofDigits= 2;

const int maxCount= 99;

int number=0;

void setup()
{
Serial.begin(9600);
SPI.begin(); //initialize SPI
pinMode(slaveSelect, OUTPUT);
pinMode(slaveSelect, LOW); //select Slave

//prepare the 7219 to display 7-segment data
sendCommand (12,1); //normal mode (default is shutdown mode)
sendCommand (15,0); //Display test off
sendCommand (10,8); //set medium intensity (range is 0-15)
sendCommand (11, numberofDigits); //7219 digit scan limit command
sendCommand (9, 255); //decode command, use standard 7-segment digits
digitalWrite(slaveSelect, HIGH); //deselect slave
}

void loop(){
//display a number from serial port terminated by end of line character
if(Serial.available())
{
char ch= Serial.read();
if (ch == '\n')
{
displayNumber(number);
number=0;
}
else
number= (number * 10) + ch - '0';
}
}

//function to display up to 4 digits on a 7-segment display
void displayNumber (int number)
{
for (int i=0; i < numberofDigits; i++)
{
byte character= number % 10; //get the value of the rightmost digit
if (number == 0 && i > 0)
character = 0xf;
sendCommand(numberofDigits-i, character);
number= number/10;
}
}

void sendCommand(int command, int value)
{
digitalWrite(slaveSelect, LOW); //chip select is active low
SPI.transfer(command);
SPI.transfer(value);
digitalWrite(slaveSelect,HIGH);
}

original source code & diagram by : learningaboutelectronics.com/
Code එක upload කරලා Serial monitor එකේ 0 ත් 9999 ත් අතර අගයක් ගහල බලන්න.
මේ ක්‍රමයට අමතරව තව පහසු ක්‍රමයක් තියෙනවා. මෙච්චර code ලියන්න ඕනෙත් නෑ. පහලින් තියෙන link එකෙන් ඒ ගැන වැඩිදුර දැනගන්න පුලුවන්.
http://embedded-lab.com/blog/new-version-of-max7219-based-4-digit-serial-seven-segment-led-display/
Ardunio සදහාම නිර්මාණය කෙරුනු ලංකාවේ පලවෙනි Alternative IDE එක මෙතනින් download කරගන්න.

article එක හොදයි නම් අනිත් අයටත් බල්න්න share කරන්න. ඔයාලා හදපු project වල photo එකක් comment කරන්නත් අපේ එකේ post කරන්නත් අමතක කරන්න එපා.