לאחרונה קניתי מEBAY מיקרו בקר arduino uno. התחלתי לעבוד איתו בעזרת מדריך שיש כאן:
http://www.ladyada.net/learn/sensors/ir.html
חיברתי אליו חיישן IR ברגל 2, ולד UB ברגל 12 (עם נגד 100 אום). התוכנה שצרבתי עליו מתרגמת פולס IR שנקלט משלט של הטלויזיה שלי, ובכל לחיצה יש TOGGLE על הלד. כל לחיצה משנה את מצב הלד - ON/OFF. הפולס IR מהשלט מאופנן בתדר 38KHZ, החיישן עושה פה את השחזור של האות המקורי ומה שהוא מוציא זה רק מילה בינארית (36 פולסים בערך). המילה הבינארית מוכנסת למערך מוגדר בתוכנית ולאחר מכן יש השוואה בין המערך הקיים (זה שהולקט מראש לצורך זיהוי והשוואה) והתוכנית מחליטה האם הקוד שנקלט הוא הרצוי או שזה קוד שהיא לא מכירה.
כרגע יש 3 לחצנים מוגדרים (3 מערכים) בקובף נפרד אליו ניגשת התוכנית.
הבעיה היא שהתוכנית מזהה כאילו משדרים אליה את 3 הפולסים יחד, ומדפיסה בSERIAL MONITOR את המילים (PLAY REWIND FARWARD) כשבעצם לא צריך.
הנה החלק הבעייתי של התוכנית:
- קוד: בחר הכל
void loop(void) {
int numberpulses;
numberpulses = listenForIR();
Serial.print("Heard ");
Serial.print(numberpulses);
Serial.println("-pulse long IR signal");
if (IRcompare(numberpulses, ApplePlaySignal)) {
Serial.println("PLAY");
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState);
}
if (IRcompare(numberpulses, AppleRewindSignal)) {
Serial.println("REWIND");
}
if (IRcompare(numberpulses, AppleForwardSignal)) {
Serial.println("FORWARD");
}
}
בעצם נראה כאילו שלושת תנאי הIF מתאפשרים.
איך פותרים את הבעיה הזאת?
תמונה של הסריאל מונטור:
האם להביא לכם את כל הקוד?
תודה לעוזרים!!![/code]