Regel 8: | Regel 8: | ||
<nowiki> | <nowiki> | ||
code: | code: | ||
− | |||
− | |||
− | |||
#include "Adafruit_WS2801.h" | #include "Adafruit_WS2801.h" | ||
//#include "Color.h" | //#include "Color.h" | ||
Regel 183: | Regel 180: | ||
if (inserted > 7) { //was 6 | if (inserted > 7) { //was 6 | ||
// All butterflies were inserted | // All butterflies were inserted | ||
+ | // TODO error <=2 because testing. | ||
if(error < 2 && correct > 5) { | if(error < 2 && correct > 5) { | ||
// Minimal amount correct (allow 2 defects), green leds & output high | // Minimal amount correct (allow 2 defects), green leds & output high | ||
Regel 203: | Regel 201: | ||
myprints("\n"); | myprints("\n"); | ||
− | + | if(state != ok) | |
{ | { | ||
// All butterflies were inserted ok | // All butterflies were inserted ok | ||
Regel 227: | Regel 225: | ||
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); | ||
} | } | ||
</nowiki> | </nowiki> |
Versie van 25 jul 2015 10:15
Project: 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 |
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
// TODO error <=2 because testing.
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;
} else {
for(i=0; i<NUMPIXELS; i++) {
strip1.setPixelColor(i, off);
}
strip1.show();
digitalWrite(OUT, LOW);
}
delay(500);
}