Warum ist das Demokit-Programm für die ADK in Arduino nicht kompiliert?

Ich habe ein ziemlich gutes Verständnis von Arduino und Java, und ich beschloss, einen Stich zu versuchen, meine Arduino ATMega mit meinem Samsung Galaxy 10.1 Tab zu kontrollieren. Ich habe API 12 mit dem SDK Manager, dem ADT Plugin für Eclipse, installiert und nun folge ich die Anleitung von der Installation der Arduino Software und notwendigen Bibliotheken (bei Android Open Accessory Development Kit ), um die Firmware für das ADK Board zu installieren. Wenn ich kompiliere, gibt es mir zwei Fehler:

Demokit: 146: fehler: 'acc' wurde in diesem bereich nicht deklariert

  • Vorgeschlagenes Protokoll für android-arduino Kommunikation
  • Ein "Hello World" Tutorial für Arduino und Android
  • Wie kann man eine Android App erstellen, um Arduino über Wi-Fi zu steuern?
  • Einschließlich anderer Eclipse-Projekte in einem Android-Anwendungsprojekt
  • Arduino ADK + android LED blinke Beispiel Kompilierfehler
  • Android ADK mit PC als USB Host mit libusb, Massenübertragungsfehler
  • Demokit: 249: Fehler: 'touch_robot' wurde in diesem Bereich nicht deklariert

    und sagt

    'AndroidAccessory' benennt keinen Typ.

    Der Code sieht so aus:

    #include <Wire.h> #include <Servo.h> #include <Max3421e.h> #include <Usb.h> #include <AndroidAccessory.h> #include <CapSense.h> #define LED3_RED 2 #define LED3_GREEN 4 #define LED3_BLUE 3 #define LED2_RED 5 #define LED2_GREEN 7 #define LED2_BLUE 6 #define LED1_RED 8 #define LED1_GREEN 10 #define LED1_BLUE 9 #define SERVO1 11 #define SERVO2 12 #define SERVO3 13 #define TOUCH_RECV 14 #define TOUCH_SEND 15 #define RELAY1 A0 #define RELAY2 A1 #define LIGHT_SENSOR A2 #define TEMP_SENSOR A3 #define BUTTON1 A6 #define BUTTON2 A7 #define BUTTON3 A8 #define JOY_SWITCH A9 // pulls line down when pressed #define JOY_nINT A10 // active low interrupt input #define JOY_nRESET A11 // active low reset output AndroidAccessory acc("Google, Inc.", "DemoKit", "DemoKit Arduino Board", "1.0", "http://www.android.com", "0000000012345678"); Servo servos[3]; // 10 Mohm resistor on demo shield CapSense touch_robot = CapSense(TOUCH_SEND, TOUCH_RECV); void setup(); void loop(); void init_buttons() { pinMode(BUTTON1, INPUT); pinMode(BUTTON2, INPUT); pinMode(BUTTON3, INPUT); pinMode(JOY_SWITCH, INPUT); // enable the internal pullups digitalWrite(BUTTON1, HIGH); digitalWrite(BUTTON2, HIGH); digitalWrite(BUTTON3, HIGH); digitalWrite(JOY_SWITCH, HIGH); } void init_relays() { pinMode(RELAY1, OUTPUT); pinMode(RELAY2, OUTPUT); } void init_LEDs() { digitalWrite(LED1_RED, 1); digitalWrite(LED1_GREEN, 1); digitalWrite(LED1_BLUE, 1); pinMode(LED1_RED, OUTPUT); pinMode(LED1_GREEN, OUTPUT); pinMode(LED1_BLUE, OUTPUT); digitalWrite(LED2_RED, 1); digitalWrite(LED2_GREEN, 1); digitalWrite(LED2_BLUE, 1); pinMode(LED2_RED, OUTPUT); pinMode(LED2_GREEN, OUTPUT); pinMode(LED2_BLUE, OUTPUT); digitalWrite(LED3_RED, 1); digitalWrite(LED3_GREEN, 1); digitalWrite(LED3_BLUE, 1); pinMode(LED3_RED, OUTPUT); pinMode(LED3_GREEN, OUTPUT); pinMode(LED3_BLUE, OUTPUT); } void init_joystick(int threshold); byte b1, b2, b3, b4, c; void setup() { Serial.begin(115200); Serial.print("\r\nStart"); init_LEDs(); init_relays(); init_buttons(); init_joystick( 5 ); // autocalibrate OFF touch_robot.set_CS_AutocaL_Millis(0xFFFFFFFF); servos[0].attach(SERVO1); servos[0].write(90); servos[1].attach(SERVO2); servos[1].write(90); servos[2].attach(SERVO3); servos[2].write(90); b1 = digitalRead(BUTTON1); b2 = digitalRead(BUTTON2); b3 = digitalRead(BUTTON3); b4 = digitalRead(JOY_SWITCH); c = 0; acc.powerOn(); } void loop() { byte err; byte idle; static byte count = 0; byte msg[3]; long touchcount; if (acc.isConnected()) { int len = acc.read(msg, sizeof(msg), 1); int i; byte b; uint16_t val; int x, y; char c0; if (len > 0) { // assumes only one command per packet if (msg[0] == 0x2) { if (msg[1] == 0x0) analogWrite(LED1_RED, 255 - msg[2]); else if (msg[1] == 0x1) analogWrite(LED1_GREEN, 255 - msg[2]); else if (msg[1] == 0x2) analogWrite(LED1_BLUE, 255 - msg[2]); else if (msg[1] == 0x3) analogWrite(LED2_RED, 255 - msg[2]); else if (msg[1] == 0x4) analogWrite(LED2_GREEN, 255 - msg[2]); else if (msg[1] == 0x5) analogWrite(LED2_BLUE, 255 - msg[2]); else if (msg[1] == 0x6) analogWrite(LED3_RED, 255 - msg[2]); else if (msg[1] == 0x7) analogWrite(LED3_GREEN, 255 - msg[2]); else if (msg[1] == 0x8) analogWrite(LED3_BLUE, 255 - msg[2]); else if (msg[1] == 0x10) servos[0].write(map(msg[2], 0, 255, 0, 180)); else if (msg[1] == 0x11) servos[1].write(map(msg[2], 0, 255, 0, 180)); else if (msg[1] == 0x12) servos[2].write(map(msg[2], 0, 255, 0, 180)); } else if (msg[0] == 0x3) { if (msg[1] == 0x0) digitalWrite(RELAY1, msg[2] ? HIGH : LOW); else if (msg[1] == 0x1) digitalWrite(RELAY2, msg[2] ? HIGH : LOW); } } msg[0] = 0x1; b = digitalRead(BUTTON1); if (b != b1) { msg[1] = 0; msg[2] = b ? 0 : 1; acc.write(msg, 3); b1 = b; } b = digitalRead(BUTTON2); if (b != b2) { msg[1] = 1; msg[2] = b ? 0 : 1; acc.write(msg, 3); b2 = b; } b = digitalRead(BUTTON3); if (b != b3) { msg[1] = 2; msg[2] = b ? 0 : 1; acc.write(msg, 3); b3 = b; } b = digitalRead(JOY_SWITCH); if (b != b4) { msg[1] = 4; msg[2] = b ? 0 : 1; acc.write(msg, 3); b4 = b; } switch (count++ % 0x10) { case 0: val = analogRead(TEMP_SENSOR); msg[0] = 0x4; msg[1] = val >> 8; msg[2] = val & 0xff; acc.write(msg, 3); break; case 0x4: val = analogRead(LIGHT_SENSOR); msg[0] = 0x5; msg[1] = val >> 8; msg[2] = val & 0xff; acc.write(msg, 3); break; case 0x8: read_joystick(&x, &y); msg[0] = 0x6; msg[1] = constrain(x, -128, 127); msg[2] = constrain(y, -128, 127); acc.write(msg, 3); break; case 0xc: touchcount = touch_robot.capSense(5); c0 = touchcount > 750; if (c0 != c) { msg[0] = 0x1; msg[1] = 3; msg[2] = c0; acc.write(msg, 3); c = c0; } break; } } else { // reset outputs to default values on disconnect analogWrite(LED1_RED, 255); analogWrite(LED1_GREEN, 255); analogWrite(LED1_BLUE, 255); analogWrite(LED2_RED, 255); analogWrite(LED2_GREEN, 255); analogWrite(LED2_BLUE, 255); analogWrite(LED3_RED, 255); analogWrite(LED3_GREEN, 255); analogWrite(LED3_BLUE, 255); servos[0].write(90); servos[0].write(90); servos[0].write(90); digitalWrite(RELAY1, LOW); digitalWrite(RELAY2, LOW); } delay(10); } // ============================================================================== // Austria Microsystems i2c Joystick void init_joystick(int threshold) { byte status = 0; pinMode(JOY_SWITCH, INPUT); digitalWrite(JOY_SWITCH, HIGH); pinMode(JOY_nINT, INPUT); digitalWrite(JOY_nINT, HIGH); pinMode(JOY_nRESET, OUTPUT); digitalWrite(JOY_nRESET, 1); delay(1); digitalWrite(JOY_nRESET, 0); delay(1); digitalWrite(JOY_nRESET, 1); Wire.begin(); do { status = read_joy_reg(0x0f); } while ((status & 0xf0) != 0xf0); // invert magnet polarity setting, per datasheet write_joy_reg(0x2e, 0x86); calibrate_joystick(threshold); } int offset_X, offset_Y; void calibrate_joystick(int dz) { char iii; int x_cal = 0; int y_cal = 0; // Low Power Mode, 20ms auto wakeup // INTn output enabled // INTn active after each measurement // Normal (non-Reset) mode write_joy_reg(0x0f, 0x00); delay(1); // dummy read of Y_reg to reset interrupt read_joy_reg(0x11); for(iii = 0; iii != 16; iii++) { while(!joystick_interrupt()) {} x_cal += read_joy_reg(0x10); y_cal += read_joy_reg(0x11); } // Divide by 16 to get average offset_X = -(x_cal>>4); offset_Y = -(y_cal>>4); write_joy_reg(0x12, dz - offset_X); // Xp, LEFT threshold for INTn write_joy_reg(0x13, -dz - offset_X); // Xn, RIGHT threshold for INTn write_joy_reg(0x14, dz - offset_Y); // Yp, UP threshold for INTn write_joy_reg(0x15, -dz - offset_Y); // Yn, DOWN threshold for INTn // Dead zone threshold detect requested? if (dz) write_joy_reg(0x0f, 0x04); } void read_joystick(int *x, int *y) { *x = read_joy_reg(0x10) + offset_X; *y = read_joy_reg(0x11) + offset_Y; // reading Y clears the interrupt } char joystick_interrupt() { return digitalRead(JOY_nINT) == 0; } #define JOY_I2C_ADDR 0x40 char read_joy_reg(char reg_addr) { char c; Wire.beginTransmission(JOY_I2C_ADDR); Wire.send(reg_addr); Wire.endTransmission(); Wire.requestFrom(JOY_I2C_ADDR, 1); while(Wire.available()) c = Wire.receive(); return c; } void write_joy_reg(char reg_addr, char val) { Wire.beginTransmission(JOY_I2C_ADDR); Wire.send(reg_addr); Wire.send(val); Wire.endTransmission(); } 

    Übrigens habe ich sogar versucht, den Ordner ADK_relsease_0512 in mein Arduino-Verzeichnis zu kopieren, was noch nicht funktioniert hat. Danke im Voraus!

  • Wie kann ich die Anrufstimme auf Anforderung in Android ändern? (Wechsel Mann zu Frau und usw.)
  • Wie schließe ich die Aktivität aus?
  • Android animieren mein Relatives Layout von unten nach oben und oben nach unten mit übersetzen Animation auf Bildansicht klicken
  • Wie man SMS mit Twilio in meinem Android-Antrag sendet?
  • Datum in einem zweistelligen Format anzeigen
  • Android mehrere Fragment Transaktion Bestellung
  • 7 Solutions collect form web for “Warum ist das Demokit-Programm für die ADK in Arduino nicht kompiliert?”

    Jetzt bin ich mit Arduino 1.0 erfolgreich, und ich möchte die Lösung teilen:

    1. Ich habe die CapSense04.zip Bibliothek benutzt:
    2. Ich habe den Typ von void zu size_t in folgenden Dateien von arduino_bundle_ADK.zip geändert :

    AndroidAccessory.cpp Zeile 280: size_t AndroidAccessory::write(uint8_t b)
    AndroidAccessory.h Zeile 71: size_t write(uint8_t b);

    Max_LCD.cpp Zeile 257: inline size_t Max_LCD::write(uint8_t value)
    Max_LCD.h Zeile 101: virtual size_t write(uint8_t);

    Ich habe auch gesendet zu schreiben und zu lesen , um zu lesen , in der demokit.pde (Sie finden es in adk_release_0512.zip)

    Demokit.pde Zeile 377: Wire.write(reg_addr);
    Zeile 383: c = Wire.read();
    Zeile 391: Wire.write(reg_addr);
    Zeile 392: Wire.write(val);

    Vielleicht versuchen Sie mit einer früheren Version von Arduino (dh nicht arduino 1.0) – ein aktuelles Update hat einige Klassennamen geändert, soweit ich sehen kann.

    Ich habe die hier aufgelisteten Fehler erlebt und das hat mich für mich behoben: http://www.jjoe64.com/2011/12/adk-arduino-wprogramh-not-found.html

    Es gibt kein WProgram.h in Arduino 1.0 IDE. Die Include-Anweisung sollte sein:

     #if ARDUINO >= 100 #include "Arduino.h" #else #include "WProgram.h" #endif 

    Dies wird das Header nicht gefunden Problem unter Arduino 1.0 zu beheben.

    Spätere Version des Codes ( arduino_bundle_ADK_02 ) muss nicht gepatcht werden.

    Haftungsausschluss: Ich kann diesen Zoo immer noch nicht mit Nexus S über die ADK App auftauchen lassen (gefürchtet "Setup Paketfehler: D" nach ein paar Sekunden nach der ersten Verbindung), aber ich denke, der Grund dafür ist anderswo.

    Ich habe mich in den Zeilen mit Fehlern "CapSense" auf "CapacitiveSensor" geändert, wenn man bedenkt, dass die Klasse jetzt (CapacitiveSensor) in der CapSense-Bibliothek v.04 benannt ist und die Bibliothek nun auch CapacitiveSensor genannt wird. Nach dem Drücken der Überprüfung musste ich a ändern Eigenschaft "touch_robot.capSense" zu "touch_robot.capacitiveSensor"

    Nur um Informationen zu teilen, wenn du arduino uno (Mega328) benutzt, überprüfe diese Seite . Die Firmware für das Uno ist hier . Beachten Sie, dass es Arduino IDE v0.22 verwendet und müssen Bibliotheken hinzufügen.

    Glückliche Mikrocontroller-Programmierung …

    Freundliche Grüße,
    Pak

    Die ADK-Software wurde erst kürzlich aktualisiert, um mit Arduino 1.0 kompatibel zu sein.

    Überprüfen Sie die ADK Seite auf developer.android.com: http://developer.android.com/guide/topics/usb/adk.html

    Neuer Download-Link ist: https://dl-ssl.google.com/android/adk/adk_release_20120606.zip

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.