well... now it works ![]()
i've inserted a code i've found "near here" to make the button act as switch:
/* ======================================================================
Arduino Punk Console
A simple programmable 8 step tone sequencer
by dano/beavisaudio.com
Revs
-----------------------------------
15 Sept djh initial version
======================================================================*/
// Map all the input and output pins
#define AnalogInFrequency 1
#define AnalogInTempo 2
#define AnalogInDuration 0
#define DigitalOutSignal 11
#define DigitalInSwitch0 2
#define DigitalInSwitch1 3
#define DigitalInSwitch2 4
#define DigitalInSwitch3 5
#define DigitalInSwitch4 6
#define DigitalInSwitch5 7
#define DigitalInSwitch6 8
#define DigitalInSwitch7 9
#define DigitalOutLED 1
// Set up the array for each step
int steps[] = {100,120,140,160,180,200,220,240};
// misc housekeeping
int duration = 50;
int pitchval = 1;
int fPlayMode = true;
int lastPushedStep = -1;
int Button = 0; //This is the default "Button Off" and 1 is "Button On"
int OldButton = 0; //I'll explain later
// Initialize the tempo
int tempo = 100;
/* switch
*
* Each time the input pin goes from LOW to HIGH (e.g. because of a push-button
* press), the output pin is toggled from LOW to HIGH or HIGH to LOW. There's
* a minimum delay between toggles to debounce the circuit (i.e. to ignore
* noise).Â
*
* David A. Mellis
* 21 November 2006
*/
int inPin = 10;Â Â Â Â // the number of the input pin
int outPin = 13;Â Â Â // the number of the output pin
int state = HIGH;Â Â Â // the current state of the output pin
int reading;Â Â Â Â Â // the current reading from the input pin
int previous = LOW;Â Â // the previous reading from the input pin
// the follow variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long time = 0;Â Â Â Â // the last time the output pin was toggled
long debounce = 200;Â // the debounce time, increase if the output flickers
void setup()
{
 // setup pin modes (Digital pins are input by default, but
 // I like to set 'em explicitly just so the code is clear.
 pinMode (DigitalInSwitch0, INPUT);
 pinMode (DigitalInSwitch1, INPUT);
 pinMode (DigitalInSwitch2, INPUT);
 pinMode (DigitalInSwitch3, INPUT);
 pinMode (DigitalInSwitch4, INPUT);
 pinMode (DigitalInSwitch5, INPUT);
 pinMode (DigitalInSwitch6, INPUT);
 pinMode (DigitalInSwitch7, INPUT);
 pinMode (DigitalOutSignal, OUTPUT);Â
 pinMode (DigitalOutLED, OUTPUT);
 pinMode(inPin, INPUT);
 pinMode(outPin, OUTPUT);
 // setup comms for the LCD display
 Serial.begin(9600);
 StartupMessage();
}
void StartupMessage()
{
 clearLCD();
 Serial.print ("BEAVIS: Arduino");
 delay(300);
 Serial.print (254, BYTE);
 Serial.print (192, BYTE);
 Serial.print ("Punk Console!");
 delay (2000);
 clearLCD();
 Serial.print ("Beavis: APC");
}
void clearLCD()
{
 Serial.print(254, BYTE);
 Serial.print(1, BYTE);
}
void loop()
{
 // Main sequence loopÂ
 for (int i=0; i<8; i++)
 {Â
  // Are we playing or stopping?
 {
 reading = digitalRead(inPin);
 // if the input just went from LOW and HIGH and we've waited long enough
 // to ignore any noise on the circuit, toggle the output pin and remember
 // the time
 if (reading == HIGH && previous == LOW && millis() - time > debounce)
 {
  if (state == HIGH)
   state = LOW;
  else
   state = HIGH;
  time = millis(); Â
 }
 digitalWrite(outPin, state);
 previous = reading;
}
 Â
  fPlayMode = digitalRead (13);
  digitalWrite (DigitalOutLED, HIGH);
  // Check the Hardware
  readSwitches();
  readPots();
  // update the display
  updateDisplay();
  // Make the noise
  if (fPlayMode)
  {
   freqout (steps[i], duration);
  }
  digitalWrite (DigitalOutLED, LOW);
  // Pause between steps
  delay (tempo);  Â
 }
}
void updateDisplay()
{
 Serial.print (254, BYTE);
 Serial.print (192, BYTE);
 Serial.print ("T:");
 Serial.print (tempo);
 Serial.print (" d:");
 Serial.print (duration);
if (lastPushedStep != -1)
{
  Serial.print ("*");
  Serial.print (lastPushedStep);
}
}
// Read the current values of the pots, called from the loop.
void readPots ()
{
  tempo = (analogRead (AnalogInTempo) * 1.9);
  duration = (analogRead (AnalogInDuration));  Â
}
// Read the current values of the switches and
// if pressed, replace the switch's slot frequency
// by reading the frequency pot.
void readSwitches()
{
 // reset last pushed button number
 lastPushedStep = -1;
 // check switch 0, if pressed, get the current freq into step 0, etc. etc.
 if (digitalRead (DigitalInSwitch0) == HIGH)
 {
  steps[0] = analogRead(AnalogInFrequency);
  lastPushedStep = 1;
 }
 else if (digitalRead (DigitalInSwitch1) == HIGH)
 {
  steps[1] = analogRead(AnalogInFrequency);
  lastPushedStep = 2;
 }
 else if (digitalRead (DigitalInSwitch2) == HIGH)
 {
  steps[2] = analogRead(AnalogInFrequency);
  lastPushedStep = 3;
 }
 else if (digitalRead (DigitalInSwitch3) == HIGH)
 {
  steps[3] = analogRead(AnalogInFrequency);
  lastPushedStep = 4;
 }
 else if (digitalRead (DigitalInSwitch4) == HIGH)
 {
  steps[4] = analogRead(AnalogInFrequency);
  lastPushedStep = 5;
 }
 else if (digitalRead (DigitalInSwitch5) == HIGH)
 {
  steps[5] = analogRead(AnalogInFrequency);
  lastPushedStep = 6;
 }
 else if (digitalRead (DigitalInSwitch6) == HIGH)
 {
  steps[6] = analogRead(AnalogInFrequency);
  lastPushedStep = 7;
 }
 else if (digitalRead (DigitalInSwitch7) == HIGH)
 {
  steps[7] = analogRead(AnalogInFrequency);
  lastPushedStep = 8;
 }
}
//freqout code by Paul Badger
// freq - frequency value
// t - time duration of tone
void freqout(int freq, int t)
{
 int hperiod;  //calculate 1/2 period in us
 long cycles, i;
 // subtract 7 us to make up for digitalWrite overhead - determined empirically
 hperiod = (500000 / ((freq - 7) * pitchval));     Â
 // calculate cycles
 cycles = ((long)freq * (long)t) / 1000;  // calculate cycles
 for (i=0; i<= cycles; i++)
 {       // play note for t msÂ
  digitalWrite(DigitalOutSignal, HIGH);Â
  delayMicroseconds(hperiod);
  digitalWrite(DigitalOutSignal, LOW);Â
  delayMicroseconds(hperiod - 1);  // - 1 to make up for fractional microsecond in digitaWrite overhead
 }
}
now works ![]()
thanks for the hints!