Ciao ragazzi, avevo intenzione di controllare il mouse del mio computer tramite il WiiNunchuck (per ora sono fissato con questo giocattolino!) e quindi mi sono chiesto se è meglio sviluppare un'applicazione in C# o in VB.
Qual'è più rapido ed intuitivo? Quale gestisce meglio i dati seriali?
Quale dei due ha ambiente di sviluppo migliore (si può usare per entrambi Visuali Studio mi sembra no?)?
Qualche guida per iniziare?
Visual Basic e' piu' facile, probabilmente pero' hai maggiore ritorno nel futuro col C#
Ad ogni modo, di "rapido e intuitivo" nel mondo della programmazione, se non sei un programmatore, non c'e' niente.
Infine... ho googlato velocemente e ho trovato un sacco di pagine di gente che ha gia' fatto questo lavoro, forse e' il caso di dedicarsi a qualcosa di piu' innovativo? ]![]()
confermo con federico, lo attacchi al telecomando via bt e via di glovepie che è un'attimo, ti programmi tutti i tasti, lo usi in 10 metri di distanza senza ostacoli o più dal pc, puoi usare anche il telecomando che è comodo come media controller
superlol:
confermo con federico, lo attacchi al telecomando via bt e via di glovepie che è un'attimo, ti programmi tutti i tasti, lo usi in 10 metri di distanza senza ostacoli o più dal pc, puoi usare anche il telecomando che è comodo come media controller
Ho due xBee e ne uso uno collegato al computer come ricevitore/trasmettitore USB!
Federico:
Forse e' il caso di dedicarsi a qualcosa di piu' innovativo? ]
A me serve semplicemente imparare le basi per un linguaggio che mi permetta di avere manopole, slidebar e textbox per visualizzare dati che si ricevono dalla seriale.
P.S.
Ho già fatto un paio di progettini con processing e devo dire con buoni risultati (Controllo motori DC con Arduino + Processing + Ipod Touch) ma voglio qualcosa con interfaccia più da windows!
Xfox:
voglio qualcosa con interfaccia più da windows!
Argh... un altro che bestemmia... ![]()
leo72:
Xfox:
voglio qualcosa con interfaccia più da windows!Argh... un altro che bestemmia...
![]()
leo72:
Xfox:
voglio qualcosa con interfaccia più da windows!Argh... un altro che bestemmia...
Per motivo scolastico! Non fraintendermi xD
Sostanzialmente con .net C# o VB è la solita cosa, cambia solo la sintassi.
Tieni presente che nessuno dei due si impara in una sera, ci vogliono settimane con esperti al proprio fianco o corsi di diversi mesi ben strutturati.
Comunque se ti interessa c'è una versione di visual studio 2010 gratuita e comprende sia C# che VB
Ciao
flz47655:
Sostanzialmente con .net C# o VB è la solita cosa, cambia solo la sintassi.
Tieni presente che nessuno dei due si impara in una sera, ci vogliono settimane con esperti al proprio fianco o corsi di diversi mesi ben strutturati.
Comunque se ti interessa c'è una versione di visual studio 2010 gratuita e comprende sia C# che VB
Ciao
Io avevo delle basi di C e anche di C#. Avevo cominciato l'anno scorso con un libro della Mondadori: Microsoft Visual C# 2005 Passo per Passo.
Così ho deciso di Microsoft Visual Studio 2005 Pro (che avevo già in casa).
Ciò che mi serviva erano delle dritte per gestire la porta seriale!
Se hai un pc recente Visual Studio 2010 direi che è meglio.
E' gratuito anche nella versione professional per studenti con programmi come DreamSpark o tramite l'università
Qui un esempio di programma da me creato che comunica tramite seriale e scritto in c#:
Sono riuscito a stabilire una connessione seriale (anche se devo sistemare ancora parecchie cose) però mi è sorta una domanda!
Come invio il comando di reset via seriale?!
Cioè quando apro il serial monitor dell'ide dell'arduino il programma si riavvia... Se apro la connessione seriale dal C# invece il programma continua da dov'era!
Ciao leggiti questo post http://arduino.cc/forum/index.php/topic,60774.0.html
ma anche questo http://arduino.cc/forum/index.php/topic,64405.0.html
In pratica devi mettere il DTR e RST basso per tot tempo (1ms o più) poi li imposti entrambi alti.
Non so come si fa con il linguaggio da te usato.
Ciao.
Allora ragazzi, stavo provando a controllare un servo tramite 3 pulsanti (Sinistra, Centro, Destra).
Ecco il codice:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Controllo_Servo_con_C_Sharp
{
public partial class Form1 : Form
{
byte[] pos = new byte[1];
public Form1()
{
InitializeComponent();
serialPort1.PortName = "COM3";
serialPort1.BaudRate = 9600;
}
private void button3_Click(object sender, EventArgs e)
{
pos[0] = (byte)90;
mostra_testo();
}
private void button1_Click(object sender, EventArgs e)
{
pos[0] += (byte)5;
mostra_testo();
}
private void button2_Click(object sender, EventArgs e)
{
pos[0] -= (byte)5;
mostra_testo();
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
byte[] read = new byte[1];
read[0] = (byte)serialPort1.ReadByte();
if (read[0] == (byte)1)
{
serialPort1.Open();
serialPort1.Write(pos, 0, 1);
serialPort1.Close();
}
}
private void mostra_testo()
{
//textBox1.Text = pos;
}
}
}
Non è ultimato ma sto avendo problemi con la gestione della seriale.
Ecco lo sketch di arduino:
#include <Servo.h>
Servo Servo1;
int pos = 90;
/*
Comando 1: Richiesta dati
*/
int comandi[] = {0,1};
void setup(){
Serial.begin(9600);
Servo1.attach(3);
Servo1.write(pos);
}
void loop(){
richiesta_dati();
scrivi_servo();
}
long wait_dati = 0;
void richiesta_dati(){
if (wait_dati < millis()){
wait_dati = millis() + 250;
Serial.print(1);
delay(100);
pos = Serial.read();
}
}
long wait_servo = 0;
void scrivi_servo(){
if (wait_servo < millis()){
wait_servo = millis() + 25;
Servo1.write(pos);
}
}
In pratica ogni 250 ms invia "1" tramite seriale, questo "1" deve essere interpretato dal pc come richiesta dati quindi:
byte[] read = new byte[1];
read[0] = (byte)serialPort1.ReadByte();
if (read[0] == (byte)1){}
Sono arrivato a questa soluzione per evitare che visual studio mi dasse errori!
Non posso ricevere un valore integer?
Comunque, continuando, se il comando "1" viene riconosciuto il programma apre la porta seriale, invia la posizione del servo e la richiude:
serialPort1.Open();
serialPort1.Write(pos, 0, 1);
serialPort1.Close();
E anche qui qualche problemino con serialPort1.Write(pos, 0, 1)
Non posso semplicemente scrivere un valore integer sul buffer seriale e poi farlo leggere ad arduino?
Poi come faccio a mostrare un valore integer in una textbox?
chr(pos) è ottimo, poi arduino lo legger come integer
usa le tabelle ascii insomma, se devi andare da 0 a 180 vannop benissimo (255 il limite)
superlol:
chr(pos) è ottimo, poi arduino lo legger come integer
usa le tabelle ascii insomma, se devi andare da 0 a 180 vannop benissimo (255 il limite)
Si ma come faccio a incrementare un valore char?
Posso fare:
char pos = (char)1;
pos += (char)5
?
Xfox:
superlol:
chr(pos) è ottimo, poi arduino lo legger come integer
usa le tabelle ascii insomma, se devi andare da 0 a 180 vannop benissimo (255 il limite)Si ma come faccio a incrementare un valore char?
Posso fare:char pos = (char)1;
pos += (char)5
?
se ho capito bene il software lascia tutto com'è e modifica solo:
serialPort1.Open();
serialPort1.Write(chr(pos));
serialPort1.Close();
superlol:
Xfox:
superlol:
chr(pos) è ottimo, poi arduino lo legger come integer
usa le tabelle ascii insomma, se devi andare da 0 a 180 vannop benissimo (255 il limite)Si ma come faccio a incrementare un valore char?
Posso fare:char pos = (char)1;
pos += (char)5
?se ho capito bene il software lascia tutto com'è e modifica solo:
serialPort1.Open();
serialPort1.Write(chr(pos));
serialPort1.Close();
Ho deciso di lavorare con gli Integer e poi convertire al momento dell'invio con
Convert.ToChar(pos)
Solo che se passo il valore 126 mi invia "63" come mai?
quello che ti ho scritto fa esattamente ciò che dici:
prende l'integer e lo trasforma in un carattere ascii, quindi invia la stinga che nel caso di 180 dovrebbe arrivare ¥ (ma questo è variabile), se invii 90 Z e così via in base alla tabella linkata sopra.
se da 1 solo integer ritornano 2 caratteri vuol dire che non è andato qualcosa, anzi è andato qualcosa di doppio
superlol:
Tabella caratteri codice ASCIIquello che ti ho scritto fa esattamente ciò che dici:
prende l'integer e lo trasforma in un carattere ascii, quindi invia la stinga che nel caso di 180 dovrebbe arrivare ¥ (ma questo è variabile), se invii 90 Z e così via in base alla tabella linkata sopra.se da 1 solo integer ritornano 2 caratteri vuol dire che non è andato qualcosa, anzi è andato qualcosa di doppio
Da lo stesso problema! Superato "126" invia "63"