Pages: [1]   Go Down
Author Topic: ARDUINO con TFT ST7735 e EasyVR - Come farli convivere ?  (Read 1212 times)
0 Members and 1 Guest are viewing this topic.
Firenze (Italy)
Offline Offline
Full Member
***
Karma: 0
Posts: 229
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve,

sto cercando di realizzare un progettino con la EasyVR (riconoscimento vocale http://www.veear.eu/Products/EasyVR.aspx) al quale vorrei aggiungere uno schermo per visualizzare alcune cose (appunto il TFT ST7735 http://www.robot-italy.com/product_info.php?products_id=2024 )

Ora, se uso le due schede in modo SEPARATO tutto OK, nessun errore e riesco a gestire quello che voglio nel mio progetto.

Il PROBLEMA nasce nel momento in cui collego le due schede all'Arduino ANZI, ancora prima, visto che appena inserisco il codice che gestisce il TFT ST7735 (in marrone) nello SKETCH (funzionante!) che gestisce EasyVR iniziano i problemi. Ho iniziato a "debuggare" remmando..... appena attivo la riga in rosso per inizializzare lo schermo, Arduino NON RICONOSCE più la EasyVR.

AGGIUNGO che la EasyVr dovrebbe utilizzare due pin di Arduino (12 e 13) pin che utlizza anche il TFT ST7735 (ma ancora non sono arrivato a collegare anche il TFT insieme alla EasyVR per questo errore) - Non avendo problemi con lo SKETCH l'idea era quella di usare altre due porte per la EasyVr (vedi righe in blu) tipo la 6 e la 7 che sarebbero libere (o collegarci il TFT lasciando la EasyVR su 12 e 13)
(SPERO di aver inserito abbastanza ed in modo chiaro !!!)
Lo SKETCH in uso è:

#define cs 10  
#define dc 9
#define rst 8  

// Color definitions
#define   BLACK           0x0000
#define   BLUE            0x001F
#define   RED             0xF800
#define   GREEN           0x07E0
#define CYAN            0x07FF
#define MAGENTA         0xF81F
#define YELLOW          0xFFE0  
#define WHITE           0xFFFF

#include <ST7735.h>
#include <SPI.h>

ST7735 tft = ST7735(cs, dc, rst);


#include <NewSoftSerial.h>
NewSoftSerial port(12,13);

#include <EasyVR.h>
EasyVR easyvr(port);

//Groups and Commands
enum Groups
{
  GROUP_0  = 0,
  GROUP_1  = 1,
  GROUP_16 = 16,
};

enum Group0
{
  G0_JAMES = 0,
};

enum Group1
{
  G1_GAETANO = 0,
  G1_DANIEL = 1,
  G1_ROSSO = 2,
  G1_VERDE = 3,
  G1_GIALLO = 4,
  G1_APRI = 5,
  G1_CHIUDI = 6,
  G1_CHIUDIPORTA = 7,
  G1_APRIPORTA = 8,
  G1_LUCEGIARDINO = 9,
};

enum Group16
{
  G16_MRJONES = 0,
};

EasyVRBridge bridge;
int8_t group, idx;


void setup()
{
  Serial.begin(9600);
  port.begin(9600);
  Serial.println("INIZIAMO");
  Serial.println("-------------------->");
  
      tft.initR();               // initialize a ST7735R chip
 //tft.writecommand(ST7735_DISPON);
  //uint16_t time = millis();
  //tft.fillScreen(BLACK);     //CLEAR Screen in BLACK

  
  
  
  // bridge mode?
  if (bridge.check())
  {
    cli();
    bridge.loop(0, 1, 12, 13);
  }

  if (!easyvr.detect())
  {
    Serial.println("EasyVR not detected!");
    for (;smiley-wink;
  }

  easyvr.setPinOutput(EasyVR::IO1, LOW);
  Serial.println("EasyVR detected!");
  easyvr.setTimeout(5);
  easyvr.setLanguage(1);

  group = EasyVR::TRIGGER; //<-- start group (customize)
}

void action();

void loop()
{
  easyvr.setPinOutput(EasyVR::IO1, HIGH); // LED on (listening)

  Serial.print("Say a command in Group ");
  Serial.println(group);
  easyvr.recognizeCommand(group);

  do
  {
    // can do some processing while waiting for a spoken command
  }
  while (!easyvr.hasFinished());
  
  easyvr.setPinOutput(EasyVR::IO1, LOW); // LED off

  idx = easyvr.getWord();
  if (idx >= 0)
  {
   // built-in trigger (ROBOT)
   // group = GROUP_X; <-- jump to another group X
   return;
  }
  idx = easyvr.getCommand();
  if (idx >= 0)
  {
    // print debug message
    uint8_t train = 0;
    char name[32];
    Serial.print("Commando: ");
    Serial.print(idx);
    if (easyvr.dumpCommand(group, idx, name, train))
    {
      Serial.print(" = ");
      Serial.println(name);
    }
    else
      Serial.println();
    easyvr.playSound(0, EasyVR::VOL_FULL);
    // perform some action
    action();
  }
  else // errors or timeout
  {
    if (easyvr.isTimeout())
      Serial.println("........attendo");
    int16_t err = easyvr.getError();
    if (err >= 0)
    {
      Serial.print("Errore ");
      Serial.println(err, HEX);
    }
  }
}

void action()
{
    switch (group)
    {
    case GROUP_0:
      switch (idx)
      {
      case G0_JAMES:
            Serial.print("Dettare comando desiderato: ");
            group = 1 ;
        // group = GROUP_X; <-- or jump to another group X for composite commands
        break;
      }
      break;
    case GROUP_1:
      switch (idx)
      {
      case G1_GAETANO:
        // write your action code here
        // group = GROUP_X; <-- or jump to another group X for composite commands
        break;

...... omissis .....
« Last Edit: January 06, 2012, 04:51:55 pm by cgs64 » Logged

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10433
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

se condividono 2 pin, anche se non sono collegate, probabilmente le 2 librerie si incasianno a vicenda. Usa direttamente 2 pin diversi, non vedo dove sia il problema.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Jr. Member
**
Karma: 0
Posts: 88
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

ciao, puoi dirmi cortesemente su quale sito hai acquistato la scheda?
grazie
Logged

Freedomotic Domotica Open Source
http://freedomotic.com
We need your help. Please contact us for contributing

Firenze (Italy)
Offline Offline
Full Member
***
Karma: 0
Posts: 229
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@ freedomotic: Vai ai due link che ci sono nel primo post.... le ho prese li !

@ lesto: provo a spiegarmi meglio.
Come indicato nel post, il PROBLEMA nasce ancora prima di collegare le schede insieme, visto che appena inserisco il codice che gestisce il TFT ST7735 (in marrone) nello SKETCH che gestisce EasyVR iniziano i problemi. Ho iniziato a "debuggare" remmando..... appena attivo la riga in rosso per inizializzare lo schermo, Arduino NON RICONOSCE più la EasyVR.

Intendo dire che SICURAMENTE le due librerie non CONVIVONO, ma io NON SO come fare a farle lavorare insieme. SPERAVO bastasse cambiare appunto le porte alla libreria (NewSoftSerial port(12,13)smiley-wink da 12,13 a 6,7 ad esempio, ma non basta.

Logged

0
Offline Offline
Shannon Member
****
Karma: 129
Posts: 10433
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ah ok, hai già cambiato i pin... allora può essere cheil problema sia che non hai abbastanza ram. Cerca sul forum o nel palyground ci sono varie discussioni su come misurare la ram disponibile.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: [1]   Go Up
Jump to: