Browse Source

new file: LICENSE

new file:   backplane.jpg
	new file:   readme.md
	new file:   top_board.jpg
	new file:   unabkraft.ino
	new file:   yellow_prints.png
master
Serguei Chmod777 6 years ago
commit
3f4d14f8fd
6 changed files with 346 additions and 0 deletions
  1. +19
    -0
      LICENSE
  2. BIN
      backplane.jpg
  3. +28
    -0
      readme.md
  4. BIN
      top_board.jpg
  5. +299
    -0
      unabkraft.ino
  6. BIN
      yellow_prints.png

+ 19
- 0
LICENSE View File

@ -0,0 +1,19 @@
Copyright (C) 2015 serguei.chmod777
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
--
So whatever, even if it appears as a nonsense within a GPL one to some
libre-fundamentalists, don't forget to use OpenBSD anyway, because it's
cool, and obviously, this system ain't (specially) for integrists!

BIN
backplane.jpg View File

Before After
Width: 1632  |  Height: 1696  |  Size: 1.3 MiB

+ 28
- 0
readme.md View File

@ -0,0 +1,28 @@
```
As I wrote, it's merely a toy simulating the behavior of... you know, which
starts a running of LEDs, before a buzzer blows up in a frightening ``bip!''.
However, the board could be used for lots of simple RTD tricks.
For those who do hacks on a keyboard after checking their hands are clean,
I mean living on OpenBSD (krkrkr), ``avrdude'' exists in the 'ports'.
So, after executing a ``make'' in the dev directory ('cause ``arduinoproject''
creates a sane Makefile), the following line (*) could give a hand for
uploading the code in the Arduino ("nano", I didn't mentioned it, just read the
header of the [sourceCode].ino) :
#======================upload.sh=========================#
#!/bin/sh
# To be loaded from the current project directory !
avrdude -p atmega328p -P /dev/cuaU0 -c stk500v1 -b 57600 (*)
-U flash:w:applet/unabkraft.hex
#========================================================#
--
The code name's root ain't specifically an ethical allusion, so if you
really wanna figure out where it comes from :
just look for some well known mad mathematician, Ted Kaczynski.
I want to emphasise that I disclaim forcefully any kind of transformation
of the current project, that would deal with the PWM pins... no need for
further details. Better promote WMP ! http://wmp.tetalab.org/
```

BIN
top_board.jpg View File

Before After
Width: 1707  |  Height: 1332  |  Size: 1.6 MiB

+ 299
- 0
unabkraft.ino View File

@ -0,0 +1,299 @@
/******************************************************************************\
* author : serguei_chmod77 (Arthur) *
* codename : unabkraft *
* testing board : unab77 *
* processor : at(mel)mega 328p *
* date : 07.08.2015 *
* version : 1.5.2 ``Boolzor powered'' *
* compiler : avrdude, OpenBSD 5.6 *
\******************************************************************************/
// Id of digital-pins by nicknames :
const int pushButt = 2;
const int ledBarA = 3, ledBarB = 4, ledBarC = 5, ledBarD = 6, ledBarE = 7;
const int ledBarF = 8, ledBarG = 9, ledBarH = 10, ledBarI = 11;
const int mainLed = 12, bell = 13;
// Some integer variables for arithmetical counts along loop() :
int i = 2000, k = 0, pb = 0, lb = 0, s = 0;
int lastDebounceTime = 0;
long ctDownSet = 0, dc = 0, cd = 0;
bool zor = true, modeState = false;
void defusing() {
zor = false;
}
void setup(void) {
// Pins input/output mode global setting :
pinMode(mainLed, OUTPUT);
pinMode(ledBarA, OUTPUT);
pinMode(ledBarB, OUTPUT);
pinMode(ledBarC, OUTPUT);
pinMode(ledBarD, OUTPUT);
pinMode(ledBarE, OUTPUT);
pinMode(ledBarF, OUTPUT);
pinMode(ledBarG, OUTPUT);
pinMode(ledBarH, OUTPUT);
pinMode(ledBarI, OUTPUT);
pinMode(bell, OUTPUT);
pinMode(pushButt, INPUT);
attachInterrupt(0, defusing, CHANGE);
}
void thisIsTheEnd() {
i = 2000;
while (i >= 400) {
if (zor) {
k=i/2;
s = i - 50;
digitalWrite(mainLed, HIGH);
digitalWrite(bell, HIGH);
delay(50);
digitalWrite(bell, LOW);
delay(s);
digitalWrite(mainLed, LOW);
delay(k);
i -= k;
}
else {
goto lastStraw;
}
}
while (i >= 20) {
if (zor) {
digitalWrite(mainLed, HIGH);
digitalWrite(bell, HIGH);
delay(i);
digitalWrite(mainLed, LOW);
digitalWrite(bell, LOW);
delay(i);
i -= 10;
}
else {
goto lastStraw;
}
}
i = 2000;
// Chenillard final
lb = 3;
while (lb < 12) {
digitalWrite(lb, HIGH);
delay(400);
lb ++;
}
delay(500);
lb = 3;
while (lb < 12) {
digitalWrite(lb, LOW);
lb ++;
}
lb = 3;
digitalWrite(bell, HIGH);
while (lb < 12) {
digitalWrite(lb, HIGH);
delay(100);
digitalWrite(lb, LOW);
lb ++;
}
lb = 10;
while (lb > 2) {
digitalWrite(lb, HIGH);
delay(100);
digitalWrite(lb, LOW);
lb --;
}
zor = true;
lastStraw:
digitalWrite(bell, LOW);
}
void initConditions() {
delay(300); // interruption debounce, else it'll jump the 'while'
lb = 3;
while ( lb < 12 ) {
digitalWrite(lb, LOW);
lb ++;
}
ctDownSet = 0;
k = 0;
dc = 0;
lastDebounceTime = 0;
modeState = false;
}
/* ========================================================================== */
void loop(void) {
clearSelect:
initConditions();
while ( modeState == false ) {
if ( ctDownSet < 2700001 ) {
k=ctDownSet/300000 + 2;
digitalWrite(k, HIGH);
if ( digitalRead(pushButt) == LOW ) {
lastDebounceTime = millis();
delay(300); // debounce
// check if the switch is pressed for a long time
if( digitalRead(pushButt) == LOW && ( lastDebounceTime - millis() ) > 5000 ) {
modeState = true;
i=0;
while( i<2 ) {
digitalWrite(bell, HIGH);
delay(200);
digitalWrite(bell, LOW);
delay(200);
i++;
}
delay(700);
goto sayByBye;
}
// otherwise (short pressure), just increment the countdown delay
else {
ctDownSet += 300000;
digitalWrite(mainLed, HIGH);
delay(300);
digitalWrite(mainLed, LOW);
}
}
}
else {
goto clearSelect;
}
}
sayByBye:
zor = true;
if (zor) {
if ( ctDownSet != 0 ) {
k=ctDownSet/300000;
while ( k > 1 ) {
//delay(300000);
dc = 0;
countDown:
while ( dc < 300001 ) {
if (zor) {
delay(10);
dc += 10;
}
else {
i = 0;
while ( i < 2 ) {
digitalWrite(mainLed, HIGH);
delay(300);
digitalWrite(mainLed, LOW);
delay(300);
i ++;
}
cd = 0;
while ( cd < 10001 ) {
delay(10);
cd += 10;
}
zor = true;
delay(400);
if (zor) {
i = 0;
while ( i < 2 ) {
digitalWrite(mainLed, HIGH);
delay(300);
digitalWrite(mainLed, LOW);
delay(300);
i ++;
}
goto countDown;
}
else {
goto jackFlash;
}
}
}
digitalWrite(k+2, LOW);
digitalWrite(k+1, HIGH);
k --;
}
dc = 0;
takeFive:
while ( dc < 300001 ) {
if (zor) {
delay(10);
dc += 10;
}
else {
i = 0;
while ( i < 2 ) {
digitalWrite(mainLed, HIGH);
delay(300);
digitalWrite(mainLed, LOW);
delay(300);
i ++;
}
cd = 0;
while ( cd < 10001 ) {
delay(10);
cd += 10;
}
zor = true;
delay(400);
if (zor) {
i = 0;
while ( i < 2 ) {
digitalWrite(mainLed, HIGH);
delay(300);
digitalWrite(mainLed, LOW);
delay(300);
i ++;
}
goto takeFive;
}
else {
goto jackFlash;
}
}
}
digitalWrite(3, LOW);
}
}
jackFlash:
if (zor) {
thisIsTheEnd();
if ( zor == false ) {
k = 11;
while ( k > 2 ) {
digitalWrite(k, HIGH);
k --;
}
k = 9;
goto defuseSign;
}
}
else {
defuseSign:
lb = k + 2;
while ( lb > 2 ) {
digitalWrite(bell, HIGH);
digitalWrite(lb, LOW);
delay(500 - lb*25);
digitalWrite(bell, LOW);
delay(200 - lb*15);
lb --;
}
}
return;
}

BIN
yellow_prints.png View File

Before After
Width: 763  |  Height: 603  |  Size: 703 KiB

Loading…
Cancel
Save