Show Posts
Pages: [1] 2
1  International / Generale / Re: puntatori a funzioni on: November 28, 2011, 04:00:12 pm
penso che la procedura corretta da seguire sia questa, però alcune cose mi sono dubbie... crea la classe debuggable e sensor, e fin qui ok.
Crea la classe TemperatureSensor che eredità da sensor e debuggable e poi? significa che in temperature sensor posso fare l'override di debug?
2  International / Generale / Re: puntatori a funzioni on: November 28, 2011, 03:33:20 pm
ho appena visto questo

http://www.arduino.cc/en/Hacking/LibraryTutorial

non sono molto esperto di arduino e pensavo fosse un po' diverso dal c e c++ normale..smiley-wink
grazie per le dritte, alla fine opto per le classi, sono la procedura migliore a mio parere..

Thanks!
3  International / Generale / Re: puntatori a funzioni on: November 28, 2011, 03:24:14 pm
certo, il top sarebbe realizzare un override dei metodi con l'implementazione della classe, ma giustamente è più facile dire importa questa classe e scrivi questo metodo per fare questo.
Per curiosità come realizzo un implementazione qui su arduino?
Grazieee smiley-wink spero vi piaccia il nostro progetto di integrazione tra arduino e iOS smiley-wink
4  International / Generale / Re: puntatori a funzioni on: November 28, 2011, 02:19:32 pm
infatti, essendo una classe un struct con dentro dei puntatori a funzione meglio usare subito i puntatori a funzioni... quello che devo realizzare è una libreria-wrapper per arduino che riceve in input una stringa da wifly o ethernet parsi la stringa e in base al contenuto di questa stringa richiami o meno alcune funzioni che poi l'utente deve implementare..
5  International / Generale / Re: puntatori a funzioni on: November 28, 2011, 01:28:51 pm
beh con un puntatore a funzione posso controllare se una classe è stata implementata o meno, amenochè non esista qualcosa di simile ai delegati non so quanto una classe mi sia utile smiley-wink
6  International / Generale / Re: puntatori a funzioni on: November 28, 2011, 07:27:18 am
Grazie mille!!!! sono molto piu sollevato!! smiley-wink
7  International / Generale / puntatori a funzioni on: November 28, 2011, 07:10:04 am
Ciao ragazzi, stò cercando una piccola info, su arduino esistono i puntatori a funzione ? perchè sto creando una piccola libreria per arduino e mi servirebbe sapere se l'utente ha implementato o meno alcune funzioni.
Grazie!
8  International / Generale / Re: Siri & Arduino on: November 28, 2011, 07:03:45 am
ciao ragazzi scusate se mi intrometto, non sono molto esperto di arduino, ma sono un iOS developer, SIRI controllato dalla mente era un fake, la notizia è stata smentita alcuni giorni dopo, comunque esiste SiriProxy

https://github.com/plamoni/SiriProxy

non occorre fare il JB dell'iphone e vi permette di fare qualsiasi cosa.

Ciaooo
9  International / Generale / Re: riconoscere input arduino on: August 14, 2011, 11:32:53 am
ecco qui
Code:
#include "WiFly.h"
//#include <WString.h>
#include "string.h"
#include "Servo.h"
//#include "Credentials.h"
Servo myservo5;
Servo myservo6;
int pos5=90;
int pos6=90;
int pin2=0;

//+++++++++paramentri input
int buttonState;             // the current reading from the input pin
int lastButtonState = LOW;
long lastDebounceTime = 0;  // the last time the output pin was toggled
long debounceDelay = 50;
//++++++++++

void setup()
{

 Serial.begin(9600);
 SpiSerial.begin();

 myservo5.attach(5);
 myservo6.attach(6);
 pinMode(7, OUTPUT);
 pinMode(8, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(2, INPUT);
 digitalWrite(7,LOW);
 digitalWrite(8,LOW);
 digitalWrite(3,LOW);

}

String myString= String(100);
boolean dataReceiving = false;
String readString = String(100);

boolean led1 = false;
boolean led2 = false;
int serInIndx = 0;
void loop () {
  //simple feedback from Arduino
 
  //read the serial port and create a string out of what you read
  //readSerialString(serInString, serInIndx);
  if(readSerialString())
  {
    if (myString.equals("0"))
           {
             if(led1)
             {
               digitalWrite(3,LOW);
               led1 = false;
             }
             else
             {
               digitalWrite(3,HIGH);
               led1 = true;
         
             }
             SpiSerial.print("0");
           }
           if (myString.equals("10"))
           {
              if(led2)
             {
               digitalWrite(7,LOW);
               led2 = false;
             }
             else
             {
               digitalWrite(7,HIGH);
               led2 = true;
         
             }
             SpiSerial.print("10");
           }
  }
 
  printSerialString();
  //lettura input da pin 2a
  int state2 = readInputState(2);
  if(state2 != -1)
  {
    Serial.print("read: ");
    Serial.print(state2);
    Serial.println();
  } 
  myservo5.write(0);
  //slows down the visualization in the terminal
}

int readInputState(int buttonPin)
{
  /*int reading = digitalRead(buttonPin);
  if (reading != lastButtonState) {
    // reset the debouncing timer
    lastButtonState = reading;
    return reading;
  }
  return -1;*/
    int reading = digitalRead(buttonPin);
  if (reading != lastButtonState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  }
 
  if ((millis() - lastDebounceTime) > debounceDelay)
  {
    buttonState = reading;
    return buttonState;
  }
  lastButtonState = reading;
  return -1;
}

boolean readSerialString ()
{
    boolean dataRead = false;
    if(SpiSerial.available())
    {
       while (SpiSerial.available())
       {
          char c = SpiSerial.read();
          //read char by char HTTP request
          Serial.print(c);
          if(c=='+') //se trovo + inizia la comuinicazione abilito datareceiving
          {
               dataReceiving = true;
               Serial.print("start comunication\n");
               readString = "";
          }
          else if ((readString.length() < 100) && (dataReceiving))
          {
             //store characters to string
             if(c=='-') //se a comunicazione attiva ricevo - significa che la comunicazione non è attiva
             {
               dataReceiving = false;
               Serial.print("end comunication\n");
             }
             else
             {
                 serInIndx++;
                 if(c == '!')//carattere di inizio corsa quando lo trovo la mia stringa è completa e quindi la posso processare
                 {
                   //readString.concat(c);
                   myString = "";
                   serInIndx = 0;
                   //Serial.print("start string\n");
                     
                 }
                 else if(c == '$')//carattere di fine corsa quando lo trovo la mia stringa è completa e quindi la posso processare
                 {
                   //readString.concat(c);
                   myString = readString;
                   readString = "";
                   dataRead = true;
                   serInIndx = 0;
                     
                 }
                 else
                 {
                   readString.concat(c);
                 }
             }
          }
       }
    }
    return dataRead;
}

//print the string all in one time
//this func as well uses global variables
void printSerialString()
{
   if( serInIndx > 0) {
      Serial.print("Arduino said: ");     
      //loop through all bytes in the array and print them out
      Serial.print(myString);
      /*for(serOutIndx=0; serOutIndx < serInIndx; serOutIndx++) {
          Serial.print( serInString[serOutIndx] );
         
          //print out the byte at the specified index
          //serInString[serOutIndx] = "";            //optional: flush out the content
      }  */     
      //reset all the functions to be able to fill the string back with content
      Serial.println();
   }
}
10  International / Generale / riconoscere input arduino on: August 13, 2011, 04:25:51 am
Ciao, vi sembrerà una cosa banale ma ho qualche problema con il riconoscere input. lato hardware ho semplicemente un pulsante con un resistenza da 20Kohm mentre per la parte software ho modificato l'esempio debounce per riconoscere gli input ma non funziona come vorrei

Code:
//+++++++++paramentri input
int buttonState;             // the current reading from the input pin
int lastButtonState = LOW;
long lastDebounceTime = 0;  // the last time the output pin was toggled
long debounceDelay = 50;
//++++++++++


Code:
int readInputState(int buttonPin)
{
  /*int reading = digitalRead(buttonPin);
  if (reading != lastButtonState) {
    // reset the debouncing timer
    lastButtonState = reading;
    return reading;
  }
  return -1;*/
    int reading = digitalRead(buttonPin);
  if (reading != lastButtonState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  }
 
  if ((millis() - lastDebounceTime) > debounceDelay)
  {
    buttonState = reading;
    return buttonState;
  }
  lastButtonState = reading;
  return -1;
}

e poi quando chiamo la funzione utilizzo
Code:
int state2 = readInputState(2);
  if(state2 != -1)
  {
    Serial.print("read: ");
    Serial.print(state2);
    Serial.println();
  }



quello che vorrei realizzare è una funzione che ritorni lo stato 0-1 solo quando cambia dallo stato precedente e altrimenti -1

avete qualche consiglio da darmi?
11  International / Generale / Re: arduino uno + wifly newbie on: July 29, 2011, 12:44:51 pm
perfetto... il problema sarà ora iniziare a creare il wrapper da distribuire poi...smiley

grazie.. diciamo che nell'ultimo anno ho lavorato solo per iOS e con java però mi ricordo ancora la fatica fatta nel creare moduli per il kernel in uni...smiley-wink
12  International / Generale / Re: arduino uno + wifly newbie on: July 29, 2011, 09:33:34 am
potrei inserire un carattere di inizio stringa, così azzero la stringa letta solo quando ricevo il carattere di inizio....
13  International / Generale / Re: arduino uno + wifly newbie on: July 29, 2011, 09:29:25 am
grazie per il consiglio! uso lo stesso sistema di debounce, ci avevo anche pensato in effetti smiley-wink
cosa consigli per la lettura della stringa? in effetti hai ragione..
14  International / Generale / Re: arduino uno + wifly newbie on: July 29, 2011, 08:48:36 am
si, avevo intuito il problema.. ora ho risolto quella parte... secondo voi è corretta una cosa del genere??
Code:
#include "WiFly.h"
//#include <WString.h>
#include "string.h"
#include "Servo.h"
//#include "Credentials.h"
Servo myservo5;
Servo myservo6;
int pos5=90;
int pos6=90;
int pin2=0;


void setup()
{

 Serial.begin(9600);
 SpiSerial.begin();

 myservo5.attach(5);
 myservo6.attach(6);
 pinMode(7, OUTPUT);
 pinMode(8, OUTPUT);
 pinMode(3, OUTPUT);
 pinMode(2, INPUT);
 digitalWrite(7,LOW);
 digitalWrite(8,LOW);
 digitalWrite(3,LOW);

}

String myString= String(100);
boolean dataReceiving = false;
String readString = String(100);
boolean led1 = false;
boolean led2 = false;
int serInIndx = 0;
void loop () {
  //simple feedback from Arduino
 
  //read the serial port and create a string out of what you read
  //readSerialString(serInString, serInIndx);
  if(readSerialString())
  {
    if (myString.equals("0"))
           {
             if(led1)
             {
               digitalWrite(3,LOW);
               led1 = false;
             }
             else
             {
               digitalWrite(3,HIGH);
               led1 = true;
         
             }
             SpiSerial.print("0");
           }
           if (myString.equals("10"))
           {
              if(led2)
             {
               digitalWrite(7,LOW);
               led2 = false;
             }
             else
             {
               digitalWrite(7,HIGH);
               led2 = true;
         
             }
             SpiSerial.print("10");
           }
  }
  pin2 = digitalRead(2);
  if(pin2 != 0)
  {
    Serial.print("input: ");
    Serial.print(pin2);
  }
  printSerialString();
 
  //slows down the visualization in the terminal
}



boolean readSerialString ()
{
    boolean dataRead = false;
    if(SpiSerial.available())
    {
      myString = "";
      serInIndx = 0;
       while (SpiSerial.available())
       {
          char c = SpiSerial.read();
          //read char by char HTTP request
          Serial.print(c);
          if(c=='+') //se trovo + inizia la comuinicazione abilito datareceiving
          {
               dataReceiving = true;
               Serial.print("start comunication\n");
               readString = "";
          }
          else if ((readString.length() < 100) && (dataReceiving))
          {
             //store characters to string
             if(c=='-') //se a comunicazione attiva ricevo - significa che la comunicazione non è attiva
             {
               dataReceiving = false;
               Serial.print("end comunication\n");
             }
             else
             {
                 serInIndx++;
                 
                 if(c == '$')//carattere di fine corsa quando lo trovo la mia stringa è completa e quindi la posso processare
                 {
                   //readString.concat(c);
                   myString = readString;
                   readString = "";
                   dataRead = true;
                     
                 }
                 else
                 {
                   readString.concat(c);
                 }
             }
          }
       }
    }
    return dataRead;
}

//print the string all in one time
//this func as well uses global variables
void printSerialString()
{
   if( serInIndx > 0) {
      Serial.print("Arduino said: ");     
      //loop through all bytes in the array and print them out
      Serial.print(myString);
      /*for(serOutIndx=0; serOutIndx < serInIndx; serOutIndx++) {
          Serial.print( serInString[serOutIndx] );
         
          //print out the byte at the specified index
          //serInString[serOutIndx] = "";            //optional: flush out the content
      }  */     
      //reset all the functions to be able to fill the string back with content
      Serial.println();
   }
}

inoltre volevo chiedervi per gli input come posso ragionare?? sul pin 2 ho messo un bottone c'è un modo per leggere il cambio stato?
ho provato così
Code:
pin2 = digitalRead(2);
  if(pin2 != 0)
  {
    Serial.print("input: ");
    Serial.print(pin2);
  }
ma il risultato è pessimo... sembra che lo stato 1 sia quello non attivo, mentre lo 0 quello attivo (premo il bottone)
mi è un po' difficile entrare nell'ottica di questo linguaggio arrivando da obj-c...
grazie a tutti smiley-wink
15  International / Generale / Re: arduino uno + wifly newbie on: July 29, 2011, 03:56:23 am
ho fatto delle modifiche trovando degli esempi in rete... il problema è che ora non va nulla..
Code:
void loop () {
  //simple feedback from Arduino
 
  //read the serial port and create a string out of what you read
  //readSerialString(serInString, serInIndx);
  readSerialString();
 
  //do somenthing else perhaps wait for other data or read another Serial string
  //Serial.println ("------------ arduino is doing somenthing else ");
  if (serInString=="0")
           {
             if(led1)
             {
               digitalWrite(3,LOW);
               led1 = false;
             }
             else
             {
               digitalWrite(3,HIGH);
               led1 = true;
         
             }
             SpiSerial.print("0");
           }
           if (serInString == "10")
           {
              if(led2)
             {
               digitalWrite(7,LOW);
               led2 = false;
             }
             else
             {
               digitalWrite(7,HIGH);
               led2 = true;
         
             }
             SpiSerial.print("10");
           }
  //try to print out collected information. it will do it only if there actually is some info.
  printSerialString();
 
  //slows down the visualization in the terminal
}



void readSerialString () {
    int sb;   
    if(SpiSerial.available()) {
       //Serial.print("reading Serial String: ");     //optional confirmation
       while (SpiSerial.available())
       {
          sb = SpiSerial.read();             
          serInString[serInIndx] = sb;
          serInIndx++;
          //serialWrite(sb);                        //optional confirmation
       }
       //Serial.println();
    } 
}

//print the string all in one time
//this func as well uses global variables
void printSerialString() {
   if( serInIndx > 0) {
      Serial.print("Arduino memorized that you said: ");     
      //loop through all bytes in the array and print them out
      for(serOutIndx=0; serOutIndx < serInIndx; serOutIndx++) {
          Serial.print( serInString[serOutIndx] );    //print out the byte at the specified index
          //serInString[serOutIndx] = "";            //optional: flush out the content
      }       
      //reset all the functions to be able to fill the string back with content
      serOutIndx = 0;
      serInIndx  = 0;
      Serial.println();
   }

}

l'output dato da arduino è questo:
Code:
Arduino memorized that you said: C
Arduino memorized that you said: onnected
Arduino memorized that you said:  via Ad-
Arduino memorized that you said: Hoc on R
Arduino memorized that you said: obotKea

Arduino memorized that you said:
Using S
Arduino memorized that you said: tatic IP
Arduino memorized that you said:
IF=UP

Arduino memorized that you said:
DHCP=OF
Arduino memorized that you said: F
IP=16
Arduino memorized that you said: 9.254.1.
Arduino memorized that you said: 1:80
NM
Arduino memorized that you said: =255.255
Arduino memorized that you said: .0.0
GW
Arduino memorized that you said: =0.0.0.0
Arduino memorized that you said:
Listen
Arduino memorized that you said:  on 80

Arduino memorized that you said:

Arduino memorized that you said: +
Arduino memorized that you said: 0
Arduino memorized that you said: 0
Arduino memorized that you said: 1
Arduino memorized that you said: 0

Pages: [1] 2