USB_plain Outputs kommen nicht auf dem Arduino an

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    Da in jedem Forum ein paar Regeln eingehalten werden müssen, möchte ich diese auch vorher hier festlegen und niederschreiben. Die grundsätzliche Netiquette setze ich bei Jedem voraus. Darüber hinaus möchte ich nur spezielle Regeln ansprechen:
    - Unterlasse FullQuote sondern nutze Alternativen wie Inline-Quoting
    -> siehe auch https://de.wikipedia.org/wiki/Fullquote vs. https://de.wikipedia.org/wiki/TOFU#Alternativen_zu_TOFU
    - Unterlasse nichtssagende Antworten wie "Danke" oder "werde ich mal testen" oder ähnliches, sofern Du nicht der Threadersteller bist und einen Lösungsvorschlag angeboten bekommen hast.
    - Vermeide Doppel-Posts (zwei Beiträge von Dir hintereinander) sondern editiere wenn möglich Deine Posts.

    Danke...

    • USB_plain Outputs kommen nicht auf dem Arduino an

      Hallo zusammen.

      Bin gerade meine DoorPi am verfeinern. Dabei habe ich mir eine Aussenstation mit einem Arduino NANO und der Soundkarte zusammengebastelt.
      Am Arduino hängen die Klingeltaster, die Photodiode und mein Fingerleser. Von aussen nach innen funktioniert alles prima. Die Klingel Commands werden sauber übertragen, der Fingerleser öffnet meine Tür, Audio passt ohne Hall und Delay's.

      Ich will nun Outputs auf dem Arduino steuern. Der Sketch ist fertig und über Putty funktionieren die Commands sauber und der Ardu macht, was er soll.
      Aktuell habe ich DoorPi 2.5.1 mit dem USB_plain- Keyboard im Einsatz.

      Offensichtlich will aber DoorPi keine Commands abfeuern. Wenn ich einen gebridgeten Arduino an den Raspi und auf der anderen Seite an meinen PC hänge, sehe ich mit Hterm keinen der benötigten Commands.

      Vielleicht kann mir jemand von euch auf die Sprünge helfen.

      Hier der Auszug meiner Doorpi.ini und der Arduino Sketch:

      Source Code

      1. [keyboards]
      2. arduinopins = usb_plain
      3. [arduinopins_keyboard]
      4. baudrate = 9600
      5. bouncetime = 2000
      6. input_max_size = 255
      7. input_stop_flag = \n
      8. output_stop_flag = ;
      9. polarity = 0
      10. port = /dev/ttyUSB0
      11. pressed_on_keydown = True
      12. [arduinopins_InputPins]
      13. 10000000 = out:Tueroeffner,1,0,3
      14. 11 = call:11 //Klingel1
      15. 12 = call:12 //Klingel2
      16. 555 = sleep:0 //Pong
      17. 99999 = sleep:0 //Door opener
      18. [arduinopins_OutputPins]
      19. 1 = fixopen
      20. 2 = fixclose
      21. 3 = LichtAn
      22. 4 = LichtAus
      23. 5 = Ping //Output Ping
      24. [EVENT_OnTimeMinuteEvenNumber]
      25. 10 = out:5,5 // Dieses Coomand sollte DoorPi abfeuern
      26. 20 = os_execute:/usr/local/etc/DoorPi/scripts/ping.sh
      27. [EVENT_OnKeyPressed_arduinopins.555]
      28. 10 = os_execute:/usr/local/etc/DoorPi/scripts/pong.sh
      Display All

      Und hier noch der Sketch, ab Linie 122 wird's interessand:


      C Source Code

      1. /***************************************************
      2. DoorPi Arduino Extention with Biometric Access Control
      3. by Sven Gaechter info@allround-service.biz
      4. ****************************************************/
      5. #include <Adafruit_Fingerprint.h>
      6. #include <SoftwareSerial.h>
      7. #include <Bounce2.h>
      8. //#include <LED.h>
      9. #include <RGBLED.h>
      10. int getFingerprintIDez();
      11. int warten = 250; // Anzahl, welche pro Fehler hinzugezählt wird
      12. int fehler = 0; // Fehlervariable
      13. int goScanPin = 4; // Leser starten
      14. int whgPin1 = 5; // Klingeknopf Wohnung EG
      15. int whgPin2 = 6; // Klingelknopf Wohnung OG
      16. int overrideState = LOW; // Variable zur Überwachung des Daueröffnungsstatus
      17. int string = 0; // Variable zum speichern der gesendeten Serial-Commands
      18. int connectet = false; // Variable ist gesetzt, wenn Arduino und Raspberry Pi verbunden sind
      19. int licht = 12; // Ausgang Türschildbeleuchtung
      20. int hell=A0; //Fotowiderstand zur Bestimmung der Helligkeit
      21. int lux=0; //Variamel zur Speicherung des Sensorwerts
      22. String SerialString = ""; // a String to hold incoming data
      23. boolean stringComplete = false; // whether the string is complete
      24. int SerialInt = 0;
      25. Bounce debounceScan = Bounce();
      26. Bounce debounceWhg1 = Bounce();
      27. Bounce debounceWhg2 = Bounce();
      28. /*
      29. LED greenLED = LED(11); // Gruene LED
      30. LED redLED = LED(10); // Rote LED
      31. LED blueLED = LED(9); // blaue LED
      32. */
      33. RGBLED rgbLed(10,11,9,COMMON_CATHODE);
      34. SoftwareSerial mySerial(2, 3);
      35. // pin #2 is IN from sensor (GREEN wire)
      36. // pin #3 is OUT from arduino (WHITE wire)
      37. Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
      38. void setup()
      39. {
      40. Serial.begin(9600);
      41. // reserve 200 bytes for the inputString:
      42. SerialString.reserve(200);
      43. // set the data rate for the sensor serial port
      44. finger.begin(57600);
      45. pinMode(goScanPin, INPUT_PULLUP); // Taster um den Leser zu starten
      46. debounceScan.attach(goScanPin);
      47. debounceScan.interval(100); // interval in ms
      48. pinMode(whgPin1, INPUT_PULLUP); // Taster um den Leser zu starten
      49. debounceWhg1.attach(whgPin1);
      50. debounceWhg1.interval(100); // interval in ms
      51. pinMode(whgPin2, INPUT_PULLUP); // Taster um den Leser zu starten
      52. debounceWhg2.attach(whgPin2);
      53. debounceWhg2.interval(100); // interval in ms
      54. pinMode(licht, OUTPUT); // Tuerschildbeleuchtung
      55. Serial.write("DoorPiDuino");
      56. Serial.flush();
      57. }
      58. void leser_an()
      59. {
      60. int time = 5000;
      61. unsigned long previousMillis = millis();
      62. while (millis() - previousMillis < time) {
      63. if (getFingerprintIDez() > 0) {
      64. Serial.println("010000000"); // Unterscheidungen könnten hiermit erreicht werden: + finger.fingerID);
      65. //greenLED.blink(5000);
      66. rgbLed.writeGreen(255);
      67. delay(2000);
      68. rgbLed.turnOff();
      69. fehler = 0; //loescht den Fehlerspeicher wieder
      70. }
      71. else if (getFingerprintIDez() < 0) {
      72. fehler ++;
      73. //redLED.blink(fehler * 1000);
      74. rgbLed.writeRed(255);
      75. delay(fehler * 1000);
      76. rgbLed.turnOff();
      77. if (fehler < 4) {
      78. leser_an();
      79. }
      80. else {
      81. Serial.println("99999");
      82. fehler = 0; //loescht den Fehlerspeicher wieder
      83. }
      84. }
      85. }
      86. }
      87. void beleuchtung()
      88. {
      89. lux =analogRead(hell); //Die Spannung an dem Fotowiderstand auslesen und unter der Variable „sensorWert“ abspeichern.
      90. // Serial.print("lux = " ); //Ausgabe am Serial-Monitor: Das Wort „Sensorwert: „
      91. // Serial.println(lux); //Helligkeitsusgabe am Serial-Monitor.
      92. if (lux < 200 ) //Wenn der Sensorwert über 512 beträgt….
      93. {
      94. digitalWrite(licht, HIGH); //…soll die LED leuchten…
      95. // Serial.print("on " );
      96. }
      97. else //andernfalls…
      98. {
      99. digitalWrite(licht, LOW); //….soll sie nicht leuchten.
      100. // Serial.print("off" );
      101. }
      102. }
      103. void serialEvent()
      104. {
      105. while (Serial.available()) {
      106. char inChar = (char)Serial.read(); // get the new byte
      107. SerialString += inChar; // add it to the SerialString
      108. if (inChar == ';') { // if the incoming character is a newline, set a flag so the main loop can do something about it \n
      109. SerialInt = SerialString.toInt();
      110. SerialString = "";
      111. stringComplete = true;
      112. }
      113. }
      114. }
      115. /*
      116. void statecheck()
      117. {
      118. }
      119. void overridestate()
      120. {
      121. }
      122. */
      123. void loop()
      124. {
      125. beleuchtung();
      126. //statecheck();
      127. // overridestate();
      128. debounceScan.update();
      129. debounceWhg1.update();
      130. debounceWhg2.update();
      131. if (debounceScan.fell() && overrideState == LOW ) {
      132. Serial.println("555");
      133. leser_an();
      134. }
      135. else if (debounceWhg1.fell()){
      136. Serial.println(11);
      137. rgbLed.writeColorWheel(5);
      138. rgbLed.turnOff();
      139. }
      140. else if (debounceWhg2.fell()){
      141. Serial.println(12);
      142. rgbLed.writeColorWheel(5);
      143. rgbLed.turnOff();
      144. }
      145. if (stringComplete) {
      146. Serial.println(SerialInt);
      147. if (SerialInt == 1) {
      148. Serial.println("override");
      149. fehler = 0;
      150. overrideState = HIGH;
      151. fehler = 0;
      152. SerialInt = 0;
      153. stringComplete = false;
      154. }
      155. else if (SerialInt == 2) {
      156. Serial.println("override off");
      157. overrideState = LOW;
      158. SerialInt = 0;
      159. stringComplete = false;
      160. }
      161. else if (SerialInt == 3) {
      162. digitalWrite(licht, HIGH);
      163. SerialInt = 0;
      164. stringComplete = false;
      165. }
      166. else if (SerialInt == 4) {
      167. digitalWrite(licht, LOW);
      168. SerialInt = 0;
      169. stringComplete = false;
      170. }
      171. else if (SerialInt == 5) {
      172. delay(1000);
      173. Serial.println("555");
      174. rgbLed.writeGreen(255);
      175. delay(40);
      176. rgbLed.turnOff();
      177. SerialInt = 0;
      178. stringComplete = false;
      179. }
      180. }
      181. if (overrideState == HIGH) {
      182. rgbLed.writeColorWheel(50);
      183. }
      184. else rgbLed.turnOff();
      185. }
      186. uint8_t getFingerprintID() {
      187. uint8_t p = finger.getImage();
      188. switch (p) {
      189. case FINGERPRINT_OK:
      190. break;
      191. case FINGERPRINT_NOFINGER:
      192. return p;
      193. case FINGERPRINT_PACKETRECIEVEERR:
      194. return p;
      195. case FINGERPRINT_IMAGEFAIL:
      196. return p;
      197. default:
      198. return p;
      199. }
      200. // OK success!
      201. p = finger.image2Tz();
      202. switch (p) {
      203. case FINGERPRINT_OK:
      204. break;
      205. case FINGERPRINT_IMAGEMESS:
      206. return p;
      207. case FINGERPRINT_PACKETRECIEVEERR:
      208. return p;
      209. case FINGERPRINT_FEATUREFAIL:
      210. return p;
      211. case FINGERPRINT_INVALIDIMAGE:
      212. return p;
      213. default:
      214. return p;
      215. }
      216. // OK converted!
      217. p = finger.fingerFastSearch();
      218. if (p == FINGERPRINT_OK) {
      219. } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
      220. return p;
      221. } else if (p == FINGERPRINT_NOTFOUND) {
      222. return p;
      223. } else {
      224. return p;
      225. }
      226. }
      227. // returns -1 if failed, otherwise returns ID #
      228. int getFingerprintIDez() {
      229. uint8_t p = finger.getImage();
      230. if (p != FINGERPRINT_OK) return 0;
      231. p = finger.image2Tz();
      232. if (p != FINGERPRINT_OK) return -1;
      233. p = finger.fingerFastSearch();
      234. if (p != FINGERPRINT_OK) return -1;
      235. // found a match!
      236. return finger.fingerID;
      237. }
      Display All
      Vielen Dank für die Hilfe.
    • Hallo,

      sorry, hat ein wenig gedauert.
      Das ist so in etwa mein momentan aktiver Sketch, der auf einem Arduino am doorpi läuft, ich hoffe es hilft Dir weiter.
      Da ist neben den Buttons (hier nur einer) auch noch die Abfrage einer Tastatur/RFID-Einheit drin, die ebenfalls an dem Arduino hängt.
      Ausserdem hängt noch das Relais dran, daß die Tür öffnet und ein bisschen Aussenbeleuchtung mit einem RGB-Modul und eine kleine Status-LED....

      Ich weiß, daß der Code nicht schön ist, wer Fehler findet, bitte behalten ;)
      Hab aber momentan keine Zeit, den aufzuhübschen....

      Bin in den nächsten zwei Wochen ausser Landes und werde da wahrscheinlich nicht ins Forum kommen.

      Cheers,

      Pula
      Files
      • doorpi_i2c.zip

        (1.94 kB, downloaded 134 times, last: )
      cheers,
      pula

      don´t panic