2016-07-22 4 views
0

ich derzeit an einem Projekt arbeitete mit einem Metronom mit Arduino, Partikel Photon zu bauen, und ein basisches Elektrotechnik eingerichtet.Q: Mit analogRead von einem Potentiometer

für dieses Projekt Mein Ziel ist es durch das Einstellen/Drehen des Potentiometers und Anzeige der aktuelle BPM off einen OLED-Bildschirm, um es einfach zu justieren, das Tempo zu machen. Das Problem ist jedoch, dass wenn ich das Potentiometer drehe, es den Wert des Tempos durch nichts ändert. Das weiß ich, weil der Summer nicht piept und die OLED liest, dass der aktuelle BPM 0.

// This #include statement was automatically added by the Particle IDE. 
#include "SparkFunMicroOLED/SparkFunMicroOLED.h" 



#define PIN_RESET D7 
#define PIN_DC D6 
#define PIN_CS A2 

MicroOLED oled(MODE_SPI, PIN_RESET, PIN_DC, PIN_CS); 


int speakerPin = D2; 
int potenMeter = A4; 

void setup() { 
    pinMode(speakerPin, OUTPUT); 
    pinMode(potenMeter, INPUT); 
    oled.begin(); 
    oled.clear(ALL); 

} 

void loop() { 

    oled.clear(PAGE); 
    oled.setFontType(0); 
    oled.setCursor(20,0); 

    int bpm = (analogRead(potenMeter)/4095) * 180; 
    tone(speakerPin, 50, 100); 
    delay(bpm); 


    oled.printf("BPM: %d", bpm); 
    oled.display(); 
} 

ist Jedes Mal, wenn ich das Programm auf meinem Steckbrett/Photon blinken, zeigt das OLED immer, dass bpm-0 gleich ist. .. Auch wenn ich es einstelle. Ich bin mir ziemlich sicher, dass mit der Elektronik nichts falsch ist, da ich alles separat getestet habe.

+0

Versuchen, um die Multiplikation vor der Teilung auszuführen: 'int bpm = (analogRead (potenMeter) * 180)/4095;' –

+0

Was @EttoreBarattelli sagt, ist richtig . Es gibt auch andere Dinge, die Sie vielleicht korrigieren möchten. Welchen Arduino verwendest du? – dubafek

+0

stimme ich auch mit Ettore, zusätzlich: die Arduinos I khow bieten nur 10-Bit-ADC, eine Reihe von 1024 Werte (0 .. 1023). Also würde ich * 180UL/1024 berechnen. – datafiddler

Antwort

0

Ich habe keine Erfahrung in Arduino aber ich denke, Sie nicht pinMode(potenMeter, INPUT); für einen Analogeingang einstellen müssen. Denken Sie auch daran, dass A4 nicht Pin Nummer 4 Ihres Boards sein muss.

+0

nicht erforderlich, sollte aber verletzt – datafiddler

+0

nicht ** Es ist nicht ein Arduino **, Teilchen Photon Referenz sagt 'Vor 0.5.3 Hinweis: nicht setzen die pinMode() mit analogRead(). ' – datafiddler

0

analogRead (potenMeter)/4095

eine ganze Zahl der Division und gibt in der Regel 0.

Standard ist int arithmetics.

Auf einem 8-Bit-Arduino, werden Sie leicht in einen 16-Bit-Integer-Überlauf laufen. aber Teilchen Photonen scheinen eine 32-Bit-Sache