Celem projektu było zaprojektowanie prostego kalkulatora obejmującego trzy podstawowe działania (dodawanie, odejmowanie, mnożenie) przy użyciu mikrokontrolera ESP 8266. Ideą zadania było storzenie urządzenia, które może zainteresować młode osoby swoją funkcjonalnością i zachęcić ich do nauki podstawowych działań.
[przykładowe - prosimy o edycję]
1. Płytka ESP 8266
2. Wyświetlacz OLED niebieski graficzny 0,96'' 128x64px I2C
3. Potencjometr
4.Pięć przycisków
5. Kabel micro-USB
6. Przewody męsko-męskie (ok. 20)
Komputer z oprogramowaniem Thonny
Projekt ma dosyć proste założenie. Ma on pokazać, że takie proste i oczywiste urządzenie jak kalkulator też może być ciekawe. Ma to skłonić młode osoby do refleksji nad wszechobecnością elektroniki w dzisiejszym życiu jak i zachęcić je do nauki matematyki.
Na ekranie wyświetlane są liczby, użytkownik porusza się między nimi za pomocą czterech przycisków kierunkowych. Jeden przycisk służy do wybierania danej liczby. Potencjometr służy natomiast do określania trybu: dodawanie, mnożenie, dzielenie. Stosowanie wielu przycisków umożliwia większą interakcją z układem.
Ostatecznie chodzi jednak o zainteresowanie uczniów szkół podstawowych rozwiązaniami elektronicznymi, projekt może jendnak służyć jako użyteczna zabawka.
from machine import Pin, I2C, ADC
import time
import ssd1306
import random
adc=ADC(0)
i2c = I2C(scl=Pin(5), sda=Pin(4))
oled = ssd1306.SSD1306_I2C(128,64,i2c)
oled.fill(0)
oled.fill(0)
l=machine.Pin(13,machine.Pin.IN,machine.Pin.PULL_UP)
r=machine.Pin(12,machine.Pin.IN,machine.Pin.PULL_UP)
u=machine.Pin(2,machine.Pin.IN,machine.Pin.PULL_UP)
d=machine.Pin(0,machine.Pin.IN,machine.Pin.PULL_UP)
c=machine.Pin(14,machine.Pin.IN,machine.Pin.PULL_UP)
q=machine.Pin(15,machine.Pin.IN,machine.Pin.PULL_UP)
oled.text('1', 2, 2, 1)
oled.text('2', 62, 2, 1)
oled.text('3', 122, 2, 1)
oled.text('4', 2, 17, 1)
oled.text('5', 62, 17, 1)
oled.text('6', 122, 17, 1)
oled.text('7', 2, 32, 1)
oled.text('8', 62, 32, 1)
oled.text('9', 122, 32, 1)
oled.text('0', 62, 47, 1)
oled.fill_rect(2, 47, 8, 8, 1)
oled.show()
h=60
v=15
oled.rect(60, 15, 12, 12, 1)
oled.show()
x=60
y=15
val=0
dzialanie=0
##################################################################
while True:
print(l.value(),r.value(),u.value(),d.value(),c.value(),val,x,y)
if adc.read()<250:
oled.fill_rect(25, 43, 20, 10, 0)
oled.text('do', 25, 43, 1)
oled.show()
dzialanie=1
if adc.read()>250 and adc.read()<500:
oled.fill_rect(25, 43, 20, 10, 0)
oled.text('od', 25, 43, 1)
oled.show()
dzialanie=2
if adc.read()>500 and adc.read()<750:
oled.fill_rect(25, 43, 20, 10, 0)
oled.text('mn', 25, 43, 1)
oled.show()
dzialanie=3
##################################################################
if r.value()==0:
oled.rect(x, y, 12, 12, 0)
oled.rect(x+h,y,12,12,1)
oled.show()
x=x+h
if l.value()==0:
oled.rect(x, y, 12, 12, 0)
oled.rect(x-h,y,12,12,1)
oled.show()
x=x-h
if u.value()==0:
oled.rect(x, y, 12, 12, 0)
oled.rect(x,y+v,12,12,1)
oled.show()
y=y+v
if d.value()==0:
oled.rect(x, y, 12, 12, 0)
oled.rect(x,y-v,12,12,1)
oled.show()
y=y-v
time.sleep(0.3)
##################################################################
if dzialanie==1:
#oled.fill(0)
oled.text('1', 2, 2, 1)
oled.text('2', 62, 2, 1)
oled.text('3', 122, 2, 1)
oled.text('4', 2, 17, 1)
oled.text('5', 62, 17, 1)
oled.text('6', 122, 17, 1)
oled.text('7', 2, 32, 1)
oled.text('8', 62, 32, 1)
oled.text('9', 122, 32, 1)
oled.text('0', 62, 47, 1)
oled.fill_rect(2, 47, 8, 8, 1)
oled.show()
if c.value()==0:
if x==60 and y==15:
val=val+5
oled.fill_rect(100, 52, 10, 40, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60-h and y==15:
val=val+4
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60+h and y==15:
val=val+6
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60 and y==15+v:
val=val+8
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60 and y==15-v:
val=val+2
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60-h and y==15+v:
val=val+7
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60+h and y==15+v:
val=val+9
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60-h and y==15-v:
val=val+1
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60+h and y==15-v:
val=val+3
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60 and y==15+v+v:
val=val+0
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60-h and y==15+v+v:
val=0
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if dzialanie==2:
#oled.fill(0)
oled.text('1', 2, 2, 1)
oled.text('2', 62, 2, 1)
oled.text('3', 122, 2, 1)
oled.text('4', 2, 17, 1)
oled.text('5', 62, 17, 1)
oled.text('6', 122, 17, 1)
oled.text('7', 2, 32, 1)
oled.text('8', 62, 32, 1)
oled.text('9', 122, 32, 1)
oled.text('0', 62, 47, 1)
oled.fill_rect(2, 47, 8, 8, 1)
oled.show()
if c.value()==0:
if x==60 and y==15:
val=val-5
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60-h and y==15:
val=val-4
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60+h and y==15:
val=val-6
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60 and y==15+v:
val=val-8
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60 and y==15-v:
val=val-2
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60-h and y==15+v:
val=val-7
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60+h and y==15+v:
val=val-9
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60-h and y==15-v:
val=val-1
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60+h and y==15-v:
val=val-3
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60 and y==15+v+v:
val=val-0
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60-h and y==15+v+v:
val=0
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if dzialanie==3:
#oled.fill(0)
oled.text('1', 2, 2, 1)
oled.text('2', 62, 2, 1)
oled.text('3', 122, 2, 1)
oled.text('4', 2, 17, 1)
oled.text('5', 62, 17, 1)
oled.text('6', 122, 17, 1)
oled.text('7', 2, 32, 1)
oled.text('8', 62, 32, 1)
oled.text('9', 122, 32, 1)
oled.text('0', 62, 47, 1)
oled.fill_rect(2, 47, 8, 8, 1)
oled.show()
if c.value()==0:
if x==60 and y==15:
val=val*5
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60-h and y==15:
val=val*4
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60+h and y==15:
val=val*6
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60 and y==15+v:
val=val*8
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60 and y==15-v:
val=val*2
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60-h and y==15+v:
val=val*7
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60+h and y==15+v:
val=val*9
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60-h and y==15-v:
val=val*1
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60+h and y==15-v:
val=val*3
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60 and y==15+v+v:
val=val*0
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()
if x==60-h and y==15+v+v:
val=0
oled.fill_rect(100, 52, 40, 10, 0)
oled.text(str(val), 100, 52, 1)
oled.show()