Aus Wikiants
/*
* Analog out starts increasing with digital in and decreasing over serial
* This prog is licensed under a Attribution-Noncommercial-Share Alike 2.0 Creative Commons License.
*
* by patsch
*/
// Pins
int aOUT = 9; // Analog Out, connected to digital pin 9
int aIN = 10; // Analog In, connected to digital pin 10
int dINup = 8; // Digita In, connected to digital pin 8
int dINdown = 7;
int dIN1 = 2; // Digital In, starts the analogout
int dIN2 = 3; // Ditital In, stops the analogout
// Program variables
int value = 0; // 0 = GND / 128 = 2.5 Volt / 255 = 5 V
int speed = 108; // set Analog max. // 108 // 93
int check = 110; // auf keinem fall zu schnell!!!!
int speedvar = 0;
int incr = 0;
int decr = 0;
int decrr = 0;
int digiup = 0;
int digidown = 0;
int digistart = 0;
int digis = 0;
int digistop = 0;
int seriIN = 0;
int serival = 0;
int wait = 300; // 50ms (.05 second) delay; shorten for faster fades / 10
int stri = 0;
void setup()
{
pinMode(aOUT, OUTPUT); // sets the pins as output
pinMode(aIN, INPUT);
pinMode(dINup, INPUT);
pinMode(dINdown, INPUT);
pinMode(dIN1, INPUT);
pinMode(dIN2, INPUT);
beginSerial(9600); // begin sending over serial port
}
// Main program
void loop()
{
if (value > check)
{
analogWrite(aOUT, 0);
Serial.print('0');
}
// ----------------- read serial ---------------- //
seriIN = serialRead();
if (seriIN != -1)
{
serival = seriIN;
}
else
{
serival = 0 ; // reseting value
}
if (serival == 112) // stop | 112 = p | 65= ASCI for A | 66 = B | 27 = esc | 32 = space
{
if (decrr == 0)
{
decr = 1;
incr = 0;
Serial.print('0');
}
}
if (serival == 115) // s | start
{
decr = 0;
incr = 1;
Serial.print('1');
}
if (serival == 65) // A
{
speed += 1;
speedvar = 1;
}
if (serival == 66) // B
{
speed -= 1;
speedvar = 1;
}
if (serival == 122) // z
{
Serial.println(speed);
}
// --------- read digital start - write serial --------- //
if (digistart == 0)
{
if (decrr == 0)
{
digis = digitalRead(dIN2); // start only, if it isn't decreasing
}
if (digis == 1)
{
digistart = 1;
}
}
if (digistop == 0)
{
if (decrr == 0)
{
if (digistart == 1)
{
incr = 1;
decr = 0;
// Serial.print('1');
// digistart = 0;
}
}
}
// ------------ read digital stop - write serial ----------- //
delay(50); // Pause for 50 milliseconds before resuming the loop
// digistop = digitalRead(dIN1);
// if (digistop == 1)
// {
// if (decrr == 0)
// {
// decr = 1;
// incr = 0;
// Serial.print('0');
// Serial.print('r', BYTE);
// }
// }
digistop = digitalRead(dIN1); // din2 als start und stop funkt auch!!! : )
if (digistop == 1)
{
if (decrr == 0)
{
decr = 1;
incr = 0;
// Serial.print('0');
Serial.print('l', BYTE);
}
}
// ------------------------------------------------------------ //
if (incr == 1)
{
if (value < speed) // check if the max. analog out is arrived
{
if (value == 0)
{
value = 60;
}
else
{
delay(wait);
}
value += 1; // Increment counter
decrr = 0; // make active for stop
Serial.print('1');
}
else
{
digistart = 0;
incr = 0;
decrr = 0;
// while (x == 0)
// {
// x = Serial.read();
// }
// x = 0;
// Serial.print('mplayerstart');
}
// Serial.print(value, HEX); // Serial.print("\t"); // serialWrite(value);
}
if (decr == 1)
{
if (value > 0) // check if the lowest possibility is arrived
{
value -= 1; // Decrement counter
decrr = 1;
delay(200);
Serial.print('0');
}
if (value == 60)
{
value = 0;
digistart = 0;
decr = 0;
decrr = 0;
incr = 0;
Serial.print('0');
}
}
if (speedvar == 1)
{
if (value < speed) // check if the max. analog out is arrived
{
value += 1; // Increment counter
}
else
{
value -= 1;
}
speedvar = 0;
// Serial.print(value, HEX); // Serial.print("\t"); // serialWrite(value);
}
// Serial.println(ssend);
// Serial.print("\t");
analogWrite(aOUT, value);
}