Ich habe seit heute meinen ersten Arduino, und komme so mäßig damit klar. Ich habe mir einen Sparkfun Pro Micro gekaufte. Diesen möchte ich zum Simulieren einer Tastatur verwenden. Ich hatte ihn dazu an meinen Mac angeschlossen, und sofort ging das Fenster auf, dass ich eine Tastatur angeschlossen hätte. Dann habe ich ihn probeweise wie folgt programmiert:
int buttonPin = 9; // Set a button to any pin
void setup()
{
pinMode(buttonPin, INPUT); // Set the button as an input
digitalWrite(buttonPin, HIGH); // Pull the button high
}
void loop()
{
if (digitalRead(buttonPin) == 0) // if the button goes low
{
Keyboard.write('z'); // send a 'z' to the computer via Keyboard HID
delay(1000); // delay so there aren't a kajillion z's
}
}
Wenn ich ihn dann an den Mac anschließe, kommt kein Hinweis, dass irgendetwas angeschlossen wurde, und wenn PIN 9 an Masse gelegt wird erscheint im Texteditor auch kein "z".
Was mache ich denn falsch?
Kann man den Pro Micro auf Werkseinstellungen zurücksetzen? Oder muss ich dazu den Bootloader mit einem Programmer neu einspielen?
Danke schon mal für eure Tips und Hilfestellungen.
Blaubart:
Wenn ich ihn dann an den Mac anschließe, kommt kein Hinweis, dass irgendetwas angeschlossen wurde, und wenn PIN 9 an Masse gelegt wird erscheint im Texteditor auch kein "z".
Was mache ich denn falsch?
Wenn Du beispielsweise einen "SparkFun Pro Micro 5V/16MHz" hast, hast Du dann unter "Board" auch das Board "SparkFun Pro Micro 5V/16MHz" ausgewählt?
Falls nein: Wähle das Board aus!
Merke: Ein "SparkFun Pro Micro 5V/16MHz" ist KEIN "Arduino Micro"!
Wenn bei Dir die Boardauswahl für das richtige SparkFun ProMicro Board fehlt, dann hast Du für diese Boards notwendigen AddOn Files von Sparkfun nicht installiert.
Ich hab den Sparkfun Pro Micro 3,3 V von Ebay.
Das richtige Bord habe ich in Arduino 1.0.5 ausgewählt. Dazu hatte ich AddOn Files von Sparkfun bereits installiert.
Das Blinkies kann ich auch installieren:
/* Pro Micro Test Code
by: Nathan Seidle
modified by: Jim Lindblom
SparkFun Electronics
date: September 16, 2013
license: Public Domain - please use this code however you'd like.
It's provided as a learning tool.
This code is provided to show how to control the SparkFun
ProMicro's TX and RX LEDs within a sketch. It also serves
to explain the difference between Serial.print() and
Serial1.print().
*/
int RXLED = 17; // The RX LED has a defined Arduino pin
// The TX LED was not so lucky, we'll need to use pre-defined
// macros (TXLED1, TXLED0) to control that.
// (We could use the same macros for the RX LED too -- RXLED1,
// and RXLED0.)
void setup()
{
pinMode(RXLED, OUTPUT); // Set RX LED as an output
// TX LED is set as an output behind the scenes
Serial.begin(9600); //This pipes to the serial monitor
Serial1.begin(9600); //This is the UART, pipes to sensors attached to board
}
void loop()
{
Serial.println("Hello world"); // Print "Hello World" to the Serial Monitor
Serial1.println("Hello!"); // Print "Hello!" over hardware UART
digitalWrite(RXLED, LOW); // set the LED on
TXLED0; //TX LED is not tied to a normally controlled pin
delay(1000); // wait for a second
digitalWrite(RXLED, HIGH); // set the LED off
TXLED1;
delay(1000); // wait for a second
}
Sparkfun bei ebay? Eher nein. Ich denke, dein Board ist auch blau und nicht rot. Das sind keine Orginale.
Teste mal
// use this option for OSX:
char ctrlKey = KEY_LEFT_GUI;
// use this option for Windows and Linux:
// char ctrlKey = KEY_LEFT_CTRL;
void setup() {
// make pin 2 an input and turn on the
// pullup resistor so it goes high unless
// connected to ground:
pinMode(2, INPUT_PULLUP);
// initialize control over the keyboard:
Keyboard.begin();
}
void loop() {
while (digitalRead(2) == HIGH) {
// do nothing until pin 2 goes low
delay(500);
}
delay(1000);
// new document:
Keyboard.press(ctrlKey);
Keyboard.press('n');
delay(100);
Keyboard.releaseAll();
// wait for new window to open:
delay(1000);
}
Ja, ist blau, also Nachbau.
Ich habe deinen Code hochgeladen, der mac erkennt kein Gerät.
Inzwischen habe ich gelesen, dass beim Leonardo die Pins nicht direkt an GND gelegt werden dürfen, sondern dass ein Widerstand dazwischen sein muss. Ich gehe mal stark davon aus, dass das bei meinem Board auch so sein muss. Da ich davon erst jetzt gelesen habe, habe ich immer eine direkte Brücke zwischen den PIN und GND gelegt.
Blaubart:
Inzwischen habe ich gelesen, dass beim Leonardo die Pins nicht direkt an GND gelegt werden dürfen, sondern dass ein Widerstand dazwischen sein muss.
Dazwischen muss da kein Widerstand. Es geht dabei darum, dass der Pin einen definierten Pegel braucht. Wenn du ihn als INPUT definierst, hängt er in der Luft und hat einen beliebigen Wert. Deshalb braucht man da 10k gegen Vcc damit er einen definierten Pegel hat.
Einfach geht es du aktivierst die internen Pullups:
pinMode(buttonPin, INPUT_PULLUP);
Dann liegt der Pin ungedrückt auf Vcc und du kannst ihn ohne externen Widerstand auf Masse ziehen.
Es geht. Ich hab den Fehler gefunden. Mein Board ist nicht markiert, ob es 3,3V oder 5V ist. Also hatte ich ausprobiert. Irgendwie hatte bei 5V der Upload aber nicht funktioniert. daher dachte ich, es sein 3,3V. Jetzt habe ich zufällig noch einmal getestet, und siehe da alles funktioniert wie gewünscht.
Das ist die andere Variante mit Pulldowns statt Pullups. Genau anders herum.
Damit ist der Taster gedrückt High und ungedrückt Low. Das wird beim Arduino gern verwendet, da es für Anfänger einfacher ist wenn die logischen Zustände so sind (an -> HIGH), aber in der Elektronik sind Pullups der normale Weg. Geht aber beides. Man muss nur seine Abfragen richtig machen.
Mit den internen Pullups spart man sich jedoch die Widerstände.