Hallo,
Ich habe ein USB Shield V1.5 von Keystudio an einem UNO mit diesem Programm und es läuft.
//Arduino UNO an COM 11
#include <hidboot.h>
#include <usbhub.h>
// Satisfy the IDE, which needs to see the include statment in the ino too.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
#include <SPI.h>
#include <Wire.h> // this is part of arduino
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd1(0x24, 20, 4); // set the LCD address to 0x27 for a 20 chars and 4 line display
LiquidCrystal_I2C lcd2(0x26, 16, 2); // set the LCD address to 0x27 for a 20 chars and 4 line display
LiquidCrystal_I2C lcd3(0x25, 16, 2); // set the LCD address to 0x27 for a 20 chars and 4 line display
LiquidCrystal_I2C lcd4(0x24, 20, 4); // set the LCD address to 0x27 for a 20 chars and 4 line display
int dY;
int dX;
long laufzeit = 0;
long zeitspeicher = 0;
String laufzeitUHR = "00:00:00";
class MouseRptParser : public MouseReportParser {
protected:
void OnMouseMove(MOUSEINFO *mi);
void OnLeftButtonUp(MOUSEINFO *mi);
void OnLeftButtonDown(MOUSEINFO *mi);
void OnRightButtonUp(MOUSEINFO *mi);
void OnRightButtonDown(MOUSEINFO *mi);
void OnMiddleButtonUp(MOUSEINFO *mi);
void OnMiddleButtonDown(MOUSEINFO *mi);
};
void MouseRptParser::OnMouseMove(MOUSEINFO *mi) {
//Serial.print(" dx=");
//Serial.println(mi->dX, DEC);
//Serial.print(" dy=");
//Serial.println(mi->dY, DEC);
//Serial.println(" ");
dX = (mi->dX);
dY = (mi->dY);
//Serial.println("Mouse Move");
zeitspeicher = millis();
//lcdDisplay(1, 0, intToStr(dX), " DX / DY ", intToStr(dY));
};
void MouseRptParser::OnLeftButtonUp(MOUSEINFO *mi) {
Serial.println("L Butt Up");
Serial.println(mi->bmLeftButton);
Serial.println(mi->bmMiddleButton);
Serial.println(mi->bmRightButton);
};
void MouseRptParser::OnLeftButtonDown(MOUSEINFO *mi) {
Serial.println("L Butt Dn");
Serial.println(mi->bmLeftButton);
Serial.println(mi->bmMiddleButton);
Serial.println(mi->bmRightButton);
};
void MouseRptParser::OnRightButtonUp(MOUSEINFO *mi) {
Serial.println("R Butt Up");
Serial.println(mi->bmLeftButton);
Serial.println(mi->bmMiddleButton);
Serial.println(mi->bmRightButton);
};
void MouseRptParser::OnRightButtonDown(MOUSEINFO *mi) {
Serial.println("R Butt Dn");
Serial.println(mi->bmLeftButton);
Serial.println(mi->bmMiddleButton);
Serial.println(mi->bmRightButton);
};
void MouseRptParser::OnMiddleButtonUp(MOUSEINFO *mi) {
Serial.println("M Butt Up");
Serial.println(mi->bmLeftButton);
Serial.println(mi->bmMiddleButton);
Serial.println(mi->bmRightButton);
};
void MouseRptParser::OnMiddleButtonDown(MOUSEINFO *mi) {
Serial.println("M Butt Dn");
Serial.println(mi->bmLeftButton);
Serial.println(mi->bmMiddleButton);
Serial.println(mi->bmRightButton);
};
USB Usb;
USBHub Hub(&Usb);
HIDBoot<USB_HID_PROTOCOL_MOUSE> HidMouse(&Usb);
MouseRptParser Prs;
void setup() {
lcd1.init();
lcd1.backlight();
lcd1.print("init DSP1");
lcd1.setCursor(0, 1);
lcd1.print("PRG Display 0x24");
delay(2000);
Serial.begin(9600);
#if !defined(__MIPSEL__)
while (!Serial)
; // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("Start");
if (Usb.Init() == -1)
Serial.println("OSC did not start.");
delay(200);
HidMouse.SetReportParser(0, &Prs);
}
void loop() {
//Serial.println("____loop____________");
Usb.Task();
laufzeit = millis() - zeitspeicher;
lcdDisplay(1, 0, intToStr(dX), " DX / DY ", intToStr(dY));
if ((dX != 0) or (dY != 0)) {
lcdDisplay(1, 1, intToStr(dX), " dX / dY ", intToStr(dY));
dX=0;dY=0;
}
lcd1.setCursor(0, 2);
String Laufzeit = uhrzeit(millis());
lcd1.print("Zeit ");lcd1.print(Laufzeit);
if (laufzeit > 3000) {
lcdDisplay(1, 3, "USB fehlt ", "mS:",longToStr(laufzeit));
dX = 0;
dY = 0;
}
else {
lcdDisplay(1, 3, "USB OK ","mS:",longToStr(laufzeit));
}
}
// __________________ENDE LOOP
void lcdDisplay(int dis, int rowNum, String titleText, String valueText, String value2Text) {
clearRow(dis, rowNum);
String myStr;
myStr = String(valueText);
int titleTextLength = titleText.length();
// Robojax.com multiple LCD1602 I2C display
if (dis == 1) {
lcd1.setCursor(0, rowNum); //
lcd1.print(titleText);
lcd1.setCursor(titleTextLength, rowNum); //
lcd1.print(myStr);
lcd1.setCursor(myStr.length() + titleTextLength, rowNum); //
lcd1.print(value2Text);
}
if (dis == 2) {
lcd2.setCursor(0, rowNum); //
lcd2.print(titleText);
lcd2.setCursor(titleTextLength, rowNum); //
lcd2.print(myStr);
lcd2.setCursor(myStr.length() + titleTextLength, rowNum); //
lcd2.print(value2Text);
}
if (dis == 3) {
lcd3.setCursor(0, rowNum); //
lcd3.print(titleText);
lcd3.setCursor(titleTextLength, rowNum); //
lcd3.print(myStr);
lcd3.setCursor(myStr.length() + titleTextLength, rowNum); //
lcd3.print(value2Text);
}
}
/*
* Written by Ahmad Shamshiri on Nov 17, 2018 for Robojax.com
* @brief clears only one row of specific display
* @param d, the display number integer
* @param r, the row number integer
* @return no return value
*/
void clearRow(int d, int r) {
//
for (int i = 0; i < 20; i++) {
if (d == 1) {
lcd1.setCursor(i, r); //
lcd1.print(" ");
}
if (d == 2) {
lcd2.setCursor(i, r); //
lcd2.print(" ");
}
}
} //clearRow end
/*
* Written by Ahmad Shamshiri on Nov 18, 2018 for Robojax.com
* @brief converts integer to string
* @param a, the integer wanted to convert
* @return the converted value as string
*/
String intToStr(int a) {
return String(a);
} //intToStr end
String longToStr(long a) {
return String(a);
}
/*
* Written by Ahmad Shamshiri on Nov 18, 2018 for Robojax.com
* @brief converts float to string
* @param a, the float wanted to convert
* @return the converted value as string
*/
String floatToStr(float a, int pos, int deci) {
char buff[6]; // create a buffer of 6 character
dtostrf(a, pos, deci, buff); // 5 positions and 2 decimal places
return buff; // return the buffer
} //floatToStr end
String ulongToStr(unsigned long a) {
return String(a);
}
//Funktion uhrzeit _____________________________________________________________________________________________
String uhrzeit(unsigned long millisekunden) { //Übergabe von millis() und Rückgabewert Uhrzeit im Format String 00:00:00
unsigned long secUHR; unsigned long sec10; unsigned long sec01; unsigned long Sekunden;
unsigned long minUHR; unsigned long min10; unsigned long min01; unsigned long Minuten;
unsigned long stdUHR; unsigned long std10; unsigned long std01; unsigned long Stunden;
unsigned long tagUHR; unsigned long Tag;
String backString;
Sekunden = millisekunden / 1000;
Minuten = Sekunden /60;
Stunden = Minuten / 60;
Tag = Stunden / 24;
tagUHR = Tag;
stdUHR = Stunden - Tag * 24;
minUHR = Minuten - Stunden * 60;
secUHR = Sekunden - Minuten * 60;
//Serial.print(tagUHR);Serial.println(" taUHR");
//Serial.print(stdUHR);Serial.println(" stdUHR");
std10 = stdUHR / 10;
std01 = stdUHR - std10 * 10;
//Serial.print(std10);Serial.println(" std10");
//Serial.print(std01);Serial.println(" std01");
//Serial.print(minUHR);Serial.println(" minUHR");
min10 = minUHR / 10;
min01 = minUHR - min10 * 10;
//Serial.print(min10);Serial.println(" min10");
//Serial.print(min01);Serial.println(" min01");
//Serial.print(secUHR);Serial.println(" secUHR");
sec10 = secUHR / 10;
sec01 = secUHR - sec10 * 10;
//Serial.print(sec10);Serial.println(" sec10");
//Serial.print(sec01);Serial.println(" sec01");
backString = String(tagUHR) + "/" + String(std10) + String(std01) + ":" + String(min10) + String(min01) + ":" + String(sec10) + String(sec01);
//Serial.print(backString);Serial.println(" ZEIT");
return backString;
} // Funktion UHRZEIT ENDE ________________________________________________________________
(OK sind noch überreste von anderen Programmen drin - einfach übersehen , bitte)
Das Shield soll laut Hersteller auf den MEGA 2560 passen. Einige Pins stimmen überein. Aber es Funktioniert auf dem MEGA nicht. In den Foren hatte ich gelesen das es mit anderere PIN-Belegung funktionieren würde - habe ich aber nicht hinbekommen. Es wird dan in der CONSOLE angezeigt OSC did not start
Ich Habe beim Aufspielen schon bedacht, das richtige Board und den richtigen COM-Port einzustellen.
Abgesehen davon mach doch ein SHield das ich nicht direkt aufstecken kann kein Sinn - oder ?





