// laat je groepjes leds aan en uitzetten zoals in "lights off". Nog in ontwikkeling. const int xpin1 = A0; const int xpin2 = A2; const int ypin1 = A1; const int ypin2 = A3; const int XMAX = 800 ; // min and max values for touchscreen hardcoded, could get recalibrated during use (see below) const int XMIN = 80 ; const int YMAX = 730 ; const int YMIN = 80 ; byte dispRam[5]; void setup() { Serial.begin(9600); dispRam[0]=0x00; dispRam[1]=0x00; dispRam[2]=0x00; dispRam[3]=0x00; dispRam[4]=0x00; } void loop() { int Xpos, Ypos, xper, yper; byte disprowpos, pixmap[5]={ 0,0,0,0,0 }; enum gamestate { GAME_NEW=0, GAME_IN_PLAY=1, GAME_WON=2, RECAL_TOUCH=3 }; static byte Gamestate; // op basis van gamestate besluiten wat te doen, nieuw bord initten, niks doen en laten spelen, of winstanimatie. byte moet dus heel blijven tussen runnen loop, dus static //Serial.print(Gamestate); //Serial.print("\n"); switch(Gamestate){ case GAME_NEW: // setup board, random. randomSeed(analogRead(5)); // seed random met adc waarde van floating pin for(byte i=0;i<5;i++){ // 5 keer de regels toepassen, zodat in theorie elk bit uit een rij (van de 5x5) getoggled kan zijn for(byte i=0;i<5;i++){ // van elke rij 1 bit setten, maar random welk bit byte shift = random(0,5); pixmap[i]=0x01<Xmin)&&(*Ypos>Ymin)){ *Xper= ((*Xpos-Xmin)*100.0)/(Xmax-Xmin); *Yper= ((*Ypos-Ymin)*100.0)/(Ymax-Ymin); if(*Xper>100) *Xper=100; if(*Yper>100) *Yper = 100; } else{ *Xper=0; *Yper=0; } // uncomment for use in manual calibration Serial.print("Xmin: ");Serial.print(Xmin); Serial.print(" Ymin: ");Serial.print(Ymin); Serial.print(" Xmax: ");Serial.print(Xmax); Serial.print(" Ymax: ");Serial.print(Ymax); Serial.print(" Xper: ");Serial.print(*Xper); Serial.print(" Yper: ");Serial.print(*Yper); Serial.print("\n"); } void muxdisp(){ DDRD=(0xF8); //portd 3..7 zijn outputs voor LEDmatrix (0 en 1 zijn Rx/tx) DDRB=(0xFF); //PORTB idem PORTD=0xF0; for(byte i=0;i<5;i++){ PORTB=dispRam[i]; delay(1); PORTD=(PORTD<<1)+0x08; } }