No hay salida en serie desde Mega 2560

1

Tengo el Arduino Mega 2560 y también el Freetronics Ethermega (con el mismo chipset). Mi placa y mi código funcionaron perfectamente hasta el fin de semana pasado, cuando ya no genera ningún dato del Serial (a través de USB). Cuando se trabaja, muestra las temperaturas de 12 salas en crecimiento y cuando la temperatura alcanza un cierto umbral, me llama (a través del código VB).

He confirmado esto utilizando 2 Boards (Mega & Freetronics). Sin embargo, el Freetronics con Ethernet muestra los valores de salida correctamente en una página web. También tenga en cuenta que el "Monitor de serie" también muestra 0.00 como la temperatura actual.

He colocado pantallas para el valor del sensor y esto muestra un valor en los 300's. Declaración típica, "Honestamente no cambié nada ...".

He eliminado el software Arduino, instalé la última versión y quité el controlador USB y lo reinstalé. Lo curioso es que reconoce ambos como adjuntos. Com 8 & Com 9 dependiendo de qué tabla se adjunta. También he tratado de utilizar diferentes fuentes de alimentación.

Este es el código serial, el segundo es para la conexión serial y Ethernet.

#define SENSOR_COUNT 12
const int analog_pins[SENSOR_COUNT] = {0,1,2,3,4,5,6,7,8,9,10,11};

void loop() {
   for(int I=0; I < SENSOR_COUNT; I++){
      int sensorValue = analogRead(analog_pins[I]);
      float voltage;

      // { voltage = ((sensorValue) * (5.0 / 1023.0) - (0.07));}
      //  Look at the Arduino Project - Get the real voltage input usb power supply. 
      //  Check the Arduino Mega has this chipset (book marked in Firefix under Arduino - Real input voltage post
      // Putting a Meter across the 5v pin and Ground I get:-
      //  Jumper on DC In  -  3.77vDC (with both Power and Usb connected)
      //  Jumper on USB    -  4.71vDC (with only Usb connected)
      //  Jumper on DC In  -  1.16vDC (with only Usb and Jumper)
      //  Jumper on DC In Using a steady power supply gives 11.32

      // { voltage = ((sensorValue) * (5.06 / 1023.0));}   
      // { voltage = ((sensorValue) * (3.75 / 1023.0));}   
      // { voltage = ((sensorValue) * (4.24 / 1023.0));} 
      // { voltage = ((sensorValue) * (11.32 / 1023.0));}
      // { voltage = (sensorValue / 1023.0);}

  //Commented out to try and find why were getting 0.00 out of the srial

  //if (voltage < 0){ voltage = 0.00;}

      // Next 4 lines only used for testing

      Serial.print(I);
      Serial.print(" ");
      Serial.print(sensorValue);
      Serial.print(" ");

      Serial.print("Address = ");
      Serial.print(analog_pins[I] +1);
      Serial.print(" ");
      Serial.print(voltage);
      Serial.println();
      delay(1500);  
    }
}'

Second code for Serial and ethernet..

    /*
 Arduino and Ethernet
 */

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {   0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = {  192,168,1,11 }; // don't forget to change this IP address for your own situation

EthernetServer server(80);

void setup()
{
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
  server.begin();
}

float voltage=0;
float sensor=0;

#define SENSOR_COUNT 12
const int analog_pins[SENSOR_COUNT] = {0,1,2,3,4,5,6,7,8,9,10,11};

void loop()
{
  EthernetClient client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean current_line_is_blank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        // if we've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so we can send a reply
        if (c == '\n' && current_line_is_blank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.println("<!DOCTYPE html>");
          client.println("<html>");
          client.println("<head>");
          client.println("<title>Greenhill Mushrooms</title>");
          client.println("<meta http-equiv=\"refresh\" content=\"1\">");
          client.println("</head>");
          client.println("<body>");
          client.println("<h1 align=center>Greenhill Mushrooms</h1>");
          client.println("<h1 align=center>Room Monitoring System</h2>");          
          client.println("</body>");
          client.println("</html>");

        for(int I=0; I < SENSOR_COUNT; I++){
          int sensorValue = analogRead(analog_pins[I]);
          float voltage;

          // { voltage = ((sensorValue) * (5.0 / 1023.0) - (0.07));}
          { voltage = ((sensorValue) * (5.0 / 1023.0));}
          if (voltage < 0){ voltage = 0.00;}

          voltage = voltage * 10;

          client.print("Room ");
          client.print(analog_pins[I] +1);
          client.print("'s Temperature is ");
          client.print(voltage);
          client.println("<br />"); // new line

          Serial.print("Address = ");
          Serial.print(analog_pins[I] +1);
          Serial.print(" ");
          Serial.print(voltage / 10);
          Serial.println();

         delay(1500);           

          }
           break;
        }
        if (c == '\n') {
          // we're starting a new line
          current_line_is_blank = true;
        } 
        else if (c != '\r') {
          // we've gotten a character on the current line
          current_line_is_blank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
   client.stop();
  }
}

¿Puedes ayudar a resolver lo que está mal?

    
pregunta Mark Fellowes

1 respuesta

1

En el segundo ejemplo de código, tienes:

  

Serial.print(voltage / 10);

Probablemente quisiste decir:

  Serial.print(voltage / 10.0);
    
respondido por el baldengineer

Lea otras preguntas en las etiquetas