Uit Hack42
(Nieuwe pagina aangemaakt met '{{Project |Naam=Butterfly Puzzle |Eigenaar=Moem, Eightdot, SA007, WitchDoc, PeterKKN |Status=Uitvoer |Skills=lassen schilderen elektronica software }} code: #i...') |
k (Lurwah heeft pagina Butterfly puzzle hernoemd naar Gebruiker:Hack42/Butterfly puzzle) |
||
(7 tussenliggende versies door 4 gebruikers niet weergegeven) | |||
Regel 2: | Regel 2: | ||
|Naam=Butterfly Puzzle | |Naam=Butterfly Puzzle | ||
|Eigenaar=Moem, Eightdot, SA007, WitchDoc, PeterKKN | |Eigenaar=Moem, Eightdot, SA007, WitchDoc, PeterKKN | ||
− | |Status= | + | |Status=Afgerond |
|Skills=lassen schilderen elektronica software | |Skills=lassen schilderen elektronica software | ||
+ | |Samenvatting=Butterfly puzzle voor Escape Room Rozet | ||
}} | }} | ||
code: | code: | ||
− | + | <pre> | |
− | |||
#include "Adafruit_WS2801.h" | #include "Adafruit_WS2801.h" | ||
//#include "Color.h" | //#include "Color.h" | ||
Regel 27: | Regel 27: | ||
Color grn = 0x0000ff00; //Color(0, 255, 0); | Color grn = 0x0000ff00; //Color(0, 255, 0); | ||
− | /* | + | /* top views |
* BOARD LAYOUT | * BOARD LAYOUT | ||
* ------------------ | * ------------------ | ||
* | | | * | | | ||
− | * | | + | * | A9 A0 A3 | 9=A9 |
* | | | * | | | ||
− | * | | + | * | A8 A2 A7 | 6=A7 8=A8 |
* | | | * | | | ||
− | * | | + | * | NC A1 A6 | 4=A6 |
* | | | * | | | ||
* ------------------ | * ------------------ | ||
Regel 42: | Regel 42: | ||
* ------------------ | * ------------------ | ||
* | | | * | | | ||
− | * | 2 | + | * | 1 2 2 | |
* | | | * | | | ||
− | * | | + | * | 1 4 3 | |
* | | | * | | | ||
− | * | | + | * | NC 1 3 | |
* | | | * | | | ||
* ------------------ | * ------------------ | ||
Regel 57: | Regel 57: | ||
* | 3 4 5 | | * | 3 4 5 | | ||
* | | | * | | | ||
− | * | 6 7 | + | * | NC 6 7 | |
* | | | * | | | ||
* ------------------ | * ------------------ | ||
Regel 66: | Regel 66: | ||
//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 | + | uint8_t order[8] = {1, 2, 2, 1, 4, 3, 1, 3}; |
− | uint8_t analog_channels[8] = { | + | uint8_t analog_channels[8] = {A9, A0, A3, A8, A2, A7, A1, A6}; |
// white blue ^red _red | // white blue ^red _red | ||
//uint8_t val[4] = {204, 408, 612, 816}; | //uint8_t val[4] = {204, 408, 612, 816}; | ||
− | #define | + | #define TYPE1L 677 //red down |
− | #define | + | #define TYPE2L 375 //blue |
− | #define | + | #define TYPE3L 204 //white |
− | #define | + | #define TYPE4L 532 //red top |
− | uint16_t | + | #define TYPE1H 816 //red down |
+ | #define TYPE2H 408 //blue | ||
+ | #define TYPE3H 216 //white | ||
+ | #define TYPE4H 612 //red top | ||
+ | #define TYPEX 816 //defective open circuit | ||
+ | uint16_t lval[4] = {TYPE1L, TYPE2L, TYPE3L, TYPE4L}; | ||
+ | uint16_t hval[4] = {TYPE1H, TYPE2H, TYPE3H, TYPE4H}; | ||
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 102: | Regel 130: | ||
} | } | ||
+ | // 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 113: | Regel 145: | ||
if((i % 3) == 0) | if((i % 3) == 0) | ||
{ | { | ||
− | + | myprints("\nanalog: "); | |
− | + | if(i==6) | |
+ | myprints(" "); | ||
} | } | ||
// read value | // read value | ||
res = analogRead(analog_channels[i]); | res = analogRead(analog_channels[i]); | ||
− | + | myprintc(' '); | |
− | + | myprinti(res); | |
if (res < 128) { | if (res < 128) { | ||
// possible shortcut, count as error | // possible shortcut, count as error | ||
error++; | error++; | ||
inserted++; | inserted++; | ||
− | + | myprintc('*'); | |
− | } | + | } else if(res > TYPEX-MAX_DEVIATION) { |
− | + | if (res < TYPEX + MAX_DEVIATION) { | |
− | { | + | // possible open circuit, count as error |
+ | error++; | ||
+ | inserted++; | ||
+ | myprintc('X'); | ||
+ | } | ||
+ | } else { | ||
// a butterfly is inserted at this socket | // a butterfly is inserted at this socket | ||
//get type | //get type | ||
Regel 134: | Regel 172: | ||
{ | { | ||
//check value //<s>test possible values to determine which type it is</s> | //check value //<s>test possible values to determine which type it is</s> | ||
− | if ((res < ( | + | if ((res < (hval[j]+MAX_DEVIATION)) && (res > (lval[j]-MAX_DEVIATION))) { |
// Count if this is the correct type | // Count if this is the correct type | ||
correct++; | correct++; | ||
− | + | myprintc('='); | |
− | }else if (res < | + | }else if (res < lval[j]-MAX_DEVIATION) |
{ | { | ||
− | + | myprintc('-'); | |
− | }else if (res > | + | }else if (res > hval[j]+MAX_DEVIATION) |
{ | { | ||
− | + | myprintc('+'); | |
} | } | ||
} | } | ||
Regel 150: | Regel 188: | ||
} | } | ||
} | } | ||
− | |||
ok=0; //assume not ok | ok=0; //assume not ok | ||
if (inserted > 7) { //was 6 | if (inserted > 7) { //was 6 | ||
// All butterflies were inserted | // All butterflies were inserted | ||
− | if(error < | + | // TODO error <=2 because testing. |
+ | if((error <= 3) && ((error + correct) > 7)) { | ||
// Minimal amount correct (allow 2 defects), green leds & output high | // Minimal amount correct (allow 2 defects), green leds & output high | ||
ok=2; | ok=2; | ||
Regel 163: | Regel 201: | ||
} | } | ||
} | } | ||
− | + | 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 | // All butterflies were inserted ok | ||
Regel 187: | Regel 236: | ||
digitalWrite(OUT, j); | digitalWrite(OUT, j); | ||
state = ok; | state = ok; | ||
+ | } else { | ||
+ | for(i=0; i<NUMPIXELS; i++) { | ||
+ | strip1.setPixelColor(i, off); | ||
+ | } | ||
+ | strip1.show(); | ||
+ | digitalWrite(OUT, LOW); | ||
} | } | ||
delay(500); | delay(500); | ||
} | } | ||
+ | </pre> |
Huidige versie van 17 mei 2024 om 12:06
Project: Butterfly Puzzle | |
---|---|
Naam | Butterfly Puzzle |
Door | Moem, Eightdot, SA007, WitchDoc, PeterKKN |
Status | Afgerond |
Madskillz | lassen schilderen elektronica software |
Doel / Omschrijving | |
Butterfly puzzle voor Escape Room Rozet | |
Alle Projecten - Project Toevoegen |
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 TYPE1L 677 //red down #define TYPE2L 375 //blue #define TYPE3L 204 //white #define TYPE4L 532 //red top #define TYPE1H 816 //red down #define TYPE2H 408 //blue #define TYPE3H 216 //white #define TYPE4H 612 //red top #define TYPEX 816 //defective open circuit uint16_t lval[4] = {TYPE1L, TYPE2L, TYPE3L, TYPE4L}; uint16_t hval[4] = {TYPE1H, TYPE2H, TYPE3H, TYPE4H}; 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 > TYPEX-MAX_DEVIATION) { if (res < TYPEX + MAX_DEVIATION) { // possible open circuit, count as error error++; inserted++; myprintc('X'); } } else { // 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 < (hval[j]+MAX_DEVIATION)) && (res > (lval[j]-MAX_DEVIATION))) { // Count if this is the correct type correct++; myprintc('='); }else if (res < lval[j]-MAX_DEVIATION) { myprintc('-'); }else if (res > hval[j]+MAX_DEVIATION) { myprintc('+'); } } // Count all inserted butterflies inserted++; } } ok=0; //assume not ok if (inserted > 7) { //was 6 // All butterflies were inserted // TODO error <=2 because testing. if((error <= 3) && ((error + correct) > 7)) { // 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; } else { for(i=0; i<NUMPIXELS; i++) { strip1.setPixelColor(i, off); } strip1.show(); digitalWrite(OUT, LOW); } delay(500); }