boolean TouchKeyboard::GetKeyboardCalibration(TouchScreen &screen, Rect &bounds, CalibrationPrompt &prompt) { Point lb, tr; prompt.PromptUser(leftBottom); lb = screen.getPressAndRelease(true); prompt.PromptUser(rightTop); tr = screen.getPressAndRelease(true); if (lb.x < tr.x && lb.y < tr.y) { bounds.left = lb.x; bounds.bottom = lb.y; bounds.right = tr.x; bounds.top = tr.y; return true; } else return false; }
int main(void) { sei(); //count = 0; LcdDisplay lcd; touchscreen.init(); lcd.init_lcd(); USART_Init(MYUBRR); timer0_interrupt_init(); lcd.clearDisplay(); StepperMotor stepper; Pages page; page.introPage(); while (1) { _delay_ms(200); page.chooseAction(touchscreen.getPosX(),touchscreen.getPosY()); } }
void Clickable::tick() { if (screen.isTouching( _pos.x, _pos.y, _pos.x+_size.w, _pos.y+_size.h )) { _touching++; if (_touching == 1) { pipe->push(drawControlForwarder, this); } } else if (_touching > 0) { _touching = 0; if (_onClick != nullptr) { pipe->push(_onClick, _onClickContext); } pipe->push(drawControlForwarder, this); } }
void Stage::manualControl() { //Get pressure point from TS. p = ts.getPoint(); if(p.z > 10){ //If pressed, move stage depending on sector if(p.y<400 && p.x>600){ //Move forwards _y_target = _y_pos - 1; } if(p.y>700 && p.x>600){ //Move backwards _y_target = _y_pos + 1; } if(p.x<700 &&p.x>380&&p.y>450&&p.y<650){ //Move right _x_target = _x_pos + 1; } if(p.x>750&&p.y>450&&p.y<650){ //Move left _x_target = _x_pos - 1; } if(p.x<310 && p.y<500){ //Move up _z_target = _z_pos + 1; } if(p.x<310 && p.y>500){ //Move down _z_target = _z_pos - 1; } } }
void loop() { // Retrieve a point TSPoint p = ts.getPoint(); // we have some minimum pressure we consider 'valid' // pressure of 0 means no pressing! if (p.z < MINPRESSURE || p.z > MAXPRESSURE) { return; } Serial.print("X = "); Serial.print(p.x); Serial.print("\tY = "); Serial.print(p.y); Serial.print("\tPressure = "); Serial.println(p.z); // Scale from ~0->1000 to tft.width using the calibration #'s p.x = map(p.x, TS_MINX, TS_MAXX, 0, tft.width()); p.y = map(p.y, TS_MINY, TS_MAXY, 0, tft.height()); /* Serial.print("("); Serial.print(p.x); Serial.print(", "); Serial.print(p.y); Serial.println(")"); */ if (p.y < BOXSIZE) { oldcolor = currentcolor; if (p.x < BOXSIZE) { currentcolor = HX8357_RED; tft.drawRect(0, 0, BOXSIZE, BOXSIZE, HX8357_WHITE); } else if (p.x < BOXSIZE*2) { currentcolor = HX8357_YELLOW; tft.drawRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, HX8357_WHITE); } else if (p.x < BOXSIZE*3) { currentcolor = HX8357_GREEN; tft.drawRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, HX8357_WHITE); } else if (p.x < BOXSIZE*4) { currentcolor = HX8357_CYAN; tft.drawRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, HX8357_WHITE); } else if (p.x < BOXSIZE*5) { currentcolor = HX8357_BLUE; tft.drawRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, HX8357_WHITE); } else if (p.x < BOXSIZE*6) { currentcolor = HX8357_MAGENTA; tft.drawRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, HX8357_WHITE); } else if (p.x < BOXSIZE*7) { currentcolor = HX8357_WHITE; tft.drawRect(BOXSIZE*6, 0, BOXSIZE, BOXSIZE, HX8357_RED); } else if (p.x < BOXSIZE*8) { currentcolor = HX8357_BLACK; tft.drawRect(BOXSIZE*7, 0, BOXSIZE, BOXSIZE, HX8357_WHITE); } if (oldcolor != currentcolor) { if (oldcolor == HX8357_RED) tft.fillRect(0, 0, BOXSIZE, BOXSIZE, HX8357_RED); if (oldcolor == HX8357_YELLOW) tft.fillRect(BOXSIZE, 0, BOXSIZE, BOXSIZE, HX8357_YELLOW); if (oldcolor == HX8357_GREEN) tft.fillRect(BOXSIZE*2, 0, BOXSIZE, BOXSIZE, HX8357_GREEN); if (oldcolor == HX8357_CYAN) tft.fillRect(BOXSIZE*3, 0, BOXSIZE, BOXSIZE, HX8357_CYAN); if (oldcolor == HX8357_BLUE) tft.fillRect(BOXSIZE*4, 0, BOXSIZE, BOXSIZE, HX8357_BLUE); if (oldcolor == HX8357_MAGENTA) tft.fillRect(BOXSIZE*5, 0, BOXSIZE, BOXSIZE, HX8357_MAGENTA); if (oldcolor == HX8357_WHITE) tft.fillRect(BOXSIZE*6, 0, BOXSIZE, BOXSIZE, HX8357_WHITE); if (oldcolor == HX8357_BLACK) tft.fillRect(BOXSIZE*7, 0, BOXSIZE, BOXSIZE, HX8357_BLACK); } } if (((p.y-PENRADIUS) > BOXSIZE) && ((p.y+PENRADIUS) < tft.height())) { tft.fillCircle(p.x, p.y, PENRADIUS, currentcolor); } }