Go Down

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

garinus

mettere un controlo che se quello che ricevi via seriale corrisponde al dato giusto esegue il comando
Reset_AVR();

garinus

#16
Jun 03, 2009, 09:53 pm Last Edit: Jun 03, 2009, 09:53 pm by garinus Reason: 1
Code: [Select]

int Led = 12;
int value =LOW;

int 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();

   if (Csharp == 123) Reset_AVR();




     if (value == LOW) value = HIGH;
     else value = LOW;

     digitalWrite(Led, value);

}
delay(50);

 }




prova così

andrea80

Ma il reset lo si deve fare ogni qual volta si fa apre la porta...Come dovrei fare?!

admin

Ciao

Il computer effettua il reset in automatico ogni volta che apre la porta seriale per poter poi caricare del codice, tu non devi fare nulla.

Il tuo programma precedente resetta la scheda entro 30 millisecondi dal caricamento perche hai messo Reset_AVR() all'inizio del setup.
questo vuol dire che ogni programma carichi contiua a far resettare il processore appena parte.
da qui il lampeggio continuo che vedevi.

Il codice di garinus ti fa capire come va utilizzato correttamente Reset_AVR(). Il comando di reset viene eseguito solo quando mandi un carattere specifico, in questo caso il 123.




andrea80

Ok Comincio ad inquadrare la situazione. A sto punto, quand è che devo inviare i caratteri 123 alla seriale, considerando che la mia applicazione ha un bottone premendo il quale cambio lo stato del LED 12?!

Federico

Interessante il codice del reset... non ho mai capito a cosa serva resettare manualmente la scheda, ma e' interessante :)

Per quello che riguarda il problema dello stato del led invece, secondo me resettare la scheda non ha proprio senso... Se capisco bene, tu vuoi fare in modo che un led cambi stato a seconda del fatto che premi un bottone, giusto?

Io credo che ti serva questo:
http://www.ladyada.net/learn/arduino/lesson5.html
a seconda di quante volte premi il bottone, il led cambia stato.
Piu' facile di cosi'...
Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com

andrea80

Allora ho provato il codice di garinus.
Il led non si accende.
Tramite c# mando sulla porta 123 con questa
Code: [Select]
serialPort1.Write("123");

ma non succede niente!

Per federico. Devo accendere e spegnere il led da pulsante dell'applicazione in c#.

Andrea

Federico

Scusa, ma questo pulsante e' connesso all'arduino? Oppure e' un bottone di una interfaccia grafica?
Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com

andrea80

E' un pulsante di un interfaccia creata in C#.
L'obiettivo è pilotare arduino tramite un'applicazione c# che deve fare anche altre cose...!

garinus

non sono praticissimo di c sul pc
però come invii il numero?
prova ad inviarlo come byte e a sostituire nel programma anzichè char metti byte

andrea80

Code: [Select]
//configuring the serial port
           serialPort1.PortName = "COM3";
           serialPort1.BaudRate = 9600;
           serialPort1.DataBits = 8;
          // serialPort1.Parity = Parity.None;
           //serialPort1.StopBits = StopBits.One;

           //opening the serial port
           serialPort1.Open();

           //write data to serial port
           serialPort1.Write("123");

           //close the port
           serialPort1.Close();

Questo codice in c# è il codice relativo al pulsante che devo premere per fare accendere (se è spento) il led o che fa spegnere (se è acceso ) il led!

Helppp

Federico

E qual'e' il codice sull'arduino?
Federico - Sideralis
Arduino &C: http://www.sideralis.org
Foto: http://blackman.amicofigo.com

andrea80

Il codice sull'arduino è quello che è stato postato poco prima, al quale gli i  utenti gentilissimi di questo forum hanno aggiunto l'istruzione di reset.

garinus

hai provato a vedere cosa riceve l'arduino?
prova ad usare il comando send del compilatore e prova scrivere "123" o il carattere ascii corrispondente.
vedi se funziona così

andrea80

Potresti spiegarti un po' meglio?!? Qual è l'istruzione che dovrei usare?!?

Go Up