Offline
Newbie
Karma: 0
Posts: 16
|
 |
« on: October 08, 2012, 07:39:16 am » |
heilà. qualche giorno fa mi sono messo a fare una roba semplice con arduino: il sequencer che vedete in questa pagina http://www.beavisaudio.com/projects/digital/arduinopunkconsole/solo che il codice ha un bug: il pulsante Start/Stop non fa la funzione che dice di fare (devo tenerlo premuto per far uscire il suono). allora mi sono messo alla ricerca ed ho trovato questo: http://www.arduino.cc/en/Tutorial/Switchdato che presi singolarmente i due codici "funzionano", ne ho dedotto che avrei potuto incorporare il codice dello switch nel codice del sequencer, così da avere risolto il problema. come? copiando il codice e cercando di evitare collisioni tra i pin utilizzati in comune nei due codici. tipo muovendo il controllo dello switch al pin 10, e dicendo al sequencer di guardare cosa succede al pin 13 per sapere se far partire il sequencer o meno. E INVECE NO! una volta incorporato, ricevo uno o due errori di "unexpected unqualified-id before { token" e non riesco a localizzarlo... ma credo che il problema stia nel modo in cui incorporo il codice dello switch... ...e non capiso il perchè :\ ...un aiutino su come "mergere" i due codici? Grazie! grazie!!!!
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 17007
Don't know what I do
|
 |
« Reply #1 on: October 08, 2012, 08:05:10 am » |
Il problema pare una parentesi di troppo o di meno. Ti devi mettere con pazienza a ricontrollarle tutte finché non trovi l'errore.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 16
|
 |
« Reply #2 on: October 08, 2012, 08:06:23 am » |
il bello è che adesso il codice originale del sito adesso non va più.
LOL.
una divinità superiore ed alquanto burlona ha cambiato la pagina nottetempo?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 16
Posts: 1829
|
 |
« Reply #3 on: October 08, 2012, 08:10:05 am » |
Il problema pare una parentesi di troppo o di meno. Ti devi mettere con pazienza a ricontrollarle tutte finché non trovi l'errore.
notepad++ può aiutarti 
|
|
|
|
|
Logged
|
"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 17007
Don't know what I do
|
 |
« Reply #4 on: October 08, 2012, 08:18:28 am » |
Il problema pare una parentesi di troppo o di meno. Ti devi mettere con pazienza a ricontrollarle tutte finché non trovi l'errore.
notepad++ può aiutarti  Geany può aiutarti 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 16
|
 |
« Reply #5 on: October 08, 2012, 08:56:21 am » |
non riesco a capire. vi comunico il codice e l'errore... sembra che ogni "compilatore" parli una lingua sua :\ questo è il codice /* ====================================================================== 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()
{ pinMode(inPin, INPUT); pinMode(outPin, OUTPUT); }
{ // 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); // 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 } } e questo è l'errore: sketch_oct06a_pippo.cpp:76:1: error: expected unqualified-id before ‘{’ token solo che le righe 75-76-77 sono queste: pinMode (DigitalInSwitch5, INPUT); pinMode (DigitalInSwitch6, INPUT); pinMode (DigitalInSwitch7, INPUT); e nessuna traccia di parentesi graffe :\
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 16
Posts: 1829
|
 |
« Reply #6 on: October 08, 2012, 09:07:50 am » |
prova un po con questo /* ====================================================================== 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()
{ pinMode(inPin, INPUT); pinMode(outPin, OUTPUT); } void loop()
{ // 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); // 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 } }
|
|
|
|
|
Logged
|
"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 16
|
 |
« Reply #7 on: October 08, 2012, 09:08:40 am » |
EUREKA!!!!ho trovato l'errore, con un metodo del tipo cancella-vedi se carica-ctrl+z-e così via... per un motivo a me sconosciuto, dovevo scrivere: 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(); } al posto di: void setup()
{ pinMode(inPin, INPUT); pinMode(outPin, OUTPUT); }
{ // 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); // setup comms for the LCD display Serial.begin(9600);
StartupMessage(); } per una ragione che assolutamente non comprendo, { pinMode(inPin, INPUT); pinMode(outPin, OUTPUT); }
non va bene. grazie a tutti cmq!!!! 
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Tesla Member
Karma: 87
Posts: 8499
:(){:|:&};:
|
 |
« Reply #8 on: October 08, 2012, 09:51:03 am » |
motivo assolutamente misterioso?? void setup()
{ pinMode(inPin, INPUT); pinMode(outPin, OUTPUT); }
{ quì ci sta l'errore. ma immagino che parlarti di funzione non abbia senso... quandi lascio la info ai posteri
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 16
|
 |
« Reply #9 on: October 08, 2012, 10:09:54 am » |
quì ci sta l'errore. ma immagino che parlarti di funzione non abbia senso non c'è problema, ho risolto  dato che smanetto con il codice da un giorno e non ho mai mai mai studiato programmazione all'infuori di un pò di TurboPASCAL al liceo, mi ritengo abbastanza soddisfatto! grazie ancora!
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 17007
Don't know what I do
|
 |
« Reply #10 on: October 08, 2012, 10:15:07 am » |
Ma anche nel Turbo Pascal si avevano i blocchi di codice... Se tu scrivi void setup() { abc } { def }
mi dici il blocco "def" a chi appartiene? 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 16
Posts: 1829
|
 |
« Reply #11 on: October 08, 2012, 10:23:14 am » |
Ma anche nel Turbo Pascal si avevano i blocchi di codice... Se tu scrivi void setup() { abc } { def }
mi dici il blocco "def" a chi appartiene?  io amavo il pascal 
|
|
|
|
|
Logged
|
"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 16
|
 |
« Reply #12 on: October 08, 2012, 10:52:03 am » |
uh... la uno? no no, io con la programmazione sono a livello ameba. l'importante è che adesso funzioni  più o meno qualcosa ho capito 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 17007
Don't know what I do
|
 |
« Reply #13 on: October 08, 2012, 10:54:45 am » |
io amavo il pascal  Anch'io. Secondo me è stato uno dei migliori linguaggi strutturati degli anni '80. Per semplicità e potenza faceva concorrenza al C.
|
|
|
|
|
Logged
|
|
|
|
|
|