Агуулгын хүснэгт:

Arduino мэдрэгчтэй дэлгэцийн тооцоолуур: 7 алхам
Arduino мэдрэгчтэй дэлгэцийн тооцоолуур: 7 алхам

Видео: Arduino мэдрэгчтэй дэлгэцийн тооцоолуур: 7 алхам

Видео: Arduino мэдрэгчтэй дэлгэцийн тооцоолуур: 7 алхам
Видео: SKR Pro v1.2 - Basics 2024, Долдугаар сарын
Anonim
Arduino мэдрэгчтэй дэлгэцийн тооцоолуур
Arduino мэдрэгчтэй дэлгэцийн тооцоолуур

Сайн уу? Энэ бол Arduino Uno болон TFT LCD бамбай ашиглан мэдрэгчтэй дэлгэцийн тооцоолуур хийх төсөл юм. Би гэрийн сургуулийн програмчлалын ангийнхаа концепцийг гаргасан бөгөөд энэ төслийг бүтээх туршлага маш сонирхолтой байсан. Энэхүү тооцоолуур нь математикийн дөрвөн энгийн үйлдлийг хийх боломжтой (нэмэх, хасах, үржүүлэх, хуваах). Энэ нь мөн тэдгээрт хуваагдсан хариултуудын хувьд аравтын хоёр хүртэлх цэгийг харуулдаг. Шууд шумбаж үзье! Энэ төслийн хангамжийг доор жагсаав.

Хангамж

- Ардуино Уно

-2.4 TFT LCD бамбай (эндээс худалдаж авсан:

- USB A -аас B кабель (Arduino -г компьютерт холбох утас)

- Arduino IDE суулгасан компьютер

- Та бас MCUFRIEND_kbv болон Touchscreen гэсэн хоёр номын санг татаж авах хэрэгтэй болно. Эхнийх нь github дээрээс олж болно (холбоос: https://github.com/prenticedavid/MCUFRIEND_kbv) эсвэл та миний доор оруулсан номын сангийн zip файлыг ашиглаж болно. Хоёр дахь нь Arduino номын сангийн менежерт суулгаж өгдөг.

Алхам 1: Тоног төхөөрөмжийн холболт

Тоног төхөөрөмжийн холболт
Тоног төхөөрөмжийн холболт
Тоног төхөөрөмжийн холболт
Тоног төхөөрөмжийн холболт
Тоног төхөөрөмжийн холболт
Тоног төхөөрөмжийн холболт

Мэдрэгчтэй дэлгэцийн бамбайг Arduino Uno -той холбох нь энгийн бөгөөд хурдан юм. Таны хийх ёстой зүйл бол бамбай дээрх хамгийн доод тээглүүрийг Arduino дээрх хамгийн доод тээглүүрээр жагсааж, бамбайгаа гол руу түлхэхэд л болно. Дээд талын 5V зүү ба цахилгаан тал дээрх шошгогүй зүү нь бамбайгаас тээглүүртэй байх ёсгүй бөгөөд самбарын нөгөө талд SCL ба SDA гэсэн шошготой ижил параметрүүдийг ашиглана. Одоо бид код бичихэд бэлэн байна!

Алхам 2: Код: Дэлхийн тодорхойлолт ба тохиргоо

#оруулах

MCUFRIEND_kbv tft; // ямар ч байсан НҮБ-ын бамбайнд зориулагдсан

#оруулах

#тодорхойлох YP A3

#XM A2 -ийг тодорхойлно уу

#тодорхойлох YM 9

#XP 8 -ийг тодорхойлох

TouchScreen ts = TouchScreen (XP, YP, XM, YM, 300);

#даралтыг тодорхойлох

Энэ бол кодын эхлэл бөгөөд үүнд бид номын сан (MCUFRIEND_kbv & Touchscreen) оруулах, X ба Y зүү тодорхойлох, мэдрэгчтэй дэлгэцийн параметрүүдийг тохируулах, хэрэглэгчийн даралтыг бүртгэхэд Arduino -д шаардлагатай хамгийн бага даралтыг тодорхойлох болно.

int ID;

int user_selection;

float save_number = 0;

хөвөх хугацаа1;

int op_num;

хөвөх үр дүн;

int cursorLocX = 5;

int cursorLocY = 20;

Тохируулахын өмнө бид дэлхийн хэмжээний хувьсагчдыг тохируулах хэрэгтэй. ID нь мэдрэгчтэй дэлгэцийг ажиллуулахад тусалдаг. user_selection нь мэдрэгчтэй дэлгэцийг дарахад хэрэглэгчийн сонгосон түлхүүртэй тохирох тоог агуулдаг. save_number бол хэрэглэгчийн оруулгын дараа дэлгэц дээр хэвлэх хувьсагч юм (энэ талаар дэлгэрэнгүйг давталтаас үзнэ үү). Энэ бол хөвөгч тул аравтын бутархай тоонууд болон бүхэл тоонуудыг багтааж чаддаг. term1 нь операнд сонгосны дараа тэгшитгэлийн эхний тоог хадгалдаг хувьсагч юм. op_num нь операндийг тоо болгон хадгалдаг (нэмэх 1, хасах 2, үржүүлэх 3, хуваах 4). Үр дүн нь хэрэглэгч тэнцүү тэмдгийг дарсны дараа дэлгэц дээр хэвлэгдэх хувьсагч юм. Энэ нь бас хөвөгч юм. cursorLocX ба cursorLocY нь курсорыг олон удаа тохируулсан мэдрэгчтэй дэлгэцийн зураглалын цэгүүд юм (энэ нь дээд талын саарал бааранд байрладаг, өөрөөр хэлбэл үр дүнгийн талбар гэж нэрлэдэг).

хүчингүй тохиргоо () {

tft.reset ();

ID = tft.readID ();

tft.begin (ID);

tft.setRotation (0);

tft.fillScreen (TFT_DARKGREY);

квадратууд ();

тоо ();

tft.setTextSize (3);

tft.setTextColor (TFT_BLUE, TFT_DARKGREY);

}

Манай тохиргооны функц нь эхлээд мэдрэгчтэй дэлгэцийн хамгаалалтын эхлэлийг агуулдаг (1-3 мөр). Бамбайны чиглэлийг tft.setRotation () командыг ашиглан 0 босоо байрлалд тохируулна. Дэлгэцийг бүхэлд нь tft.fillScreen () командын тусламжтайгаар хар саарал өнгөөр бичсэн бөгөөд үүнийг бид дээд талд бичнэ (үр дүнгийн талбараас бусад). Квадратууд () ба тоонууд () функцууд нь тооны машины квадратуудыг зурж, квадратуудыг хар, цагаан өнгийн даамны самбараар будаж, тоонууд/операндуудыг цэнхэр өнгөөр бичнэ. Дараагийн алхамд бид тэдэнд хүрэх болно. Tft.setTextSize () тушаал нь үр дүнгийн талбарын текстийн хэмжээг дунд зэргийн фонт болгон 3 болгож тохируулдаг. Tft.setTextColor () тушаал нь хар талбар дээр бичигдсэн үр дүнгийн талбайн текстийн өнгийг цэнхэр болгож тохируулна.

Алхам 3: Код: Loop

void loop () {numberSelect ();

саатал (100);

хэрэв (user_selection == 16) {

;

} өөр {

if (user_selection <10) {

аварсан_ тоо = хадгалагдсан тоо * 10 + хэрэглэгчийн_сонголт;

tft.setCursor (cursorLocX, cursorLocY);

tft.print (хадгалагдсан_ тоо);

} өөр бол (user_selection> 10) {

сэлгэх (user_selection) {

тохиолдол 11:

op_num = 1;

tft.setCursor (cursorLocX, cursorLocY);

tft.print ("+");

term1 = хадгалагдсан_ тоо;

аварсан_ тоо = 0;

завсарлага;

тохиолдол 12:

op_num = 2;

tft.setCursor (cursorLocX, cursorLocY);

tft.print ("-");

term1 = хадгалагдсан_ тоо;

аварсан_ тоо = 0;

завсарлага;

тохиолдол 13:

op_num = 3;

tft.setCursor (cursorLocX, cursorLocY);

tft.print ("X");

term1 = хадгалагдсан_ тоо;

аварсан_ тоо = 0;

завсарлага;

тохиолдол 14:

op_num = 4;

tft.setCursor (cursorLocX, cursorLocY);

tft.print ("/");

term1 = хадгалагдсан_ тоо;

аварсан_ тоо = 0;

завсарлага;

тохиолдол 15:

аварсан_ тоо = 0;

хугацаа1 = 0;

op_num = 0;

tft.setCursor (cursorLocX, cursorLocY);

tft.print ("");

завсарлага;

}

tft.setCursor (cursorLocX, cursorLocY);

Энэ нь маш их зажилдаг тул би дээр дурдсан зүйлийг тайлбарлах болно. Бид мэдрэгчтэй дэлгэц дээрх квадрат бүрт дугаар оноодог numberSelect () функцийг дуудаж эхэлдэг. Хэрэглэгч эдгээр квадратуудын аль нэгийг дарахад функц нь user_selection хувьсагчийг квадратын тоогоор тохируулдаг. Эхний if if нь хэрэглэгчийн зөв сонголт хийгдсэн тохиолдолд л давталтаар дамжих болно. Хэрэв тийм бол дараагийн if мэдэгдэлд user_selection-д 10-аас бага тоо хадгалагдсан эсэхийг асууна (0-9 тоо). Хэрэв ингэвэл, save_number -ийг 10 -аар үржүүлж, user_selection дахь дугаарыг save_number дээр нэмэх бөгөөд энэ нь мэдрэгчтэй дэлгэц дээрх үр дүнгийн талбарт хэвлэгдэнэ. Хэрэв тийм биш бол, дараагийн if мэдэгдэл нь user_selection -д 10 -аас дээш тоо хадгалагдсан эсэхийг асууна (операндын тоонууд: +нь 12, -13, X -ийн хувьд 14, /тунгалаг дэлгэцийн талбайн хувьд 15)). Шилжүүлэгч функц нь тохиолдол бүрийг хариуцдаг (user_selection -ээр тодорхойлогддог). Op_num хувьсагчид сонгосон операнд харгалзах тоог өгнө (+1 -ийн хувьд 2, X -ийн хувьд 3, 4 -ийн хувьд 4). Хадгалагдсан_ тоо дахь утгыг 1 хувьсагч руу хадгалдаг бөгөөд ингэснээр хэмжигдэхүүний тоог хувьсагчийг тэгшитгэлийн хоёрдугаар хагаст ашиглах боломжтой болно. Операнд тэмдгийг дэлгэц дээр хэвлээд үр дүнгийн талбар дахь тоонуудыг арилгана. Цорын ганц үл хамаарах зүйл бол тооцооллын бүх хувьсагчдыг анхны байдалд нь оруулж, үр дүнгийн талбар дээрх бүх зүйлийг цэвэрлэдэг дэлгэцийн тодорхой дөрвөлжин юм.

} өөр {

сэлгэх (op_num) {

тохиолдол 1:

үр дүн = нэр томъёо1 + хадгалагдсан_тэмдэг;

tft.setCursor (cursorLocX, cursorLocY);

tft.print (давхар (үр дүн));

завсарлага;

тохиолдол 2:

үр дүн = нэр томъёо1 - хадгалагдсан_ тоо;

tft.setCursor (cursorLocX, cursorLocY);

tft.print (давхар (үр дүн));

завсарлага;

тохиолдол 3:

үр дүн = нэр томъёо1 * хадгалагдсан_ тоо;

tft.setCursor (cursorLocX, cursorLocY);

tft.print (давхар (үр дүн));

завсарлага;

тохиолдол 4:

үр дүн = хөвөх (нэр томъёо1) / хөвөх (хадгалагдсан_ тоо);

tft.setCursor (cursorLocX, cursorLocY);

tft.print (үр дүн);

завсарлага;

}

tft.setCursor (cursorLocX, cursorLocY);

аварсан_ тоо = үр дүн;

хугацаа1 = 0;

op_num = 0;

саатал (1000);

}

}

}

Циклийн сүүлчийн хэсэг нь хэрэглэгч тэнцүү тэмдгийг сонгох үйл явдлыг авч үзэх болно (user_selection == 10). Өөр нэг шилжүүлэгч функц нь математикийн дөрвөн функцээр ажилладаг (op_num -ээр тодорхойлогддог). Нэмэлт тохиолдол (1 -р тохиолдол) нь term1 ба save_number -ийг хамтад нь нэмж үр дүнг хувьсагч болгон хадгална. Үр дүнг үр дүнгийн талбарт давхар болгож хэвлэнэ. Хасах тохиолдол (2 -р тохиолдол) 1 -р дугаараас save_nubter -ийг хасч үр дүнг хувьсагч болгон хадгална. Үр дүнг үр дүнгийн талбарт давхар болгон хэвлэнэ. Үржүүлэх тохиолдол (3 -р тохиолдол) нь term1 -ийг save_number -ээр үржүүлж, үр дүнг хувьсагч болгон хадгална. Үр дүнг үр дүнгийн талбарт давхар болгон хэвлэнэ. Хуваах тохиолдол (4 -р тохиолдол) нь term1 -ийг save_number -ээр хувааж үр дүнг хувьсагч болгон хадгална. Үр дүнг үр дүнгийн талбарт хөвөгч хэлбэрээр хэвлэнэ (хуваах хариулт нь аравтын тоо байж болно). Дугаар, операнд эсвэл үр дүнг дэлгэц дээр хэвлэсний дараа курсорыг дахин тохируулж, хадгалсан_нөмрийг өмнөх үр дүнд тохируулж, term1 & op_num -ийг дахин тохируулна.

Хэд хэдэн тэмдэглэл: аравтын бутархай дөрвөлжин байхгүй тул хэрэглэгч тооны машинд аравтын тоог оруулж чадахгүй байна. Түүнчлэн, хэрэглэгч нэг удаад зөвхөн нэг тэгшитгэл хийх боломжтой. Та үр дүнг тооцоолж, үр дүнг нэмэх/хасах/үржүүлэх/хуваах боломжгүй. NumberSelect () функцэд хэрэглэгч өөр квадрат дарсан бол үр дүнг хэвлэсний дараа дэлгэцийг цэвэрлэх функц байдаг.

Алхам 4: Код: квадратуудын функц

хоосон квадратууд () {

// хар цагаан квадратууд мөр бүрт ээлжлэн солигддог бөгөөд эхний ба гурав дахь мөрүүд нь хоёр ба дөрөв дэх эгнээнээс эсрэг загвартай байдаг

tft.fillRect (0, 60, 60, 65, TFT_BLACK); // квадратуудын эхний эгнээ, хараас цагаан хүртэл tft.fillRect (60, 60, 60, 65, TFT_WHITE);

tft.fillRect (120, 60, 60, 65, TFT_BLACK);

tft.fillRect (180, 60, 60, 65, TFT_WHITE); // квадратуудын эхний эгнээ дуусна

tft.fillRect (0, 125, 60, 65, TFT_WHITE); // хоёр дахь эгнээний квадратууд эхэлж, цагаанаас хар хүртэл tft.fillRect (60, 125, 60, 65, TFT_BLACK);

tft.fillRect (120, 125, 60, 65, TFT_WHITE);

tft.fillRect (180, 125, 60, 65, TFT_BLACK); // квадратуудын хоёр дахь эгнээ дуусна

tft.fillRect (0, 190, 60, 65, TFT_BLACK); // гурав дахь эгнээний талбарууд, хараас цагаан хүртэл tft.fillRect (60, 190, 60, 65, TFT_WHITE);

tft.fillRect (120, 190, 60, 65, TFT_BLACK);

tft.fillRect (180, 190, 60, 65, TFT_WHITE); // квадратуудын гурав дахь эгнээ дуусна

tft.fillRect (0, 255, 60, 65, TFT_WHITE); // дөрөв дэх эгнээний квадратууд, цагаанаас хар хүртэл tft.fillRect (60, 255, 60, 65, TFT_BLACK);

tft.fillRect (120, 255, 60, 65, TFT_WHITE);

tft.fillRect (180, 255, 60, 65, TFT_BLACK); // квадратуудын дөрөв дэх эгнээ дуусна

}

Squares () функц нь маш энгийн. Tft.fillRect (X1, Y1, X2, Y2, TFT_COLOR) команд нь түүнд өгөгдсөн параметрүүдийн дагуу тэгш өнцөгт зурдаг бөгөөд эдгээр нь x ба y -ийн эхний байрлал, x ба y -ийн хоёр дахь байрлал, тэгш өнцөгтөөр дүүргэсэн өнгийг хэлнэ.. Энэ функц нь бүх дөрвөн эгнээний дөрвөлжин (техникийн тэгш өнцөгтүүд) -ийг зурж, квадрат бүрийг түүнд өгсөн өнгөөр дүүргэдэг.

Алхам 5: Код: Тоонуудын функц

хүчингүй тоо () {

tft.setTextColor (TFT_BLUE); // тоо/тэмдэгтийн өнгийг цэнхэр болгож тохируулна

tft.setTextSize (5); // тоо/тэмдэгтийн хэмжээг 5 болгож тохируулна

tft.setCursor (18, 75); // тоо/тэмдэгтийн эхний мөрөнд курсорыг тохируулна

tft.print ("7 8 9 /"); // тоо/тэмдэгтийн эхний мөрийг хэвлэнэ

tft.setCursor (18, 140); // тоо/тэмдэгтийн хоёр дахь мөрөнд курсорыг тохируулна

tft.print ("4 5 6 X"); // тоо/тэмдэгтийн хоёр дахь мөрийг хэвлэнэ

tft.setCursor (18, 205); // тоо/тэмдэгтийн гурав дахь мөрөнд курсорыг тохируулна

tft.print ("1 2 3 -"); // тоо/тэмдэгтийн гурав дахь мөрийг хэвлэнэ

tft.setCursor (18, 270); // тоо/тэмдэгтийн дөрөв дэх мөрөнд курсорыг тохируулна

tft.print ("C 0 = +"); // тоо/тэмдэгтийн дөрөв дэх мөрийг хэвлэнэ

}

Тоонууд () функц нь бас хялбар байдаг. Эхний хоёр мөр нь текстийн хэмжээг том болгож, өнгийг цэнхэр болгож тохируулна. Tft.setCursor () тушаал нь курсорыг тоонуудын бичиж эхлэх мөр бүрийн байрлалд тохируулна. Дараа нь tft.print () тушаал нь тоонууд/тэмдэгтүүдийг квадрат дээр хэвлэнэ.

Алхам 6: Код: Дугаар Функцийг сонгоно уу

хүчингүй тооSelect () {

TSPoint p = ts.getPoint ();

pinMode (XM, OUTPUT);

pinMode (YP, OUTPUT);

if (p.z> MINPRESSURE) {

p.x = газрын зураг (p.x, 250, 845, 0, 239);

p.y = газрын зураг (p.y, 245, 860, 0, 319);

хэрэв (үр дүн! = 0) {

үр дүн = 0;

аварсан_ тоо = 0;

tft.print ("ҮНЭ ЦЭВЭР");

саатал (500);

tft.setCursor (cursorLocX, cursorLocY);

tft.print ("");

tft.setCursor (cursorLocX, cursorLocY);

}

NumberSelect () функцийг эхлүүлэхийн тулд бид ts.getPoint () командыг ашиглан мэдрэгчтэй дэлгэцээс хэрэглэгчийн оролтыг асууна. Энэ өгөгдлийг цуглуулсны дараа бид хамгийн бага даралтыг хэтрүүлсэн эсэхийг шалгадаг (эсвэл өөрөөр хэлбэл хэрэглэгч мэдрэгчтэй дэлгэц дээр хаа нэг газар дарсан бол). Хэрэв тийм бол x ба y координатууд нь декартийн координатаас мэдрэгчтэй дэлгэцийн тусгай координат руу зураглагддаг. (0, 0) нь мэдрэгчтэй дэлгэцийн зүүн дээд булан бөгөөд x тэнхлэг нь хөндлөн, y тэнхлэг нь доошоо буудаг. Дараагийн хэсэг нь үр дүнд хадгалагдсан тоо байгаа эсэхийг шалгадаг. Хэрэв байгаа бол үр дүн болон save_number -ийг 0 болгож тохируулна. Үр дүнгийн талбар дээр "CLEAR VALUES" гэсэн мессежийг дарж, курсорыг анхны байрлал руу нь буцааж цэвэрлэнэ.

if (p.y 60) {// квадратуудын эхний эгнээ

хэрэв (p.x <60)

user_selection = 7;

өөр бол (p.x <120)

user_selection = 8;

өөр бол (p.x <180)

user_selection = 9;

өөр user_selection = 14;

} if if (p.y 125) {// хоёр дахь эгнээний квадратууд

хэрэв (p.x <60)

user_selection = 4;

өөр бол (p.x <120)

user_selection = 5;

өөр бол (p.x <180)

user_selection = 6;

өөр user_selection = 13;

} if if (p.y 190) {// гурав дахь эгнээний квадратууд

хэрэв (p.x <60)

user_selection = 1;

өөр бол (p.x <120)

user_selection = 2;

өөр бол (p.x <180)

user_selection = 3;

өөр user_selection = 12;

} if if (p.y> 255) {// дөрөв дэх эгнээний квадратууд

хэрэв (p.x <60)

user_selection = 15;

өөр бол (p.x <120)

user_selection = 0;

өөр бол (p.x <180)

user_selection = 10;

өөр user_selection = 11;

}

} өөр {

user_selection = 16; // user_selection -ийг 16 болгож тохируулсан (хувьсагчгүй)

}

}

Энэ нь аль товчлуурыг сонгосон болохыг тодорхойлдог хэсэг юм. Дөрвөлжингийн дээд эгнээнээс эхлээд доод эгнээний төгсгөл хүртэл Arduino дэлгэц яг хаана дарагдсан болохыг хайж олох болно. Дараа нь квадратад дугаар өгч, тухайн дугаарыг user_selection -д хадгална. 0-9 тоонууд нь тооны квадратуудтай, 11-15 тоо нь операнд болон цэвэр квадраттай, 10 тоо нь тэнцүү тэмдгийн квадраттай тохирч байна. Хэрэв квадрат сонгогдоогүй бол user_selection -ийг 16 болгож тохируулсан нь давталтыг дахин эхлүүлэх болно (давталтын функцийг үзнэ үү).

Алхам 7: Дууссан төслөө сайхан өнгөрүүлээрэй

Тэнд байна! Та одоо нэмэх, хасах, үржүүлэх, хуваах боломжтой мэдрэгчтэй дэлгэцийн тооцоолууртай боллоо. Энэ төсөл нь тооцоолуур ажилладаг гэж бодож байснаа бүхэлд нь өөрчилсөн. Би энэ төсөл дээр ажиллаж байхдаа хичээл дээр багшдаа "Дахиж хэзээ ч тооцоолуур руу ингэж харж болохгүй!" Гэж хэлж байснаа санаж байна. Таны санаа бодлыг дуурайх гэж оролдож буй компьютерын ард байх үед хэрэглэгчийн хувьд хялбар гэж боддог функцууд нь зарим талаараа хэцүү байдаг. Төсөл танд таалагдсан гэж найдаж байна, мөн тооцоолуур хэрхэн ажилладаг талаарх таны сэтгэхүй өөрчлөгдсөн гэж найдаж байна!

Таны тав тухтай байдлыг хангах үүднээс код энд байна. Энэ нь сэтгэгдлүүдээр дүүрэн байгаа тул хэрэв танд ямар нэгэн асуудал тулгарвал мөр бүр юу хийж байгааг харуулах ёстой.

Зөвлөмж болгож буй: