Elektrooniline hääletusmasin SD-kaardi mooduliga

Proovige Meie Instrumenti Probleemide Kõrvaldamiseks





Selles postituses ehitame Arduino ja SD-kaardi mooduli abil elektroonilise hääletusmasina jaoks vooluringi, kus valimisandmed salvestatakse SD-kaardile.

Kõrval



UUENDAMINE:

Seda vooluringi on täiendatud täiustatud versiooniks, kus tulemusi saab vaadata lisatud LCD-ekraanil. Üksikasjad leiate postituse alaosast

16x2 LCD displei kasutamine

16 x 2 suurune ekraan näitab hääletusmasina olekut ja kui hääle annate, kuvatakse kandidaadi nimi koos LED-i ja summeri aktiveerimisega.



Märkus. Kavandatav projekt on mõeldud ainult hariduslikuks otstarbeks ega ole mõeldud tegelikuks valimisteks.

Elektroonilisi hääletusmasinaid rakendatakse valimisprotsessi kiirendamiseks ja kasutuspaberi vähendamiseks ning need põhjused vähendavad kaudselt valimistega seotud kulutusi.

Elektroonilised hääletusseadmed pakuvad enne traditsioonilist paberhääletusmeetodit kõrgemat turvalisust.

Nende mass-hääletamiskastide transportimine on riskantne kui kompaktsete masinate transportimine, kus sõidukite püüdmise pettused ei saa muuta andmeid EVM-is (elektrooniline hääletusseade), isegi kui see on võimeline sõidukit jäädvustama.

Mõni riik tunneb India valmistatud EVMide vastu huvi kõrgema turvalisuse tõttu. Sellised riigid nagu USA peavad valimistel endiselt häkkimise ja muutmise suurema riski tõttu oma valimistel traditsioonilist paberhääletuse meetodit.

Niisiis, mis tegi indiaanlasest EVM-id turvalisemaks? Noh, USA tegi hääletusmasinate laadimiseks Windowsi operatsioonisüsteemi ja võrgu serveritega, et häälte lugemine oleks lihtne. See avab häkkeritele palju lünki valimisandmete muutmiseks.

India valmistatud EVM-id on eraldiseisvad seadmed, mis pole ühendatud Interneti ega serveritega. Häälte lugemiseks viiakse masinad loenduskabiini, kus tulemused deklareeritakse ja keskmist meest pole.

Kavandatav projekt on kavandatud India EVM-ide sarnase funktsionaalsusega, kuid tehtud on palju muudatusi.

Nüüd liigume projekti ehitusdetailide juurde.

Vooluringi paigutus:

EVM-i paigutusskeem

Kavandatav EVM-ringkond mahutab ainult 6 kandidaati. Juhtnupp on sarnaselt reaalsete EVM-ide juhtplokile. Pärast seda, kui inimene on oma hääle andnud, keelatakse hääletamisnupud.

Hääletamisnupud lubatakse uuesti alles pärast juhtnupu vajutamist. Juhtnupp asetatakse vastutava inimese lähedale, kes valimiskabiini kontrollib.

Pärast seda, kui inimene on hääletanud, tunnustatakse teda LED-i ja summeri aktiveerimisega. Isik saab kinnitada ka hääle, kelle ta ekraanil andis, see näitab paariks sekundiks kandidaadi nime või erakonna nime. Päris EVM-ides seda funktsiooni veel pole.

Skemaatiline diagramm:

Arduino kuvab ühenduvust:




Arduino EVM-ahel ühenduvuse kuvamiseks

Kontuur on jagatud kaheks osaks, et vältida segiajamist projekti dubleerimise ajal. Ülaltoodud vooluahel kirjeldab juhtmeid LCD-ekraani ja arduino vahel. Optimaalse kontrastsuse saamiseks reguleerige muutuvat takistit.

Elektrooniline valimismasina vooluring SD-kaardi mooduli ja Arduinoga

Siin on ülejäänud vooluahel, mis koosneb 9 V akust, lülitist, seitsmest nupust, LED-st, summerist ja veelgi olulisemast SD-kaardimoodulist.

SD-kaart salvestab andmed kohe pärast hääle andmist. Kui valimised on läbi, sisestatakse SD-kaart arvutisse, et deklareerida häälte arv ja tulemus.

Kavandatud disain võib registreerida kuni 4 294 967 295 (see on rohkem kui 4 miljardit) häält ühe kandidaadi kohta ja 25 769 803 770 (üle 25 miljardi, mis on rohkem kui kolm korda rohkem kui praegune maailma elanikkond) hääli masina kohta ja endiselt on üle 99,9% SD-kaart tühi .

See on palju tõhusam kui tõelised EVM-id, mis suudavad registreerida 3840 häält masina kohta.

Programm:

//--------Program Developed by R.Girish------//
#include
#include
#include
LiquidCrystal lcd(7, 6, 5, 4, 3, 2)
//----------------------------------------------------//
String Party1 = 'MODI'
String Party2 = 'TRUMP'
String Party3 = 'PUTIN' // Place the Candidate Names Here.
String Party4 = 'Abdul Kalam'
String Party5 = 'Girish'
String Party6 = 'Swagatam'
//-----------------------------------------------------//
const int btn_1 = A0
const int btn_2 = A1
const int btn_3 = A2
const int btn_4 = A3
const int btn_5 = A4
const int btn_6 = A5
const int ctrl_btn = 8
const int cs = 10
const int LED = 9
boolean ballot = false
File Party1File
File Party2File
File Party3File
File Party4File
File Party5File
File Party6File
unsigned long int Party1_Count = 0
unsigned long int Party2_Count = 0
unsigned long int Party3_Count = 0
unsigned long int Party4_Count = 0
unsigned long int Party5_Count = 0
unsigned long int Party6_Count = 0
void setup()
{
pinMode(btn_1,INPUT)
pinMode(btn_2,INPUT)
pinMode(btn_3,INPUT)
pinMode(btn_4,INPUT)
pinMode(btn_5,INPUT)
pinMode(btn_6,INPUT)
pinMode(ctrl_btn,INPUT)
pinMode(cs,OUTPUT)
pinMode(LED,OUTPUT)
digitalWrite(btn_1,HIGH)
digitalWrite(btn_2,HIGH)
digitalWrite(btn_3,HIGH)
digitalWrite(btn_4,HIGH)
digitalWrite(btn_5,HIGH)
digitalWrite(btn_6,HIGH)
digitalWrite(ctrl_btn,HIGH)
lcd.begin(16,2)
lcd.clear()
lcd.setCursor(0,0)
lcd.print(' Electronic')
lcd.setCursor(0,1)
lcd.print(' Voting Machine')
delay(2000)
if (!SD.begin(cs))
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('SD Card failed')
lcd.setCursor(0,1)
lcd.print('or not present')
while(true)
{
digitalWrite(LED, HIGH)
delay(100)
digitalWrite(LED, LOW)
delay(100)
}
}
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Machine Status:')
lcd.setCursor(0,1)
lcd.print('Initialized !!!')
digitalWrite(LED,HIGH)
delay(2000)
digitalWrite(LED,LOW)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Machine is ready')
lcd.setCursor(0,1)
lcd.print('----------------')
while(!ballot)
{
if(digitalRead(ctrl_btn) == LOW)
{
ballot = true
for(int y = 0 y <3 y++)
{
digitalWrite(LED, HIGH)
delay(100)
digitalWrite(LED, LOW)
delay(100)
}
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Cast Your Vote')
lcd.setCursor(0,1)
lcd.print('----------------')
}
}
}
void loop()
{
while(ballot)
{
if(digitalRead(btn_1) == LOW)
{
Party_1()
}
if(digitalRead(btn_2) == LOW)
{
Party_2()
}
if(digitalRead(btn_3) == LOW)
{
Party_3()
}
if(digitalRead(btn_4) == LOW)
{
Party_4()
}
if(digitalRead(btn_5) == LOW)
{
Party_5()
}
if(digitalRead(btn_6) == LOW)
{
Party_6()
}
}
}
void Party_1()
{
ballot = false
SD.remove('Party1.txt')
Party1File = SD.open('Party1.txt', FILE_WRITE)
if(Party1File)
{
Party1_Count = Party1_Count + 1
lcd.clear()
lcd.setCursor(0,0)
lcd.print('You voted for:')
lcd.setCursor(0,1)
lcd.print(Party1)
Party1File.println('------------------------------------')
Party1File.print('Result for: ')
Party1File.println(Party1)
Party1File.print('------------------------------------')
Party1File.println(' ')
Party1File.print('Number of Votes = ')
Party1File.print(Party1_Count)
Party1File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Party_2()
{
ballot = false
SD.remove('Party2.txt')
Party2File = SD.open('Party2.txt', FILE_WRITE)
if(Party2File)
{
Party2_Count = Party2_Count + 1
lcd.clear()
lcd.setCursor(0,0)
lcd.print('You voted for:')
lcd.setCursor(0,1)
lcd.print(Party2)
Party2File.println('------------------------------------')
Party2File.print('Result for: ')
Party2File.println(Party2)
Party2File.print('------------------------------------')
Party2File.println(' ')
Party2File.print('Number of Votes = ')
Party2File.print(Party2_Count)
Party2File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Party_3()
{
ballot = false
SD.remove('Party3.txt')
Party3File = SD.open('Party3.txt', FILE_WRITE)
if(Party3File)
{
Party3_Count = Party3_Count + 1
lcd.clear()
lcd.setCursor(0,0)
lcd.print('You voted for:')
lcd.setCursor(0,1)
lcd.print(Party3)
Party3File.println('------------------------------------')
Party3File.print('Result for: ')
Party3File.println(Party3)
Party3File.print('------------------------------------')
Party3File.println(' ')
Party3File.print('Number of Votes = ')
Party3File.print(Party3_Count)
Party3File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Party_4()
{
ballot = false
SD.remove('Party4.txt')
Party4File = SD.open('Party4.txt', FILE_WRITE)
if(Party4File)
{
Party4_Count = Party4_Count + 1
lcd.clear()
lcd.setCursor(0,0)
lcd.print('You voted for:')
lcd.setCursor(0,1)
lcd.print(Party4)
Party4File.println('------------------------------------')
Party4File.print('Result for: ')
Party4File.println(Party4)
Party4File.print('------------------------------------')
Party4File.println(' ')
Party4File.print('Number of Votes = ')
Party4File.print(Party4_Count)
Party4File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Party_5()
{
ballot = false
SD.remove('Party5.txt')
Party5File = SD.open('Party5.txt', FILE_WRITE)
if(Party5File)
{
Party5_Count = Party5_Count + 1
lcd.clear()
lcd.setCursor(0,0)
lcd.print('You voted for:')
lcd.setCursor(0,1)
lcd.print(Party5)
Party5File.println('------------------------------------')
Party5File.print('Result for: ')
Party5File.println(Party5)
Party5File.print('------------------------------------')
Party5File.println(' ')
Party5File.print('Number of Votes = ')
Party5File.print(Party5_Count)
Party5File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Party_6()
{
ballot = false
SD.remove('Party6.txt')
Party6File = SD.open('Party6.txt', FILE_WRITE)
if(Party6File)
{
Party6_Count = Party6_Count + 1
lcd.clear()
lcd.setCursor(0,0)
lcd.print('You voted for:')
lcd.setCursor(0,1)
lcd.print(Party6)
Party6File.println('------------------------------------')
Party6File.print('Result for: ')
Party6File.println(Party6)
Party6File.print('------------------------------------')
Party6File.println(' ')
Party6File.print('Number of Votes = ')
Party6File.print(Party6_Count)
Party6File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Error()
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Unable to log')
lcd.setCursor(0,1)
lcd.print('data to SD card')
for(int x = 0 x <100 x++)
{
digitalWrite(LED, HIGH)
delay(250)
digitalWrite(LED, LOW)
delay(250)
}
}
void Tone()
{
digitalWrite(LED, HIGH)
delay(1000)
digitalWrite(LED, LOW)
delay(1500)
lcd.clear()
lcd.setCursor(0,0)
lcd.print(' Thanks for')
lcd.setCursor(0,1)
lcd.print(' Voting!!!')
delay(1500)
lcd.clear()
lcd.setCursor(0,0)
lcd.print(' Not Ready')
lcd.setCursor(0,1)
lcd.print('----------------')
}
void ctrl()
{
while(!ballot)
{
if(digitalRead(ctrl_btn) == LOW)
{
ballot = true
for(int y = 0 y <3 y++)
{
digitalWrite(LED, HIGH)
delay(100)
digitalWrite(LED, LOW)
delay(100)
}
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Cast Your Vote')
lcd.setCursor(0,1)
lcd.print('----------------')
}
}
}
//--------Program Developed by R.Girish------//

……… See on tohutu programm.

Kuidas seda EVM-ahelat kasutada:

• Lülitage masin sisse, see kinnitab piiksuga, mis näitab, et kõik on korras. Kui masin pole korras, annab see kiiresti signaali ja kuvab LCD-ekraanil veateate.
• Vajutage juhtnuppu, nüüd on see valmis ühe hääle salvestamiseks.
• Kui hääl on salvestatud, aktiveerub see LED ja piiksub sekundi jooksul ning kuvatakse paar sekundit selle kandidaadi nimi, kellele hääletasite.
• Järgmise hääletuse salvestamiseks tuleb juhtnuppu uuesti vajutada. Iga kord, kui juhtnuppu vajutatakse, annab helisignaal 3 lühikest piiksu.
• Seda tuleb jätkata seni, kuni viimane valija oma hääle annab. Pärast seda, kui viimane valija on hääle andnud, pole vaja juhtnuppu vajutada.
• Pärast viimase hääle andmist tuleb masin kohe välja lülitada, kasutades väljalülitit ja SD-kaart eemaldada. Nii et andmeid ei muudeta.
• Ühendage SD-kaart arvutiga ja näete 6 tekstifaili, nagu allpool näidatud:

SD-kaardi tulemus salvestatakse arvutisse

Faili avamisel kuvatakse kandidaadi nimi ja häälte arv, nagu allpool illustreeritud:

Autori prototüüp:

SD-kaardi mooduli illustratsioon:

Märkus 1: Mis tahes voolukatkestuse korral nullitakse häälte arv nulli.
Märkus 2: Palun muutke programmis kandidaadi nime.
String Party1 = 'MODI'
String Party2 = 'TRUMP'
String Party3 = 'PUTIN' // Pange kandidaatide nimed siia.
String Party4 = 'Abdul Kalam'
String Party5 = 'Girish'
String Party6 = 'Swagatam'
Märkus 3: Kui konkreetsele parteile / kandidaadile hääletust ei anta, ei kuvata tekstifaili SD-kaardil.

Ülaltoodud kujunduse täiendamine

Selle konkreetse elektroonilise hääletusmasina projekti täiendatud versiooni soovis Sumesh chourasia, kes on selle veebisaidi innukas lugeja.

See projekt on täiustus eespool selgitatud elektroonilise hääletusseadme ees. Eespool nimetatud EVM-i (elektrooniline hääletusmasin) peamine puudus oli see, et tulemust ei saanud vaadata 16 x 2 LCD-ekraanil, kuid seda saab vaadata ainult arvutis.

Selles projektis laseme mainitud tagasilöögi maha ja äsja pakutud kujundusega saame kuue kandidaadi tulemusi koheselt LCD-ekraanil vaadata.

Raskused, millega kokku puutusime:

Kõiki eelmise EVM-i projekti (Arduino) sisend- / väljundnõelasid kasutasid 16 x 2 ekraan, SD-kaardimoodul, hääletamisnupud, juhtnupp ja summer. Uue nupu ühendamiseks pole enam ruumi.

Pärast mõningaid uuringuid leidsime, et mis tahes I / O-tihvte saab igal ajal muuta väljundiks sisendiks ja vastupidi.

Pärast hoolikat vaatlust valisime salvestamise nupuks LED / summeri tihvti. Nüüd on see tihvt programmeeritud nii sisendina (salvestusnupp) kui ka väljundina (summer).

Pange tähele, et salvestus- / summerihelin määratakse mis tahes olekus hetkel, st väljund või sisend.

Vooluring:

LCD-ühendus Arduino-ga:

Lihtsalt ühendage vastavalt varasematele skeemidele ja kasutage 10K potentsiomeetrit vaatamise kontrastsuse reguleerimiseks, ülejäänud vooluahel on enesestmõistetav.

S1 kuni S6 on hääletamisnupud, mille kaudu valijad sisestavad oma valiku. Salvestus- ja juhtnupp tuleb hoida valimisseadmest eemal (vastutava küsitluskabiini kontrolli all).

Uus programm:
//--------Program Developed by R.Girish------//
#include
#include
#include
LiquidCrystal lcd(7, 6, 5, 4, 3, 2)
//----------------------------------------------------//
String Party1 = 'MODI'
String Party2 = 'TRUMP'
String Party3 = 'PUTIN' // Place the Candidate Names Here.
String Party4 = 'Abdul Kalam'
String Party5 = 'Girish'
String Party6 = 'Swagatam'
//-----------------------------------------------------//
const int btn_1 = A0
const int btn_2 = A1
const int btn_3 = A2
const int btn_4 = A3
const int btn_5 = A4
const int btn_6 = A5
const int ctrl_btn = 8
const int cs = 10
int LED = 9
int saveTest = 0
int A = 0
int B = 0
int C = 0
int D = 0
int E = 0
int F = 0
boolean ballot = false
File Party1File
File Party2File
File Party3File
File Party4File
File Party5File
File Party6File
File save
unsigned long int Party1_Count = 0
unsigned long int Party2_Count = 0
unsigned long int Party3_Count = 0
unsigned long int Party4_Count = 0
unsigned long int Party5_Count = 0
unsigned long int Party6_Count = 0
void setup()
{
pinMode(btn_1, INPUT)
pinMode(btn_2, INPUT)
pinMode(btn_3, INPUT)
pinMode(btn_4, INPUT)
pinMode(btn_5, INPUT)
pinMode(btn_6, INPUT)
pinMode(ctrl_btn, INPUT)
pinMode(cs, OUTPUT)
pinMode(LED, OUTPUT)
digitalWrite(btn_1, HIGH)
digitalWrite(btn_2, HIGH)
digitalWrite(btn_3, HIGH)
digitalWrite(btn_4, HIGH)
digitalWrite(btn_5, HIGH)
digitalWrite(btn_6, HIGH)
digitalWrite(ctrl_btn, HIGH)
lcd.begin(16, 2)
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F(' Electronic'))
lcd.setCursor(0, 1)
lcd.print(F(' Voting Machine'))
delay(2000)
if (!SD.begin(cs))
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('SD Card failed'))
lcd.setCursor(0, 1)
lcd.print('or not present')
while (true)
{
digitalWrite(LED, HIGH)
delay(100)
digitalWrite(LED, LOW)
delay(100)
}
}
if (SD.exists('save.txt'))
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('Opening Results'))
lcd.setCursor(0, 1)
lcd.print(F('----------------'))
delay(1500)
DisplayResult()
}
else
{
Party1File = SD.open('Party1.txt', FILE_WRITE)
if (Party1File)
{
Party1File.println('--------Null-------')
Party1File.close()
}
else
{
Error()
}
Party2File = SD.open('Party2.txt', FILE_WRITE)
if (Party2File)
{
Party2File.println('--------Null-------')
Party2File.close()
}
else
{
Error()
}
Party3File = SD.open('Party3.txt', FILE_WRITE)
if (Party3File)
{
Party3File.println('--------Null-------')
Party3File.close()
}
else
{
Error()
}
Party4File = SD.open('Party4.txt', FILE_WRITE)
if (Party4File)
{
Party4File.println('--------Null-------')
Party4File.close()
}
else
{
Error()
}
Party5File = SD.open('Party5.txt', FILE_WRITE)
if (Party5File)
{
Party5File.println('--------Null-------')
Party5File.close()
}
else
{
Error()
}
Party6File = SD.open('Party6.txt', FILE_WRITE)
if (Party6File)
{
Party6File.println('--------Null-------')
Party6File.close()
}
else
{
Error()
}
}
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('Machine Status:'))
lcd.setCursor(0, 1)
lcd.print(F('Initialized !!!'))
digitalWrite(LED, HIGH)
delay(2000)
digitalWrite(LED, LOW)
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('Machine is ready'))
lcd.setCursor(0, 1)
lcd.print(F('----------------'))
while (!ballot)
{
if (digitalRead(ctrl_btn) == LOW)
{
ballot = true
for (int y = 0 y <3 y++)
{
digitalWrite(LED, HIGH)
delay(100)
digitalWrite(LED, LOW)
delay(100)
}
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('Cast Your Vote'))
lcd.setCursor(0, 1)
lcd.print(F('----------------'))
}
}
}
void loop()
{
pinMode(LED, INPUT)
if (digitalRead(LED) == HIGH)
{
save = SD.open('save.txt', FILE_WRITE)
if (save)
{
save.println('Results File')
save.close()
}
else
{
Error()
}
}
if (SD.exists('save.txt'))
{
while (true)
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('Results Saved'))
lcd.setCursor(0, 1)
lcd.print(F('Successfully.'))
delay(1500)
lcd.setCursor(0, 0)
lcd.print(F('Disconnect the'))
lcd.setCursor(0, 1)
lcd.print(F('Power Supply'))
delay(1500)
}
}
if (digitalRead(btn_1) == LOW)
{
Party_1()
}
if (digitalRead(btn_2) == LOW)
{
Party_2()
}
if (digitalRead(btn_3) == LOW)
{
Party_3()
}
if (digitalRead(btn_4) == LOW)
{
Party_4()
}
if (digitalRead(btn_5) == LOW)
{
Party_5()
}
if (digitalRead(btn_6) == LOW)
{
Party_6()
}
}
void Party_1()
{
ballot = false
SD.remove('Party1.txt')
Party1File = SD.open('Party1.txt', FILE_WRITE)
if (Party1File)
{
Party1_Count = Party1_Count + 1
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('You voted for:'))
lcd.setCursor(0, 1)
lcd.print(Party1)
Party1File.print(Party1_Count)
Party1File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Party_2()
{
ballot = false
SD.remove('Party2.txt')
Party2File = SD.open('Party2.txt', FILE_WRITE)
if (Party2File)
{
Party2_Count = Party2_Count + 1
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('You voted for:'))
lcd.setCursor(0, 1)
lcd.print(Party2)
Party2File.print(Party2_Count)
Party2File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Party_3()
{
ballot = false
SD.remove('Party3.txt')
Party3File = SD.open('Party3.txt', FILE_WRITE)
if (Party3File)
{
Party3_Count = Party3_Count + 1
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('You voted for:'))
lcd.setCursor(0, 1)
lcd.print(Party3)
Party3File.print(Party3_Count)
Party3File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Party_4()
{
ballot = false
SD.remove('Party4.txt')
Party4File = SD.open('Party4.txt', FILE_WRITE)
if (Party4File)
{
Party4_Count = Party4_Count + 1
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('You voted for:'))
lcd.setCursor(0, 1)
lcd.print(Party4)
Party4File.print(Party4_Count)
Party4File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Party_5()
{
ballot = false
SD.remove('Party5.txt')
Party5File = SD.open('Party5.txt', FILE_WRITE)
if (Party5File)
{
Party5_Count = Party5_Count + 1
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('You voted for:'))
lcd.setCursor(0, 1)
lcd.print(Party5)
Party5File.print(Party5_Count)
Party5File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Party_6()
{
ballot = false
SD.remove('Party6.txt')
Party6File = SD.open('Party6.txt', FILE_WRITE)
if (Party6File)
{
Party6_Count = Party6_Count + 1
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('You voted for:'))
lcd.setCursor(0, 1)
lcd.print(Party6)
Party6File.print(Party6_Count)
Party6File.close()
Tone()
ctrl()
}
else
{
Error()
}
}
void Error()
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('Unable to log'))
lcd.setCursor(0, 1)
lcd.print(F('data to SD card'))
for (int x = 0 x <100 x++)
{
digitalWrite(LED, HIGH)
delay(250)
digitalWrite(LED, LOW)
delay(250)
}
}
void Tone()
{
pinMode(LED, OUTPUT)
digitalWrite(LED, HIGH)
delay(1000)
digitalWrite(LED, LOW)
delay(1500)
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F(' Thanks for'))
lcd.setCursor(0, 1)
lcd.print(F(' Voting!!!'))
delay(1500)
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F(' Not Ready'))
lcd.setCursor(0, 1)
lcd.print('----------------')
}
void ctrl()
{
while (!ballot)
{
pinMode(LED, INPUT)
if (digitalRead(LED) == HIGH)
{
save = SD.open('save.txt', FILE_WRITE)
if (save)
{
save.println('Results File')
save.close()
}
else
{
Error()
}
}
if (SD.exists('save.txt'))
{
while (true)
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('Results Saved'))
lcd.setCursor(0, 1)
lcd.print(F('Successfully.'))
delay(1500)
lcd.setCursor(0, 0)
lcd.print(F('Disconnect the'))
lcd.setCursor(0, 1)
lcd.print(F('Power Supply'))
delay(1500)
}
}
if (digitalRead(ctrl_btn) == LOW)
{
ballot = true
for (int y = 0 y <3 y++)
{
digitalWrite(LED, HIGH)
delay(100)
digitalWrite(LED, LOW)
delay(100)
}
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(F('Cast Your Vote'))
lcd.setCursor(0, 1)
lcd.print(F('----------------'))
}
}
}
void DisplayResult()
{
while (true)
{
Party1File = SD.open('party1.txt')
if(Party1File)
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(Party1)
while (Party1File.available())
{
lcd.setCursor(A, 1)
lcd.write(Party1File.read())
A = A + 1
}
}
A = 0
delay(2000)
Party1File.close()
Party2File = SD.open('party2.txt')
if(Party2File)
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(Party2)
while (Party2File.available())
{
lcd.setCursor(B, 1)
lcd.write(Party2File.read())
B = B + 1
}
}
B = 0
delay(2000)
Party2File.close()
Party3File = SD.open('party3.txt')
if(Party3File)
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(Party3)
while (Party3File.available())
{
lcd.setCursor(C, 1)
lcd.write(Party3File.read())
C = C + 1
}
}
C = 0
delay(2000)
Party3File.close()
Party4File = SD.open('party4.txt')
if(Party4File)
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(Party4)
while (Party4File.available())
{
lcd.setCursor(D, 1)
lcd.write(Party4File.read())
D = D + 1
}
}
D = 0
delay(2000)
Party4File.close()
Party5File = SD.open('party5.txt')
if(Party5File)
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(Party5)
while (Party5File.available())
{
lcd.setCursor(E, 1)
lcd.write(Party5File.read())
E = E + 1
}
}
E = 0
delay(2000)
Party5File.close()
Party6File = SD.open('party6.txt')
if(Party6File)
{
lcd.clear()
lcd.setCursor(0, 0)
lcd.print(Party6)
while (Party6File.available())
{
lcd.setCursor(F, 1)
lcd.write(Party6File.read())
F = F + 1
}
}
F = 0
delay(2000)
Party6File.close()
}
}
//--------Program Developed by R.Girish------//

Kuidas seda elektroonilist hääletusmasinat kasutada:

  • Kui riistvara on lõpule viidud, laadige kood üles oma soovikandidaatide nimedega.
  • Lülitage masin sisse, kui kõik on korras, annab see pika piiksu.
  • Nüüd vajutage juhtnuppu ja nüüd saab see salvestada ühe hääle.
  • Pärast iga häält tuleb juhtnuppu üks kord vajutada.
  • Kui viimane hääl on antud, vajutage salvestamisnuppu, see salvestab tulemused ja palub teil toide lahti ühendada (et saaksite tulemusi privaatselt vaadata).
  • Ühendage toide uuesti ja see hakkab tulemusi automaatselt näitama. Kui kandidaat ei saanud häält, kuvatakse see „null”.
  • Järgmiste valimiste läbiviimiseks peate SD-kaardi vormindama / kustutama kõik selle EVM-i loodud failid.

Pange tähele, et see EVM vajab katkematut voolu, mis tahes katkestuse korral loetakse häälte arv nulli.

Palun kirjutage kandidaatide nimed koodi (maksimaalselt 16 tähte):

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

String Party1 = 'MODI'

String Party2 = 'TRUMP'

String Party3 = 'PUTIN' // Pange kandidaatide nimed siia.

String Party4 = 'Abdul Kalam'

String Party5 = 'Girish'

String Party6 = 'Swagatam'

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

Sellega projekt lõpeb. Kui teil on selle projektiga seoses küsimusi, võite seda kommentaaride osas väljendada, võite saada kiire vastuse.




Paar: Autotanki veeandurite ahel Järgmine: 3 tahkis-ühekomponendilist 220V reguleeritavat toiteallikat