Tastiera HID con Arduino UNO Rev 3

salve, mi chiamo thomas, per il mio progetto d'esame volevo fare una keyboard HID, solo che con questo codice:

#include <SoftwareSerial.h>
uint8_t buf[8] = { 0 }; /* Keyboard report buffer */

#define KEY_LEFT_CTRL 0x01
#define KEY_LEFT_SHIFT 0x02
#define KEY_RIGHT_CTRL 0x10
#define KEY_RIGHT_SHIFT 0x20

void setup()  
{
  Serial.begin(9600); //connection between chips
  delay(200);


pinMode(8,INPUT);

pinMode(9,INPUT);

pinMode(10,INPUT);

pinMode(11,INPUT);

pinMode(12,INPUT);

pinMode(13,INPUT);

pinMode(7,OUTPUT);

}



void type(char *str) 

{  
    
    char *chp = str;
    delay(100);
    while (*chp) {
     
 if ((*chp >= 'a') && (*chp <= 'z')) {
     buf[2] = *chp - 'a' + 4; //Converts from char to usb code from HUT1_11.pdf 
 } else if ((*chp >= 'A') && (*chp <= 'Z')) {
     buf[0] = KEY_LEFT_SHIFT; /* Caps */
     buf[2] = *chp - 'A' + 4; //Converts from char to usb code from HUT1_11.pdf 
 } else if ((*chp >= '0') && (*chp <= '9')) {
     buf[2] = *chp - '0' + 30; //Converts from char to usb code from HUT1_11.pdf 
 } else {

     switch (*chp) {
     case '1':
      buf[2] = 0x04; // a
  break;
     case '2':
      buf[2] = 0x26; // w
  break;
     case '4':
      buf[2] = 0x22; // s
  break;
     case '8':
      buf[2] = 0x07; // d
  break;
     case '16':
      buf[2] = 0x44; // space
  break;
     case '32':
      buf[2] = 0x04; // q
  break;

     default:
         /* Character not handled. To do: add rest of chars from HUT1_11.pdf */
  //buf[2] = 0x37; // Period
  break;
     }
 }

 Serial.write(buf, 7); // Send keypress
 buf[0] = 0;
 buf[2] = 0;
 Serial.write(buf, 7); // Release key
 chp++;
    }
}



void loop() 

{ 
  char carattere[6];
  int i;

      carattere[0]=digitalRead(8);
            carattere[1]=digitalRead(9);
                  carattere[2]=digitalRead(10);
                        carattere[3]=digitalRead(11);
                              carattere[4]=digitalRead(12);
                                    carattere[5]=digitalRead(13);
                                    

  type(carattere);

}

mi viene fuori questo problema

Arduino: 1.6.3 (Windows 7), Плата"Arduino Uno"

Sketch uses 2 734 bytes (8%) of program storage space. Maximum is 32 256 bytes.

Global variables use 258 bytes (12%) of dynamic memory, leaving 1 790 bytes for local variables. Maximum is 2 048 bytes.

avrdude: ser_open(): can't open device "\\.\COM1": ?? ??????? ????? ????????? ????.




???????? ???????? ?? ?????. ??? ?????????? ????, ?????? http://www.arduino.cc/en/Guide/Troubleshooting#upload .

Board at COM1 is not available

  Это сообщение будет содержать больше информации чем
  "Отображать вывод во время компиляции"
  включено в Файл > Настройки

qualcuno sa come risolvere il problema? ho un arduino Uno Rev 3

grazie in anticipo,

Thomas

Errori in caratteri cirillici??? :slight_smile:

Questa è la prima che vedo.

Non è che stai usando un windows 7 con nazionalizzazione russa?

Comunque, l'errore è sulla porta di comunicazione USB: sembra non vedere la scheda.

si, sto usando il computer della mia ragazza che è russa ahah, quindi mi viene così.

come posso fare per aggiustare il problema?

grazie per la risposta,

thomas

Hai selezionato la COM giusta, quella del Tuo Arduino?
Ciao Uwe

eh si, l'ho selezionata, ma mi dice che non trova COM1, e non so cosa voglia dire D:

Ma quella board hai riprogrammato il FTDI come dichiari qui ?
http://forum.arduino.cc/index.php?topic=323551.msg2235803#msg2235803

non ancora, l'ho riportato alla normalità, adesso lo devo programmare e poi riprogrammare il FTDI

Mmm ... mi sembra strano che Arduino sia su Com1 ... sei sicuro che sia quella che viene creata come "porta virtuale" quando lo attacchi alla USB ?

Fai una cosa, vai sul pannello dei device di Win (... non mi chiedere come, è un lontano ricordo di Win ... ora lavoro su OS X) e controlla le varie seriali. Anzi, se ci fai anche un "Print Screen" e lo alleghi, ci guardiamo anche noi ... :wink:

Guglielmo

allora, come vedete mi legge arduino come USB

adesso, quando collego arduino mi da un ulteriore problema:
rimane una keyboard HID, con il risultato che :

  • la tastiera non funziona come dovrebbe
  • il mouse ha lo stesso problema della tastiera
  • anche scollegandolo non torna nulla alla normalità

...

ho provato anche a scrivere il bootloader, ma mi viene fuori questo messaggio

Arduino:1.6.3 (Windows 7), Scheda:"Arduino Uno"

C:\Users\Kristina\Desktop\Arduino uno Rev 3\programma\Arduino\hardware\tools\avr/bin/avrdude -CC:\Users\Kristina\Desktop\Arduino uno Rev 3\programma\Arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -cstk500v2 -Pusb -e -Ulock:w:0x3F:m -Uefuse:w:0x05:m -Uhfuse:w:0xDE:m -Ulfuse:w:0xFF:m 



avrdude: Version 6.0.1, compiled on Mar 30 2015 at 14:56:06

         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/

         Copyright (c) 2007-2009 Joerg Wunsch



         System wide configuration file is "C:\Users\Kristina\Desktop\Arduino uno Rev 3\programma\Arduino\hardware\tools\avr/etc/avrdude.conf"



         Using Port                    : usb

         Using Programmer              : stk500v2

Errore durante la scrittura del bootloader

avrdude: usbdev_open(): did not find any USB device "usb"

e facendo come mi ha suggerito gpb01 l'altra volta, di mostrare l'output dettagliato durante la compilazione l'errore che mi viene fuori è questo ( se può aiutarvi maggiormente ad aiutarmi ):

avrdude: Version 6.0.1, compiled on Mar 30 2015 at 14:56:06
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "C:\Users\Kristina\Desktop\Arduino uno Rev 3\programma\Arduino\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : COM1
         Using Programmer              : arduino
         Overriding Baud Rate          : 115200
avrdude: ser_open(): can't open device "\\.\COM1": Impossibile trovare il file specificato.



avrdude done.  Thank you.

o meglio, mi sembra sia un errore, perchè ciò che vedo è questo:

grazie per la pazienza ^^,

thomas

No, scusa, ma per programmarlo, come ti è stato detto, NON può simulare un device USB ...

DEVI ripristinare il firmware originale sul convertitore USB <--> Seriale e devi vedere Arduino tra le COMx e non come USB ... altrimenti non lo programmi.

Inoltre, cortesemente, ALLEGA l'immagine originale e NON includerla ridotta nel messaggio che ... non si legge un bel nulla ...

Guglielmo

ah, mi spiace.... beh adesso l'ho staccato e riattaccato e non so come mai mi è comparso tra i com ( non capisco perchè fa quello che gli pare ::slight_smile: :sob: )

come potete vedere qua:

prima era su com4, l'ho messa io su com1, ma neanche così funziona

mi da lo stesso errore di prima

e poi scusa gugliemo ma mi ero confuso, perchè TEORICAMENTE dovevo averlo riprogrammato, o almeno mi sembrava dato che prima mi veniva visualizzato con il nume di : Keyboard HID, nella sezione dedicata alle tastiere:

Se era su COM4 perché sei andato a toccare le cose ? ? ? :o :o :o

Lascialo sulla COMx che gli assegna il sistema e, prima di programmare, verifica sempre che la COMx che hai scelto in Arduino IDE sia la stessa che gli ha assegnato il sistema operativo.

Guglielmo

avevo letto da qualche parte hce poteva funzionare come risoluzione. comunque, reimpostato il com4, ma non so come impostarlo nell'IDE

DanteAuditore:
... ma non so come impostarlo nell'IDE

... come sempre ... magari, prima di avventurarsi in cose complicate, studiare le BASI ... no ? ? ? :smiling_imp:

Mah ...
...comunque "Arduino IDE -> Tools -> [Serial] Port" (... la parola Serial è presente nella 1.0.6, ma mi sembra sia omessa nella 1.6.4) e li scegli la VERA porta a cui è connesso Arduino e che ti da il Sistema Operativo SENZA tue manipolazioni !

Guglielmo

a mio malgrado, la situazione non differisce dalla precedente...

... solito "Print-Screen" dei devices con le COM espanse (in modo che si vede chiaramente cosa riconosce) con Arduino connesso.

Guglielmo

Ho reinstallato i driver:

Dispositivi

ORA, sono corretti.

su consiglio di un prof. ho cambiato il programma:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(, 13);

uint8_t buf[8] = { 0 }; /* Keyboard report buffer */

#define KEY_LEFT_CTRL 0x01
#define KEY_LEFT_SHIFT 0x02
#define KEY_RIGHT_CTRL 0x10
#define KEY_RIGHT_SHIFT 0x20

//QUA CI SONO LE PREMESSE

void setup()
{
  Serial.begin(9600); //connection between chips
  delay(200);

  pinMode(6, INPUT);

  pinMode(7, INPUT);

  pinMode(8, INPUT);

  pinMode(9, INPUT);

  pinMode(10, INPUT);

  pinMode(11, INPUT);





  pinMode(13, OUTPUT);


  delay(50)

}



//QUI C'è IL MAIN



void loop()

{
  char carattere[6];
  int i;

  carattere[0] = digitalRead(6);
  carattere[1] = digitalRead(7);
  carattere[2] = digitalRead(8);
  carattere[3] = digitalRead(9);
  carattere[4] = digitalRead(10);
  carattere[5] = digitalRead(11);


  type(carattere);

}

// QUI INIZIA LA FUNZIONE CHE CONVERTE IN CHAR

void type(char *str)

{

  char *chp = str;
  while (*chp) {

      switch (*chp) {
        case '1':
          buf= 0x04; // a
          break;
        case '2':
          buf= 0x26; // w
          break;
        case '4':
          buf= 0x22; // s
          break;
        case '8':
          buf= 0x07; // d
          break;
        case '16':
          buf= 0x44; // space
          break;
        case '32':
          buf= 0x04; // q
          break;

        default:
          /* Character not handled. To do: add rest of chars from HUT1_11.pdf */
          //buf[2] = 0x37; // Period
          break;
      }
    }

    Serial.write(buf); // Send keypress
    buf= 0;
  }
}

Il problema adesso è cambiato, ora posso caricare programmi sull'arduino ( prima era un problema di driver, sbagliavo ad aggiornare) però non so perchè, lo sketch ha problemi:

nella compilazione e nel caricamento su arduino ( che presumo esegua anche la compilazione), lo sketch non compila: non nel senso che da errori di compilazione, ma che la barretta del caricamento della compilazione non va avanti neanche se lo lascio fermo 20 minuti:

Errore di compilazione

il COM e la board selezionati sono giusti:

COM e Board

non è quello il problema, gli errori legati ad esso sono differenti (se non sbaglio)

Nessuno sa il motivo di questo errore ? D:

Mi spieghi perché includi la SoftwareSerial ? ? ? :o :o :o

  1. La istanzi male (manca il primo parametro)

  2. ma soprattutto ... NON la utilizzi nel programma

Guglielmo

perchè avevo letto che per inviare un dato seriale avevo bisogno della softwareserial, e poi:

  • in che senso la istanzio male?

-nel programma principale non c'è, ma nella funzione: Serial.write(), non è un comando della software serial ?

thomas