В современной жизни бывают ситуации, когда необходим какой-нибудь аппарат (устройство), способное обрабатывать "голоса" нескольких лиц. Подобные устройства также называют "машинами для голосования".
Ранее на нашем сайте мы уже рассматривали подобное устройство на микроконтроллерах AVR (обычное и на радиочастотных метках), в этой же статье мы рассмотрим создание подобного аппарата для голосования на плате Arduino Uno.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- ЖК дисплей 16х2 (купить на AliExpress).
- Кнопка (5 шт.).
- Макетная плата.
- Источник питания.
- Соединительные провода.
Работа схемы
В этом проекте мы будем использовать 4 кнопки для 4 различных кандидатов (голосующих человек). При желании можно увеличить количество голосующих, но в целях упрощения схемы и программы в этой статье мы ограничились только 4 кандидатами. Когда кто-нибудь из этих кандидатов будет нажимать соответствующую ему кнопку для голосования в программе соответствующая переменная будет увеличиваться на 1. После завершения процесса голосования необходимо будет нажать кнопку "result" чтобы увидеть результаты голосования. При нажатии этой кнопки плата Arduino Uno будет осуществлять подсчет голосов каждого из кандидатов и высвечивать результаты голосования на жидкокристаллическом (ЖК) дисплее.
Блок-схема работы устройства приведена на следующем рисунке.
Схема устройства достаточно проста и содержит плату Arduino, кнопки и ЖК дисплей. Плата Arduino управляет всем процессом: считывание нажатий кнопок, увеличение счетчиков голосов, подсчет результатов голосования и их отображение на ЖК дисплее. Кнопкам на схеме даны следующие наименования: BJP, INC, AAP и OTH. Пятая кнопка используется для отображения результатов голосования.
Как видно из представленной схемы 5 кнопок непосредственно подключены к контактам 15-19 (A1-A5) платы Arduino. Вторые концы кнопок замкнуты на землю.
Исходный код программы
В программе сначала необходимо подключить необходимые заголовочные файлы и инициализировать необходимые переменные для подсчета голосов кандидатов.
После этого необходимо в программе инициализировать ЖК дисплей и задать режим работы используемых контактов платы Arduino (на ввод или вывод данных).
Затем подключить внутренние подтягивающие резисторы для контактов кнопок.
Далее в программе мы будем использовать функцию digitalRead чтобы считывать значения контактов, к которым подключены кнопки.
А затем, после завершения процесса голосования, мы будем показывать на ЖК дисплее имена голосовавших кандидатов и соответствующее им количество голосов.
Далее представлен полный текст программы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
#include<LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); #define sw1 15 #define sw2 16 #define sw3 17 #define sw4 18 #define sw5 19 int vote1=0; int vote2=0; int vote3=0; int vote4=0; void setup() { pinMode(sw1, INPUT); pinMode(sw2,INPUT); pinMode(sw3,INPUT); pinMode(sw4,INPUT); pinMode(sw5,INPUT); lcd.begin(16, 2); lcd.print("Voting Machine"); lcd.setCursor(0,1); lcd.print("Circuit Digest"); delay(3000); digitalWrite(sw1, HIGH); digitalWrite(sw2, HIGH); digitalWrite(sw3, HIGH); digitalWrite(sw4, HIGH); digitalWrite(sw5, HIGH); lcd.clear(); lcd.setCursor(0,0); lcd.print("BJP"); lcd.setCursor(4,0); lcd.print("INC"); lcd.setCursor(8,0); lcd.print("AAP"); lcd.setCursor(12,0); lcd.print("OTH"); } void loop() { lcd.setCursor(0,0); lcd.print("BJP"); lcd.setCursor(1,1); lcd.print(vote1); lcd.setCursor(4,0); lcd.print("INC"); lcd.setCursor(5,1); lcd.print(vote2); lcd.setCursor(8,0); lcd.print("AAP"); lcd.setCursor(9,1); lcd.print(vote3); lcd.setCursor(12,0); lcd.print("OTH"); lcd.setCursor(13,1); lcd.print(vote4); if(digitalRead(sw1)==0) vote1++; while(digitalRead(sw1)==0); if(digitalRead(sw2)==0) vote2++; while(digitalRead(sw2)==0); if(digitalRead(sw3)==0) vote3++; while(digitalRead(sw3)==0); if(digitalRead(sw4)==0) vote4++; while(digitalRead(sw4)==0); if(digitalRead(sw5)==0) { int vote=vote1+vote2+vote3+vote4; if(vote) { if((vote1 > vote2 && vote1 > vote3 && vote1 > vote4)) { lcd.clear(); lcd.print("BJP Wins"); delay(2000); lcd.clear(); } else if((vote2 > vote1 && vote2 > vote3 && vote2 > vote4)) { lcd.clear(); lcd.print("INC Wins"); delay(2000); lcd.clear(); } else if((vote3 > vote1 && vote3 > vote2 && vote3 > vote4)) { lcd.clear(); lcd.print("AAP Wins"); delay(2000); lcd.clear(); } else if(vote4 > vote1 && vote4 > vote2 && vote4 > vote3) { lcd.setCursor(0,0); lcd.clear(); lcd.print("OTH Wins"); delay(2000); lcd.clear(); } else if(vote4 > vote1 && vote4 > vote2 && vote4 > vote3) { lcd.setCursor(0,0); lcd.clear(); lcd.print("OTH Wins"); delay(2000); lcd.clear(); } else { lcd.clear(); lcd.print(" Tie Up Or "); lcd.setCursor(0,1); lcd.print(" No Result "); delay(1000); lcd.clear(); } } else { lcd.clear(); lcd.print("No Voting...."); delay(1000); lcd.clear(); } vote1=0;vote2=0;vote3=0;vote4=0,vote=0; lcd.clear(); } } |