Salem Suljkanovic
/
BitmapEditor
Prikaz i editovanje bitmape uz pomoc Nokia dispjela i dzojstika
Revision 0:812745aff81d, committed 2017-06-11
- Comitter:
- 2017US_SalemSuljkano
- Date:
- Sun Jun 11 13:06:55 2017 +0000
- Commit message:
- Bitmap editor;
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/N5110.lib Sun Jun 11 13:06:55 2017 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/eencae/code/N5110/#ba8addc061ea
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Jun 11 13:06:55 2017 +0000 @@ -0,0 +1,198 @@ +#include "mbed.h" +#include "N5110.h" +#include "myBitmap.h" +#define dp23 P0_0 + +//Nokia display(VCC,SCE,RST,DC,MOSI,SCLK,LED) +N5110 lcd(dp4, dp24, dp23, dp25, dp2, dp6, dp18); + +//Analogni ulazi sa dzojstika +AnalogIn VRx(dp11); +AnalogIn VRy(dp10); + +//Taster sa dzojstika +InterruptIn SW(dp9); + +//Izlaz na led diode +DigitalOut enable(dp14); + +//Serijski port (tx, rx) +Serial pc(USBTX, USBRX); + +//Tickeri za blinkanje i joystick +Ticker tBlink; +Ticker tJoystick; + +//timeri za debouncing +Timer debouncer; +Timer debouncer2; + + +unsigned int x = 0, y = 0; +bool isSet = true; +bool edit = false; +char c, temp; + +myBitmap bitmap; + + +void Blink (); +void Joystick (); +void ClearBuffer(); +void UcitajMapu(); +void IspisiMapu(); +void PosaljiMapu(); +void tasterSW(void); + +int main() { + debouncer.start(); + debouncer2.start(); + SW.mode(PullUp); + SW.rise(&tasterSW); //interupt za taster na dzojstiku + enable = 1; //deaktivacija led + + tBlink.attach(&Blink, 0.4); //blinkaj na lokaciji (x, y) svakih 0.5 s + tJoystick.attach(&Joystick, 0.2); //provjeravaj da li je dzojstik aktivan + + lcd.init(); //inicijalizacija displeja + lcd.printString("Pocetak...", 0, 0); //provjera da li displej radi OK + wait (1); + lcd.clear(); + + while(1) { + if (pc.readable()) { + c = pc.getc(); + + while (!(c == '1' || c == '2' || c == '3')) { + c = pc.getc(); + } + + switch (c) { + case '1': + UcitajMapu(); + lcd.clear(); + IspisiMapu(); + ClearBuffer(); + break; + case '2': + edit = !edit; + ClearBuffer(); + break; + case '3': + PosaljiMapu(); + ClearBuffer(); + break; + } + } + } +} + +void Blink () { + if (edit) { + if(!isSet){ + lcd.setPixel(x, y); + } else { + lcd.clearPixel(x, y); + } + lcd.refresh(); + wait (0.2); + IspisiMapu(); + + isSet = !isSet; + } + //IspisiMapu(); +} + +void Joystick () { + if (edit) { + int stariPiksel = bitmap.getBit(x, y), _x(x), _y(y); + if (VRx < 1.0/3.0 && debouncer2.read_ms() >= 100) { + _x--; + debouncer2.reset(); + } + else if (VRx > 2.0/3.0 && debouncer2.read_ms() >= 100) { + _x++; + debouncer2.reset(); + } + + if (VRy < 1.0/3.0 && debouncer2.read_ms() >= 100) { + _y--; + debouncer2.reset(); + } + else if (VRy > 2.0/3.0 && debouncer2.read_ms() >= 100) { + _y++; + debouncer2.reset(); + } + + if (x != _x || y != _y) { //ako se desila promjena kursora koordinata, trebamo vratiti na staro stanje + if (stariPiksel == 0) { + bitmap.setBit0(x, y); + } else { + bitmap.setBit1(x, y); + } + } + + x = _x %= 84; + y = _y %= 48; + + IspisiMapu(); + } + +} + +void ClearBuffer() { + while (pc.readable()) { + temp = pc.getc(); + } +} + +void UcitajMapu() { + bitmap.clearMap(); + char temp; + for(int i = 0; i < 84; i++){ + for(int j = 0; j < 6; j++){ + temp = pc.getc(); + bitmap.setByte(i, j, temp); + } + } + ClearBuffer(); +} + +void IspisiMapu() { + lcd.clear(); + for (int i = 0; i < 84; i++) { + for (int j = 0; j < 48; j++) { + if (bitmap.getBit(i, j) != 0) { + lcd.setPixel(i, j); + } else { + lcd.clearPixel(i, j); + } + } + } + lcd.refresh(); +} + +void PosaljiMapu() { + ClearBuffer(); + if(pc.writeable()){ + char temp; + for (int i = 0 ; i < 84; i++) { + for (int j = 0; j < 6; j++) { + temp = bitmap.getByte(i,j); + pc.putc(temp); + } + } + } +} + +void tasterSW() { + if (debouncer.read_ms() >= 200) { //trenutni piksel/bit treba promijeniti + if (bitmap.getBit(x, y) == 0) { //treba bit postaviti na 1 + bitmap.setBit1(x, y); + } else { //treba bit postaviti na 0 + bitmap.setBit0(x, y); + } + IspisiMapu(); + } + debouncer.reset(); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Sun Jun 11 13:06:55 2017 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/mbed_official/code/mbed/builds/0f02307a0877 \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/myBitmap.cpp Sun Jun 11 13:06:55 2017 +0000 @@ -0,0 +1,47 @@ +#include "myBitmap.h" + +myBitmap::myBitmap () { + clearMap(); +} + +int myBitmap::getBit (int x, int y) { + if (x >= 0 && x < 84 && y >= 0 && y < 48) { + return map[x][y/8] & (1 << y%8); + } else { + return 0; + } +} + +void myBitmap::setBit0 (int x, int y) { + if (x >= 0 && x < 84 && y >= 0 && y < 48) { + map[x][y/8] &= ~(1 << y%8); + } +} + +void myBitmap::setBit1 (int x, int y) { + if (x >= 0 && x < 84 && y >= 0 && y < 48) { + map[x][y/8] |= (1 << y%8); + } +} + +int myBitmap::getByte (int x, int y) { + if (x >= 0 && x < 84 && y >= 0 && y < 6) { + return map[x][y]; + } else { + return 0; + } +} + +void myBitmap::setByte (int x, int y, unsigned char value) { + if (x >= 0 && x < 84 && y >= 0 && y < 6 && value < 256) { + map[x][y] = value; + } +} + +void myBitmap::clearMap () { + for (int i(0); i < 84; i++) { + for (int j(0); j < 6; j++) { + map[i][j] = 0; + } + } +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/myBitmap.h Sun Jun 11 13:06:55 2017 +0000 @@ -0,0 +1,17 @@ +#ifndef MYBITMAP_H +#define MYBITMAP_H + +class myBitmap { +private: + unsigned char map[84][6]; +public: + myBitmap (); + int getBit (int x, int y); + void setBit0 (int x, int y); + void setBit1 (int x, int y); + int getByte (int x, int y); + void setByte (int x, int y, unsigned char value); + void clearMap (); +}; + +#endif \ No newline at end of file