Go Down

Topic: Comportamento anomalo (Read 4 times) previous topic - next topic

garinus

quando apri arduino 0015 e apri il serial monitor in basso a destra c'è uno spazio per inviare dati via seriale

andrea80

Mamma mia! Ho fatto quello che mi hai detto ed è impazzito di nuovo...:-(

andrea80

Ragazzi vi prego aiutatemi a risolvere sto problema...Non so che pesci pigliare in questo momento..Aiutatemi a ragionare nella direzione giusta..:-(

Federico

io inizierei a vedere se da arduino riesci a ricevere segnale sulla seriale, e se da c riesci a mandarlo. Poi farai il resto
Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com

andrea80

Perfetto. Da C# riesco ad aprire la porta e cliccando su un buttn faccio accendere espegnere il led. Stop!
Cosa dovrei fare?

garinus

sostituire il comando accnedi il led con il comando del reset

andrea80

Ma parli du c# e su arduino?!

andrea80


Federico

ma cosa vuoi che faccia dunque? non si capisce + niente in questa discussione  :-?
Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com

andrea80

Il problema è sempre quello riuscire a fare il reset da software per evitare di premere il tast reset ogni qual volta ricollego l'apparecchio al pc.

andrea80

Altro aggiornamento. Con il seguente codice e utilizzando il serial monitor del tool, se premo mando il carattere H accendo, se mando il carattere L spengo, se mando R resetto. Il problema è che la procedura di reset non si ferma più, va avanti all'infinito.
Come diavolo fare?!??

Code: [Select]
int Led = 12;
int value =LOW;

char Csharp;
#include <avr/io.h>
#include <avr/wdt.h>

#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}

void setup() {
 Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
 pinMode(Led, OUTPUT);
}

void loop() {

 if (Serial.available() > 0) {

   Csharp = Serial.read();

   Serial.println(Csharp, DEC);   //questa linea non è necessaria se non vuoi fare il controllo di quello che hai ricevuto oppure se non hai qualcosa dall'altra parte che legga cioè mandi

   if (value == LOW  && Csharp=='R') {Reset_AVR();}
     else if (value == LOW  && Csharp=='H') value = HIGH;
     else if (value== HIGH && Csharp == 'L') value = LOW;



     digitalWrite(Led, value);}


 }

Federico

Ho riletto tutti i passaggi, ma non spieghi mai, e non si capisce, per quale motivo hai necessita' di resettare arduino! Proprio non e' chiaro.
Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com

garinus

#42
Jun 14, 2009, 12:57 am Last Edit: Jun 14, 2009, 12:58 am by garinus Reason: 1
prova ad aggiungre dopo l'if che resetta:
Csharp = 0;

magari la variabile rimane sporca dopo il reset ed ogni volta che resetti lui si ri resetta perchè la variabile contiene ancora r

non so se son stato chiaro cmq prova così

Code: [Select]
int Led = 12;
int value =LOW;

char Csharp;
#include <avr/io.h>
#include <avr/wdt.h>

#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}

void setup() {
 Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
 pinMode(Led, OUTPUT);
}

void loop() {

 if (Serial.available() > 0) {

   Csharp = Serial.read();

   Serial.println(Csharp, DEC);   //questa linea non è necessaria se non vuoi fare il controllo di quello che hai ricevuto oppure se non hai qualcosa dall'altra parte che legga cioè mandi

   if (value == LOW  && Csharp=='R') {

Reset_AVR();
Csharp = 0;
}
     else if (value == LOW  && Csharp=='H') value = HIGH;
     else if (value== HIGH && Csharp == 'L') value = LOW;



     digitalWrite(Led, value);}


 }

andrea80

Speriamo stavolta di essere charo.
Qual è la necessita di resettare arduino?!?
Il PC al quale dovrà essere collegato arduino per la mia applicazione potrebbe rimanere per un po di tempo spento. Riaccendendolo arduino ha bisogno di essere resettato con il pulsante sulla scheda. Siccome questo non potrò farlo perchè IO SARO' distante dalla macchina ho necessità che ogni qual volta parta lo sketch si resetti in ogni caso così che , se il pc fosse stato spento prima..arduino cominci a funzionare correttamente.

Ho provato il codice precedente: iente di nuovo: quando parte la procedura di RESET dura all'infinito...che fare?!??!?

admin

Ciao

Ogni volta che I'll computer apre la porta seriale , la scheda si resetta.
Questo vale per tutte le arduino dalla diecimila in poi.

Se vuoi provocare un reset basta che da c# chiudi e riapri la porta.

Quiesto vuol dire che quando I'll comp si accende provoca I'll reset della scheda.

Per favore rileggi attentamente e fai degli esperimenti sensati e vedrai che funziona.

M

Go Up