PC booten via IR
20 berichten
• Pagina 1 van 2 • 1, 2
PC booten via IR
Hallo,
Ik ben vrij nieuw met Arduino en heb 2 projecten die beide gelukt zijn.
1. Teensy bord dat als USB keyboard werkt via IR. (voor bediening van mediacenter)
2. Arduino Uno, om via een optocoupler de PC te booten (via de Switch jumpers op het moederbord)
Beide doen wat ze moeten doen, zonder problemen.
Nu wil ik graag alles op het Teensy bord steken maar dat lukt me niet helemaal. Ik zie aan de statusled dat het Teensy bord de hex code van de IR correct binnen krijgt, maar om één of andere reden doet de optocoupler het niet via de Teensy.
In de code heb ik een extra case aangemaakt (zie: BEGIN BOOT) die reageert op een bepaalde toets, specifiek voor het boot gedeelte. Dit is de code van beide projecten samengevoegd:
csharp code
Iemand tips?
Ik ben vrij nieuw met Arduino en heb 2 projecten die beide gelukt zijn.
1. Teensy bord dat als USB keyboard werkt via IR. (voor bediening van mediacenter)
2. Arduino Uno, om via een optocoupler de PC te booten (via de Switch jumpers op het moederbord)
Beide doen wat ze moeten doen, zonder problemen.
Nu wil ik graag alles op het Teensy bord steken maar dat lukt me niet helemaal. Ik zie aan de statusled dat het Teensy bord de hex code van de IR correct binnen krijgt, maar om één of andere reden doet de optocoupler het niet via de Teensy.
In de code heb ik een extra case aangemaakt (zie: BEGIN BOOT) die reageert op een bepaalde toets, specifiek voor het boot gedeelte. Dit is de code van beide projecten samengevoegd:
csharp code
/*
* IRusb - Provide USB keyboard/mouse control via an IR remote.
* Runs on the Teensy, not a standard Arduino: http://www.pjrc.com/teensy/
*
* An IR detector/demodulator must be connected to the input RECV_PIN (10).
* This uses the IRremote library: http://arcfn.com/2009/08/multi-protocol ... brary.html
*
* Copyright 2010 Ken Shirriff
* http://arcfn.com
*/
#include <IRremote.h>
int optoschakel = 4; // BOOT CODE
int teller; // IR CODE
int statusled = 3; // IR CODE
int RECV_PIN = 11; // IR CODE
IRrecv irrecv(RECV_PIN); // IR CODE
decode_results results; // IR CODE
void setup()
{
pinMode(optoschakel, OUTPUT);
pinMode(statusled, OUTPUT); //Voor Statusled // IR CODE
irrecv.enableIRIn(); // Start the receiver // IR CODE
Serial.begin(9600); //irrecv.blink13(true); // Activeren indien Status LED van bordje ipv aparte led // IR CODE
}
int step = 1;
unsigned long lastTime = millis();
#define GAP 10 // ms - tijd tussen toets aanslagen
void loop() {
if (teller < 1100)
{
teller++;
}
if (irrecv.decode(&results))
{
digitalWrite(statusled,HIGH); //voor statusled
//delay(10); //voor statusled
teller = 0;
// We want to repeat mouse moves as long as the button is pressed
// but we don't want to repeat keypresses. So we wait for
// a gap before processing keypresses.
if (millis() - lastTime > GAP) {
step = 1;
}
else if (step < 20) {
step += 1;
}
switch (results.value) {
case 0x9eb92:
Mouse.move(0, -step); // up
break;
case 0x5eb92:
Mouse.move(0, step); // down
break;
case 0xdeb92:
Mouse.move(-step, 0); // left
break;
case 0x3eb92:
Mouse.move(step, 0); //right
break;
default:
if (millis() - lastTime > GAP) {
switch (results.value) {
case 0xd0b92:
Mouse.click();
break;
case 0x20DF08F7:
Keyboard.print("0");
break;
case 0x20DF8877:
Keyboard.print("1");
break;
case 0x20DF48B7:
Keyboard.print("2");
break;
case 0x20DFC837:
Keyboard.print("3");
break;
case 0x20DF28D7:
Keyboard.print("4");
break;
case 0x20DFA857:
Keyboard.print("5");
break;
case 0x20DF6897:
Keyboard.print("6");
break;
case 0x20DFE817:
Keyboard.print("7");
break;
case 0x20DF18E7:
Keyboard.print("8");
break;
case 0x20DF9867:
Keyboard.print("9");
break;
//ZELF TOEGEVOEGDE KEYS LG REMOTE
case 0x20DF10EF: //POWER
Keyboard.print("s");
break;
case 0x20DF9C63: //SUBTITLES
Keyboard.print("t");
break;
case 0x20DF40BF: //VOLUME UP
Keyboard.print("+");
break;
case 0x20DFC03F: //VOLUME DOWN
Keyboard.print("-");
break;
case 0x20DFF10E: //REWIND
Keyboard.print("r");
break;
case 0x20DF718E: //FAST FORWARD
Keyboard.print("r");
break;
case 0x20DF55AA: //INFO
Keyboard.print("i");
break;
case 0x20DF0DF2: //PLAY
Keyboard.print("p");
break;
case 0x20DF8D72: //STOP
Keyboard.print("x");
break;
case 0x20DF4EB1: //OSD ON SCREEN
Keyboard.print("m");
break;
case 0x20DF8E71: //CONTEXTUAL MENU
Keyboard.print("c");
break;
//***************BEGIN BOOT GEDEELTE
case 0x20DF8679: //OSD ON SCREEN
digitalWrite(optoschakel, HIGH);
delay(500);
digitalWrite(optoschakel, LOW);
break;
//***************EINDE BOOT GEDEELTE
case 0x20DF02FD: // UP ARROW
Serial.print(lastTime - millis(), DEC);
Keyboard.set_key1(KEY_UP_ARROW);
Keyboard.send_now();
Keyboard.set_key1(0);
Keyboard.send_now();
break;
case 0x20DF827D: // DOWN ARROW
Serial.print(lastTime - millis(), DEC);
Keyboard.set_key1(KEY_DOWN_ARROW);
Keyboard.send_now();
Keyboard.set_key1(0);
Keyboard.send_now();
break;
case 0x20DFE01F: // LEFT ARROW
Serial.print(lastTime - millis(), DEC);
Keyboard.set_key1(KEY_LEFT_ARROW);
Keyboard.send_now();
Keyboard.set_key1(0);
Keyboard.send_now();
break;
case 0x20DF609F: // RIGHT ARROW
Serial.print(lastTime - millis(), DEC);
Keyboard.set_key1(KEY_RIGHT_ARROW);
Keyboard.send_now();
Keyboard.set_key1(0);
Keyboard.send_now();
break;
case 0x20DF22DD: // ENTER
Serial.print(lastTime - millis(), DEC);
Keyboard.set_key1(KEY_ENTER);
Keyboard.send_now();
Keyboard.set_key1(0);
Keyboard.send_now();
break;
case 0x20DF14EB: // BACK
Serial.print(lastTime - millis(), DEC);
Keyboard.set_key1(KEY_BACKSPACE);
Keyboard.send_now();
Keyboard.set_key1(0);
Keyboard.send_now();
break;
case 0x20DF906F: // MUTE
Serial.print(lastTime - millis(), DEC);
Keyboard.set_key1(KEY_F8);
Keyboard.send_now();
Keyboard.set_key1(0);
Keyboard.send_now();
break;
case 0x20DF5DA2: // PAUSE
Serial.print(lastTime - millis(), DEC);
Keyboard.set_key1(KEY_SPACE);
Keyboard.send_now();
Keyboard.set_key1(0);
Keyboard.send_now();
break;
case 0x20DFC639: // ESC
Serial.print(lastTime - millis(), DEC);
Keyboard.set_key1(KEY_ESC);
Keyboard.send_now();
Keyboard.set_key1(0);
Keyboard.send_now();
break;
default:
Serial.print("Received 0x");
Serial.println(results.value, HEX);
break;
}
}
}
lastTime = millis();
irrecv.resume(); // Resume decoding (necessary!)
}
if (teller > 1000)
{
digitalWrite(statusled,LOW); //voor statusled
//delay(10); //voor statusled
}
}
Iemand tips?
Advertisement
Re: PC booten via IR
het lijkt inderdaad allemaal goed, ik heb natuurlijk wel de opmerking over de delay, die kan roet in het eten gooien omdat de GAP dan niet gehaald wordt.
dus dat kun je ook beter met een millis() doen.
ofwel
in de loop kijk je of de bootled HIGH en timer > 500 dan bootled uit.
in jouw case hoef je dan alleen maar de led en de timer aan te zetten.
Verder is het niet slim om cases te nesten, want dat leest moeilijk.
omdat je gap op 10 staat krijg je vanzelf een mouse.move.
dan doe je bij default het nog een keer en dat hoeft niet.
beter is om alle toetsen in 1 case te zetten .
en als het wat langer wordt dan een functie schrijven voor die toets.
case boot
functieboot();
break
ook voor keyboard send onderste gedeelte een functie maken bijv, keyboardreset.
probeer het allemaal zo te schrijven dat een functie telekns op 1 pagina past.
ook de setup en de loop
dus dat kun je ook beter met een millis() doen.
ofwel
in de loop kijk je of de bootled HIGH en timer > 500 dan bootled uit.
in jouw case hoef je dan alleen maar de led en de timer aan te zetten.
Verder is het niet slim om cases te nesten, want dat leest moeilijk.
omdat je gap op 10 staat krijg je vanzelf een mouse.move.
dan doe je bij default het nog een keer en dat hoeft niet.
beter is om alle toetsen in 1 case te zetten .
en als het wat langer wordt dan een functie schrijven voor die toets.
case boot
functieboot();
break
ook voor keyboard send onderste gedeelte een functie maken bijv, keyboardreset.
probeer het allemaal zo te schrijven dat een functie telekns op 1 pagina past.
ook de setup en de loop
paul deelen
shooter@home.nl
shooter@home.nl
Re: PC booten via IR
Hey,
Bedankt voor de tips. Ik heb bij wijze van test de code zo simpel mogelijk gemaakt en enkel de opto proberen te schakelen op de Teensy maar dat werkt ook niet. Lijkt me dus dat ik het aan de hardware kant moet zoeken van de Teensy...
Bedankt voor de tips. Ik heb bij wijze van test de code zo simpel mogelijk gemaakt en enkel de opto proberen te schakelen op de Teensy maar dat werkt ook niet. Lijkt me dus dat ik het aan de hardware kant moet zoeken van de Teensy...
Re: PC booten via IR
heb je teensyduino erbij staan, ofwel de juiste board gekozen in de IDE.
en zet je code dan weer hier, dan kijk ik weer.
en zet je code dan weer hier, dan kijk ik weer.
paul deelen
shooter@home.nl
shooter@home.nl
Re: PC booten via IR
Doe ik dadelijk!
Kan het zijn dat de teensy de opto niet kan schakelen omdat hij als USB keyboard ingesteld staat?
Kan het zijn dat de teensy de opto niet kan schakelen omdat hij als USB keyboard ingesteld staat?
Re: PC booten via IR
dan moet je zoeken of die pin al gebruikt wordt, maar dat lijkt mij niet.
paul deelen
shooter@home.nl
shooter@home.nl
Re: PC booten via IR
Als test enkel deze code op de teensy gezet, en hij schakelt nog steeds niet:
Aansluitingen zijn correct want deze code doet het op de Arduino wel. De Teensy is correct geinstalleerd, board staat op Teensy 3.1/3.2, USB type op keyboard/mouse/joystick.
csharp code
Aansluitingen zijn correct want deze code doet het op de Arduino wel. De Teensy is correct geinstalleerd, board staat op Teensy 3.1/3.2, USB type op keyboard/mouse/joystick.
csharp code
#include <IRremote.h> // use the library for IR
int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11
int optoschakel = 4;
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;
void setup()
{
pinMode(optoschakel, OUTPUT);
irrecv.enableIRIn();
}
void loop()
{
if (irrecv.decode(&results))
{
if (results.value == 0x20DF8679)
{
digitalWrite(optoschakel, HIGH);
delay(100);
digitalWrite(optoschakel, LOW);
//}
}
irrecv.resume();
}
}
Re: PC booten via IR
Deze opto gebruik ik, http://www.ti.com/lit/ds/symlink/4n35.pdf
Vraag me nu vooral af of de Teensy wel voldoende spanning geeft tov de Arduino Uno om de optocoupler te schakelen.
Vraag me nu vooral af of de Teensy wel voldoende spanning geeft tov de Arduino Uno om de optocoupler te schakelen.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: PC booten via IR
De teensy heeft 3.3V. Dus moet je de weerstand naar de opto aanpassen. Wat gebruik je nu?
Re: PC booten via IR
nicoverduin schreef:De teensy heeft 3.3V. Dus moet je de weerstand naar de opto aanpassen. Wat gebruik je nu?
Er stond een 220 ohm tussen voor gebruik met de Arduino. Als ik correct ben, heb ik er dan één van 165 ohm nodig. Of ben ik verkeerd? (heb ze helaas niet in huis)
Ik zou ook 5V kunnen nemen van de VIN of VUSB, maar die werken dan niet als output pinmodes. Tenzij ik iets over het hoofd zie.
20 berichten
• Pagina 1 van 2 • 1, 2
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 16 gasten