Display Class for BaseMachine

Committer:
ryood
Date:
Fri Sep 09 03:13:57 2016 +0000
Revision:
8:2a06c35302e7
Parent:
7:13a13dd9a00b
Child:
9:a8adc9b9b3d8
Display LCD while run (uncompleted)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryood 0:9a0f67fe026b 1 /*
ryood 0:9a0f67fe026b 2 * ST7565_SequencerDisplay.h
ryood 0:9a0f67fe026b 3 *
ryood 0:9a0f67fe026b 4 * 2016.08.13
ryood 0:9a0f67fe026b 5 *
ryood 0:9a0f67fe026b 6 */
ryood 0:9a0f67fe026b 7 #ifndef _ST7565_SEQUENCE_DISPLAY_H_
ryood 0:9a0f67fe026b 8 #define _ST7565_SEQUENCE_DISPLAY_H_
ryood 0:9a0f67fe026b 9
ryood 4:e51a5f0891a0 10 #define DISPLAY_PARAMS_ON_LCD (0)
ryood 4:e51a5f0891a0 11
ryood 0:9a0f67fe026b 12 #include "mbed.h"
ryood 0:9a0f67fe026b 13 #include "SequencerDisplay.h"
ryood 0:9a0f67fe026b 14 #include "st7565LCD.h"
ryood 0:9a0f67fe026b 15
ryood 0:9a0f67fe026b 16 class ST7565_SequencerDisplay : public SequencerDisplay {
ryood 0:9a0f67fe026b 17 public:
ryood 0:9a0f67fe026b 18 ST7565_SequencerDisplay(ST7565* _gLCD, Sequence* _sequences, int _sequenceNum) :
ryood 0:9a0f67fe026b 19 SequencerDisplay(_sequences, _sequenceNum),
ryood 8:2a06c35302e7 20 gLCD(_gLCD),
ryood 8:2a06c35302e7 21 runningStep(0) {};
ryood 0:9a0f67fe026b 22
ryood 0:9a0f67fe026b 23 protected:
ryood 6:ec1d00fa9835 24 virtual void displayWhileStop(int step) {
ryood 0:9a0f67fe026b 25 int x, y;
ryood 0:9a0f67fe026b 26 int i;
ryood 0:9a0f67fe026b 27
ryood 0:9a0f67fe026b 28 gLCD->clear();
ryood 0:9a0f67fe026b 29
ryood 0:9a0f67fe026b 30 // Pos Indicator Grid
ryood 0:9a0f67fe026b 31 for (x = 0; x <= 16; x++) {
ryood 0:9a0f67fe026b 32 gLCD->drawline(x * 7, 0, x * 7, 3, 1);
ryood 0:9a0f67fe026b 33 }
ryood 0:9a0f67fe026b 34 for (y = 0; y <= 1; y++) {
ryood 0:9a0f67fe026b 35 gLCD->drawline(0, y * 3, 112, y * 3, 1);
ryood 0:9a0f67fe026b 36 }
ryood 0:9a0f67fe026b 37
ryood 6:ec1d00fa9835 38 gLCD->fillrect(step * 7, 1, 7, 2, 1);
ryood 0:9a0f67fe026b 39
ryood 0:9a0f67fe026b 40 // Sequence Grid
ryood 0:9a0f67fe026b 41 for (x = 0; x <= 16; x++) {
ryood 0:9a0f67fe026b 42 gLCD->drawline(x * 7, 5, x * 7, 57, 1);
ryood 0:9a0f67fe026b 43 }
ryood 0:9a0f67fe026b 44 for (y = 0; y <= 13; y++) {
ryood 0:9a0f67fe026b 45 gLCD->drawline(0, y * 4 + 5, 112, y * 4 + 5, 1);
ryood 0:9a0f67fe026b 46 }
ryood 0:9a0f67fe026b 47
ryood 0:9a0f67fe026b 48 for (i = 0; i < 16; i++) {
ryood 5:6264a3682865 49 int noteOctave = (sequences[i].getPitch() / 12) - (Sequence::getBaseNoteNumber() / 12);
ryood 5:6264a3682865 50 int pitchInOctave = sequences[i].getPitch() % 12; // 表示中のOctave内のPitch
ryood 5:6264a3682865 51 // Octave内の12音階とOctave+1のPitch=0を表示
ryood 5:6264a3682865 52 if (this->getOctave() == noteOctave) {
ryood 5:6264a3682865 53 int pitchRev = 12 - pitchInOctave; // Pitchの位置をGridの下から上に変換
ryood 1:1f6d3e65d946 54 gLCD->fillrect(i * 7, pitchRev * 4 + 5, 7, 4, 1);
ryood 0:9a0f67fe026b 55 }
ryood 5:6264a3682865 56 if ((this->getOctave() + 1 == noteOctave) && (pitchInOctave == 0)) {
ryood 5:6264a3682865 57 gLCD->fillrect(i * 7, 5, 7, 4, 1);
ryood 5:6264a3682865 58 }
ryood 0:9a0f67fe026b 59 }
ryood 0:9a0f67fe026b 60
ryood 0:9a0f67fe026b 61 // NoteOn & Tie Grid
ryood 0:9a0f67fe026b 62 for (x = 0; x <= 16; x++) {
ryood 0:9a0f67fe026b 63 gLCD->drawline(x * 7, 57, x * 7, 63, 1);
ryood 0:9a0f67fe026b 64 }
ryood 0:9a0f67fe026b 65 gLCD->drawline(0, 63, 112, 63, 1);
ryood 0:9a0f67fe026b 66
ryood 0:9a0f67fe026b 67 for (i = 0; i < 16; i++) {
ryood 3:5b11261a545a 68 if (sequences[i].isNoteOn()) {
ryood 3:5b11261a545a 69 if (sequences[i].isAccent() && sequences[i].isTie()) {
ryood 0:9a0f67fe026b 70 gLCD->fillrect(i * 7, 57, 7, 6, 1);
ryood 0:9a0f67fe026b 71 } else {
ryood 0:9a0f67fe026b 72 gLCD->fillrect(i * 7, 59, 5, 4, 1);
ryood 3:5b11261a545a 73 if (sequences[i].isAccent()) {
ryood 0:9a0f67fe026b 74 gLCD->fillrect(i * 7, 57, 5, 4, 1);
ryood 0:9a0f67fe026b 75 }
ryood 3:5b11261a545a 76 if (sequences[i].isTie()) {
ryood 0:9a0f67fe026b 77 gLCD->fillrect(i * 7 + 5, 59, 2, 4, 1);
ryood 0:9a0f67fe026b 78 }
ryood 0:9a0f67fe026b 79 }
ryood 0:9a0f67fe026b 80 }
ryood 4:e51a5f0891a0 81 }
ryood 4:e51a5f0891a0 82
ryood 4:e51a5f0891a0 83 char buff[32];
ryood 4:e51a5f0891a0 84 sprintf(buff, "%2d", this->getOctave());
ryood 4:e51a5f0891a0 85 gLCD->drawstring(115, 0, "OC");
ryood 4:e51a5f0891a0 86 gLCD->drawstring(115, 1, buff);
ryood 4:e51a5f0891a0 87
ryood 4:e51a5f0891a0 88 #if (DISPLAY_PARAMS_ON_LCD)
ryood 4:e51a5f0891a0 89 char* s;
ryood 4:e51a5f0891a0 90 switch (waveShape) {
ryood 4:e51a5f0891a0 91 case 0:
ryood 4:e51a5f0891a0 92 s = "SQ";
ryood 4:e51a5f0891a0 93 break;
ryood 4:e51a5f0891a0 94 case 1:
ryood 4:e51a5f0891a0 95 s = "SW";
ryood 4:e51a5f0891a0 96 break;
ryood 4:e51a5f0891a0 97 }
ryood 4:e51a5f0891a0 98 gLCD->drawstring(115, 2, s);
ryood 4:e51a5f0891a0 99
ryood 4:e51a5f0891a0 100 gLCD->drawstring(115, 3, "MN");
ryood 4:e51a5f0891a0 101 sprintf(buff, "%2d", this->getModNumber());
ryood 4:e51a5f0891a0 102 gLCD->drawstring(115, 4, buff);
ryood 4:e51a5f0891a0 103
ryood 4:e51a5f0891a0 104 sprintf(buff, "%3d", this->getBpm());
ryood 4:e51a5f0891a0 105 gLCD->drawstring(109, 5, "BPM");
ryood 4:e51a5f0891a0 106 gLCD->drawstring(109, 6, buff);
ryood 4:e51a5f0891a0 107 #endif // DISPLAY_PARAMS_ON_LCD
ryood 0:9a0f67fe026b 108
ryood 0:9a0f67fe026b 109 gLCD->display();
ryood 0:9a0f67fe026b 110 };
ryood 0:9a0f67fe026b 111
ryood 6:ec1d00fa9835 112 virtual void displayWhileRun(int step) {
ryood 8:2a06c35302e7 113 /*
ryood 8:2a06c35302e7 114 //gLCD->clear();
ryood 8:2a06c35302e7 115 gLCD->fillrect(runningStep * 7, 1, 7, 1, 0); // 前回のrunningStepインディケータを消去
ryood 6:ec1d00fa9835 116 gLCD->fillrect(step * 7, 1, 7, 1, 1);
ryood 8:2a06c35302e7 117 runningStep = step;
ryood 6:ec1d00fa9835 118 //gLCD->display();
ryood 7:13a13dd9a00b 119
ryood 8:2a06c35302e7 120 //char buff[32];
ryood 8:2a06c35302e7 121 //sprintf(buff, "%d ", step);
ryood 7:13a13dd9a00b 122 //gLCD->clear();
ryood 8:2a06c35302e7 123 //gLCD->drawstring(0, 0, buff);
ryood 6:ec1d00fa9835 124 gLCD->display();
ryood 8:2a06c35302e7 125 */
ryood 8:2a06c35302e7 126 displayWhileStop(step);
ryood 2:60f7d4c54b5f 127 }
ryood 2:60f7d4c54b5f 128
ryood 2:60f7d4c54b5f 129 void displayParams(int step) {
ryood 1:1f6d3e65d946 130 char buff[64];
ryood 1:1f6d3e65d946 131 gLCD->clear();
ryood 1:1f6d3e65d946 132 sprintf(buff, "Step: %d", step);
ryood 1:1f6d3e65d946 133 gLCD->drawstring(0, 0, buff);
ryood 1:1f6d3e65d946 134 sprintf(buff, "Pitch: %d", sequences[step].getPitch());
ryood 1:1f6d3e65d946 135 gLCD->drawstring(0, 1, buff);
ryood 1:1f6d3e65d946 136 sprintf(buff, "BPM: %d", this->getBpm());
ryood 1:1f6d3e65d946 137 gLCD->drawstring(0, 2, buff);
ryood 1:1f6d3e65d946 138 gLCD->display();
ryood 2:60f7d4c54b5f 139 };
ryood 1:1f6d3e65d946 140
ryood 0:9a0f67fe026b 141 private:
ryood 0:9a0f67fe026b 142 ST7565* gLCD;
ryood 8:2a06c35302e7 143 int runningStep;
ryood 0:9a0f67fe026b 144
ryood 0:9a0f67fe026b 145 };
ryood 0:9a0f67fe026b 146
ryood 0:9a0f67fe026b 147 #endif //ST7565_SEQUENCE_DISPLAY_H_