Al principio, no soy un profesional de hardware (iniciador), así que sé amable.
Intento reutilizar una placa de operación DENON de un reproductor de DVD con 9 botones con un clon Attiny85 Digispark conectado a PIN3 (vea también la imagen a continuación)
EDITAR: Acerca de la imagen: "Sparkfun" debe ser "Digispark".
Sinembargo,puedoleerlosvaloresdelosbotones,losvaloresparecenestarmuycerca,porloqueesdifícildetectarquébotónsepresiona.
Peroesenoeselproblema/preguntaprincipal,elproblemaeselvalorinactivodelafunciónanalogRead
quenoentiendo.ElmanualdeidiomaArduino(IDE)'dice'queesunvalorentre0y1023.Enestecaso,informade654enmodoinactivoysuperiorcuandosepresionaunbotón.TambiénprobéelPIN1ylosinformes1023,peronodetectaningunaentrada(elvalornocambia).
Preguntas:
- ¿Porquélafunción
analogRead
informa654(tambiéncuandolaplacadesconectado) - ¿Puedoaumentarlaresolucióndeestosvaloresparadetectarbotonesmás?¿Preciso/exacto?
Algúncódigo(hiceunasolucióndesoftwarededepuraciónUSBparadepurarvaloresatravésdeltecladoporquenohayUART):
#include"types.h" // Custom types
#include "TrinketHidCombo.h" // Trinket USB lib
#define PIN_BUTTON_IN 3
void setDelay( uint16_t ms ) // usbsafe delay
{
if( ms < 10 )
{ delay(ms); }
else {
uint16_t iSteps = ms / 4;
while( iSteps-- )
{
usbIdle(); // We need to do this to keep the Windows USB driver 'sadisfied'
delay(4);
}
}
usbIdle();
}
void usbIdle()
{
// do nothing, check if USB needs anything done
TrinketHidCombo.poll();
}
void usbStart()
{
TrinketHidCombo.begin();
}
bool usbSendDebugHandshake()
{
TrinketHidCombo.pressKey( 0, KEYCODE_F24 ); // press
TrinketHidCombo.pressKey( 0, 0 ); // release
setDelay(20);
TKeyboardLEDState recLedState = usbGetKeyboardLedState();
return ( recLedState.caps && recLedState.num && recLedState.scroll );
}
void usbDebug(const char* s, bool bLineFeed )
{
static bool bUsbDebugHandshake = false;
static bool bUsbDebugEnabled = false;
if( !bUsbDebugEnabled && !bUsbDebugHandshake )
{
//bUsbDebugHandshake = true;
bUsbDebugEnabled = bUsbDebugHandshake = usbSendDebugHandshake();
}
if( bUsbDebugEnabled )
{
(bLineFeed)?TrinketHidCombo.println( s ):TrinketHidCombo.print( s );
usbIdle();
}
}
void usbDebug(const char* s )
{ usbDebug( s, true ); }
void usbDebug( int i, bool bLineFeed )
{
char buff[10]; //the ASCII of the integer will be stored in this char array
memset(buff, 0, sizeof(buff));
//itoa(i,buff,10); //(integer, yourBuffer, base)
usbDebug( itoa(i,buff,10), bLineFeed );
}
void usbDebug( int i )
{ usbDebug( i, true ); }
TKeyboardLEDState usbGetKeyboardLedState()
{
uint8_t iState = TrinketHidCombo.getLEDstate();
TKeyboardLEDState tResult;
tResult.caps = (iState & KB_LED_CAPS);
tResult.num = (iState & KB_LED_NUM);
tResult.scroll = (iState & KB_LED_SCROLL);
return tResult;
}
// Setup and main routine
void setup()
{
usbStart(); // First priority, start the USB device engine and enumerate
pinMode(PIN_BUTTON_IN , INPUT );
}
void loop() // Main program - main()
{
// Button pressed?
int iButton = analogRead(PIN_BUTTON_IN);
usbDebug( "PRESSED: ", false );
usbDebug( iButton );
setDelay(1000);
}