Uit Hack42
Ga naar: navigatie, zoeken
Regel 8: Regel 8:
 
<nowiki>
 
<nowiki>
 
code:
 
code:
 +
  
  
Regel 29: Regel 30:
 
Color grn = 0x0000ff00;  //Color(0, 255, 0);
 
Color grn = 0x0000ff00;  //Color(0, 255, 0);
  
/* bottom views
+
/* top views
 
  * BOARD LAYOUT
 
  * BOARD LAYOUT
 
  *  ------------------
 
  *  ------------------
 
  *  |                |     
 
  *  |                |     
  *  |  A3   A0   9 |    9=A9
+
  *  |  A9   A0   A3 |    9=A9
 
  *  |                |
 
  *  |                |
  *  |  6   A2    8 |    6=A7 8=A8
+
  *  | A8   A2   A7 |    6=A7 8=A8
 
  *  |                |
 
  *  |                |
  *  |   4   A1  NC |    4=A6
+
  *  | NC   A1  A6 |    4=A6
 
  *  |                |
 
  *  |                |
 
  *  ------------------
 
  *  ------------------
Regel 44: Regel 45:
 
  *  ------------------
 
  *  ------------------
 
  *  |                |     
 
  *  |                |     
  *  |  2    3    3 |    2  2  1
+
  *  |  1    2    2 |     
 
  *  |                |
 
  *  |                |
  *  |  2   4    1 |    3  4  1
+
  *  |  1   4    3 |     
 
  *  |                |
 
  *  |                |
  *  |  1    1   NC 1|   3  1  NC 
+
  *  |  NC   1    3 
 
  *  |                |
 
  *  |                |
 
  *  ------------------
 
  *  ------------------
Regel 59: Regel 60:
 
  *  |  3    4    5  |
 
  *  |  3    4    5  |
 
  *  |                |
 
  *  |                |
  *  |  6    7   NC |
+
  *  |   NC   6    7  |
 
  *  |                |
 
  *  |                |
 
  *  ------------------
 
  *  ------------------
Regel 68: Regel 69:
  
 
//uint8_t order[8] = {2, 3, 3, 2, 4, 1, 1, 1};
 
//uint8_t order[8] = {2, 3, 3, 2, 4, 1, 1, 1};
uint8_t order[8] = {2, 2, 1, 3, 4, 1, 3, 1};
+
uint8_t order[8] = {1, 2, 2, 1, 4, 3, 1, 3};
uint8_t analog_channels[8] = {A3, A0, A9, A7, A2, A8, A6, A1};
+
uint8_t analog_channels[8] = {A9, A0, A3, A8, A2, A7, A1, A6};
  
 
//                white blue ^red  _red  
 
//                white blue ^red  _red  
Regel 79: Regel 80:
 
uint16_t val[4] = {TYPE1, TYPE2, TYPE3, TYPE4};
 
uint16_t val[4] = {TYPE1, TYPE2, TYPE3, TYPE4};
 
uint8_t state;
 
uint8_t state;
 +
 +
void myprints(char * str)
 +
{
 +
  if(Serial)
 +
  {
 +
    Serial.print(str);
 +
  }
 +
}
 +
void myprintc(char str)
 +
{
 +
  if(Serial)
 +
  {
 +
    Serial.print(str);
 +
  }
 +
}
 +
void myprinti(long int str)
 +
{
 +
  if(Serial)
 +
  {
 +
    Serial.print(str);
 +
  }
 +
}
  
 
void setup(void) {
 
void setup(void) {
Regel 104: Regel 127:
  
 
}
 
}
 +
// no more Serial, will hang if not connected!
 +
#define Serial qqqqq 
 +
 +
  
 
void loop() {
 
void loop() {
   uint8_t i, j, error, inserted, correct;
+
   uint8_t i, j, error=0, inserted=0, correct=0;
 
   uint16_t res=0;
 
   uint16_t res=0;
 
   uint8_t ok=0;
 
   uint8_t ok=0;
Regel 115: Regel 142:
 
     if((i % 3) == 0)
 
     if((i % 3) == 0)
 
     {
 
     {
       Serial.println("");
+
       myprints("\nanalog: ");
       Serial.print("analog: ");
+
       if(i==6)
 +
        myprints("       ");
 
     }
 
     }
 
     // read value
 
     // read value
 
     res = analogRead(analog_channels[i]);
 
     res = analogRead(analog_channels[i]);
     Serial.print(' ');
+
     myprintc(' ');
     Serial.print(res);
+
     myprinti(res);
 
     if (res < 128) {
 
     if (res < 128) {
 
       // possible shortcut, count as error
 
       // possible shortcut, count as error
 
       error++;
 
       error++;
 
       inserted++;
 
       inserted++;
       Serial.print('*');
+
       myprintc('*');
 
     }  
 
     }  
 
     else if(res < 1024-MAX_DEVIATION)  
 
     else if(res < 1024-MAX_DEVIATION)  
Regel 139: Regel 167:
 
           // Count if this is the correct type
 
           // Count if this is the correct type
 
           correct++;
 
           correct++;
           Serial.print('=');
+
           myprintc('=');
 
         }else if (res < val[j]-MAX_DEVIATION)
 
         }else if (res < val[j]-MAX_DEVIATION)
 
         {
 
         {
           Serial.print('-');
+
           myprintc('-');
 
         }else if (res > val[j]+MAX_DEVIATION)
 
         }else if (res > val[j]+MAX_DEVIATION)
 
         {
 
         {
           Serial.print('+');
+
           myprintc('+');
 
         }
 
         }
 
       }   
 
       }   
Regel 152: Regel 180:
 
     }  
 
     }  
 
   }
 
   }
  Serial.println("");
 
 
   ok=0;    //assume not ok
 
   ok=0;    //assume not ok
 
   if (inserted > 7) {          //was 6
 
   if (inserted > 7) {          //was 6
Regel 165: Regel 192:
 
     }
 
     }
 
   }
 
   }
 +
  myprints(" ins:");
 +
  myprinti(inserted);
 +
  myprints(" err:");
 +
  myprinti(error);
 +
  myprints(" correct:");
 +
  myprinti(correct);
 +
  myprints(" OK:");
 +
  myprinti(ok);
 +
 
 +
  myprints("\n");
 +
 
 
   //if(state != ok)
 
   //if(state != ok)
 
   {
 
   {

Versie van 25 jul 2015 11:02

Project: Butterfly Puzzle
Schroefje24.png
Schroefje24.png
Schroefje24.png
Schroefje24.png
Butterfly puzzle Picture.jpg

Butterfly Puzzle

Naam Butterfly Puzzle
Door Moem, Eightdot, SA007, WitchDoc, PeterKKN
Status Uitvoer
Madskillz lassen schilderen elektronica software
Doel / Omschrijving
{{{Samenvatting}}}
Alle Projecten - Project Toevoegen
File:Butterfly puzzle_Picture.jpg noez


code: #include "Adafruit_WS2801.h" //#include "Color.h" #include "SPI.h" // Comment out this line if using Trinket or Gemma #define MAX_DEVIATION 80 #define NUMPIXELS 24 #define CLK 2 #define DAT 3 #define OUT 16 typedef uint32_t Color; // Set the first variable to the NUMBER of pixels. 25 = 25 pixels in a row Adafruit_WS2801 strip1 = Adafruit_WS2801(NUMPIXELS, CLK, DAT); Color off = 0x00000000; // Color(0, 0, 0); Color red = 0x00ff0000; //Color(255, 0, 0); Color grn = 0x0000ff00; //Color(0, 255, 0); /* top views * BOARD LAYOUT * ------------------ * | | * | A9 A0 A3 | 9=A9 * | | * | A8 A2 A7 | 6=A7 8=A8 * | | * | NC A1 A6 | 4=A6 * | | * ------------------ * * TYPE LAYOUT * ------------------ * | | * | 1 2 2 | * | | * | 1 4 3 | * | | * | NC 1 3 | * | | * ------------------ * * READING ORDER * ------------------ * | | * | 0 1 2 | * | | * | 3 4 5 | * | | * | NC 6 7 | * | | * ------------------ * */ //uint8_t order[8] = {2, 3, 3, 2, 4, 1, 1, 1}; uint8_t order[8] = {1, 2, 2, 1, 4, 3, 1, 3}; uint8_t analog_channels[8] = {A9, A0, A3, A8, A2, A7, A1, A6}; // white blue ^red _red //uint8_t val[4] = {204, 408, 612, 816}; #define TYPE1 816 //red down #define TYPE2 408 //blue #define TYPE3 612 //red top (should be 204 white) #define TYPE4 204 //white (should be 612 red top) uint16_t val[4] = {TYPE1, TYPE2, TYPE3, TYPE4}; uint8_t state; void myprints(char * str) { if(Serial) { Serial.print(str); } } void myprintc(char str) { if(Serial) { Serial.print(str); } } void myprinti(long int str) { if(Serial) { Serial.print(str); } } void setup(void) { uint8_t i; // Initialize analog channels for(i=0; i<8; i++) { pinMode(analog_channels[i], INPUT); } // set pinMode for opto output pinMode(OUT, OUTPUT); // opto off digitalWrite(OUT, LOW); // init state to wrong state=0; // initialize ledstrip strip1.begin(); strip1.show(); Serial.begin(9600); // All leds off. for(i=0; i<NUMPIXELS; i++) { strip1.setPixelColor(i, off); } strip1.show(); } // no more Serial, will hang if not connected! #define Serial qqqqq void loop() { uint8_t i, j, error=0, inserted=0, correct=0; uint16_t res=0; uint8_t ok=0; Color col=0; inserted =0; // for each butterfly (analog input) for(i=0; i<8; i++) { if((i % 3) == 0) { myprints("\nanalog: "); if(i==6) myprints(" "); } // read value res = analogRead(analog_channels[i]); myprintc(' '); myprinti(res); if (res < 128) { // possible shortcut, count as error error++; inserted++; myprintc('*'); } else if(res < 1024-MAX_DEVIATION) { // a butterfly is inserted at this socket //get type j=order[i]-1; //for(j=1; j<5; j++) { //check value //<s>test possible values to determine which type it is</s> if ((res < (val[j]+MAX_DEVIATION)) && (res > (val[j]-MAX_DEVIATION))) { // Count if this is the correct type correct++; myprintc('='); }else if (res < val[j]-MAX_DEVIATION) { myprintc('-'); }else if (res > val[j]+MAX_DEVIATION) { myprintc('+'); } } // Count all inserted butterflies inserted++; } } ok=0; //assume not ok if (inserted > 7) { //was 6 // All butterflies were inserted if(error < 2 && correct > 5) { // Minimal amount correct (allow 2 defects), green leds & output high ok=2; } else { // Not in correct order. red leds and output low ok=1; } } myprints(" ins:"); myprinti(inserted); myprints(" err:"); myprinti(error); myprints(" correct:"); myprinti(correct); myprints(" OK:"); myprinti(ok); myprints("\n"); //if(state != ok) { // All butterflies were inserted ok if(ok==2) { col = grn; j=HIGH; }else if(ok==1) { // Not in correct order. red leds and output low col = red; j=LOW; }else{ // Not enough inserted (yet). leds and output low col = off; j=LOW; } // turn on the leds for(i=0; i<NUMPIXELS; i++) { strip1.setPixelColor(i, col); } strip1.show(); // set ooutput digitalWrite(OUT, j); state = ok; } delay(500); }