Problema alimentazione

In relazione al mio post "Comportamento anomalo" ho capito che devo alimentare arduino con un trasformatore. Mi chiedo è giusta una cosa del genere!?!? Il fatto che si autoresettasse dopo lo spegnimento del pc o la mancanza di corrente, era una prerogativa di arduino..perchè ne devo fare a meno?!?

ANDREA

Si e' giusto. Non c'e' motivo per il qual tu debba interenire con il reset per far funzionare il tuo programma. Ci sono soluzioni software per ogni cosa, e il reset, se deve fare parte del funzionamento attivo del tuoprogetto, e' proprio -secondo me- una cosa cavernicola.

Il reset non fa proprio parte del mio progetto. Solo che staccando il pc arduino non funziona più (se non si resetta con il bottone..:( ) Non so più cosa pensare...voi mi dite una cosa mentre ne accade un'altra..!

Andrea

Dunque, io ho proprio una installazione che uso quotidianamente che prevede che arduino sia acceso prima e dopo l’accensione del pc. Quando il pc si accende se voglio posso controllare arduino.

Arduino e’ sempre attaccato alla corrente e al pc, ma il pc non e’ sempre acceso.

Non e’ che forse e’ il tuo software che non reagisce bene? Ci mostri l’ultima versione?

Dalle tue parole colgo una cosa. Arduino deve essere comunque attaccato alla corrente perchè anche nel mio caso il pc si può spegnere!!! Ok?!?

Se arduino deve continuare a funzionare a pc spento, deve essere attaccato alla corrente. Se invece deve funzionare solo a pc acceso, potresti (se il tuo assorbimento lo permette) pensare di alimentarlo solo dalla porta usb e quindi accendere e spengere arduino assieme al pc.

ok. Il problema qual è: mettiamo ce arduino viene alimentato solo da usb. Se il pc di spegne e si riaccende arduino non funziona più! E' normale una cosa del genere?!?

No, non e' normale. Dovrebbe funzionare! Se non funziona piu' va capito se e' un problema hardware o software. Escludendo che il tuo arduino sia non funzionante (poiche' cosi' il debug e' piu' facile) doremmo cercare di capire se il tuo software esegue delle chiamate che potrebbero causare questo stato!

Questo è il semplice codice c#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace RiprovoSerial
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            serialPort1.Open();
            serialPort1.Write("H");
            serialPort1.Close();
        

        }

        private void button2_Click(object sender, EventArgs e)
        {
            serialPort1.Open();
         
            serialPort1.Write("L");
            serialPort1.Close();
           
        }

        private void button3_Click(object sender, EventArgs e)
        {

           
            serialPort1.Open();
            serialPort1.Write(" ");
            serialPort1.Close();
          
        }
    }
}

Non sono del tutto sicuro di essere in grado di leggere il C# ma mi pare sostanzialmente valido. Quello su arduino invece com'e' ? F

Eccolo:

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);}


  }

Questo codice pero' include quel reset del quale non sono molto convinto.. Il mio codice e' questo:

accende e spegne una coppia di rele ma ovviamente e' identico se usi un led.

/*
 * Accensione RME e Amplificatori
 * Per accendere gli amplificatori inviare "s 0 1" e per spegnerli "s 0 0"
 * Per accendere la scheda audio inviare "s 1 1" e per spegnerli "s 1 0"
 * Connettere i rele' per gli ampli al pin 3 e quello per la scheda audio al 2
 */

int relayPinRME = 2;     // RME Relay is connected to pin 2
int relayPinAMP = 3;     // AMP Relay is connected to pin 3
char AMP='0'; // Ho messo il carattere 0 e non il valore 0
char RME='1'; // Attenzione alla differenza tra caratteri e interi!
char val;

void setup() {
  pinMode(relayPinRME, OUTPUT);    // Set the RME pin as output
  pinMode(relayPinAMP, OUTPUT);    // Set the AMP pin as output
  Serial.begin(9600);
}

void loop() {
  
  if (Serial.available()>=5) {
    char cmd,apparato,stato;
    
    cmd=Serial.read();Serial.read();
    apparato=Serial.read();Serial.read();
    stato=Serial.read();
    
    // esegue le operazioni indicate
    if (apparato == AMP && stato=='0'){
       digitalWrite(relayPinAMP, LOW);
       Serial.println("Spengo Amplificatori..."); 
    }
    else if (apparato == AMP && stato=='1'){
       digitalWrite(relayPinAMP, HIGH);
       Serial.println("Accendo Amplificatori...");
    }
    else if (apparato == RME && stato=='0'){
       digitalWrite(relayPinRME, LOW);
       Serial.println("Spengo Rme...");
    }
    else if (apparato == RME && stato=='1'){
       digitalWrite(relayPinRME, HIGH);
       Serial.println("Accendo Rme...");
    }
    
  }
  
}

Ultimo aggiornamento. Con i miei codici di c# e su arduino (che ho postato), il tutto sembra funzionare: quando tolgo l'alimentazione, devo solo premere più volte sul tasto accendi della mia applicazione e non una volta soltanto. C'è qualche modo per ovviare a questo problema?!?

Andrea

E' un problema di comunicazione sulla seriale dunque. Lavora su quello. Anche a me lo faceva, prima di arrivare al codice che ho postato.

Ecco...Speriamo sia la fine di una telenovela. Lavoro sul tuo e ti faccio sapere....

Andrea

Ma a primo acchitto cosa potrebbe essere?!

Raga..dove può essere l'intoppo secondo voi allora??

ciao andrea

se nessuno ti risponde probabilmente nessuno è in grado di trovare una risposta in base alle informazioni che hai fornito.

sollecitare una risposta non serve che a rendere meno interessante il tuo quesito...

se si tratta di un progetto personale (no profit) allora prova a riformulare la domanda

se invece è un progetto per il quale vieni pagato puoi chiedere consuleza a pagamento ed il tuo problema sparisce in poche ore.

m

Il progetto è no profit. Il problema è: dopo aver staccato l'alimentazione devo cliccare piu volte sul pulsante della mia interfaccia in c# per far accendere il le su arduino. Spero di essere stato chiaro...:-)

Questo lungo dilemma è stato risolto...!

Ho semplicemente, in fase di inizializzazione della mia applicazione in c#, fatto aprire e chiuderela porta seriale. Adesso funziona tutto perfettamente