Снова вопросы

UW5EGA
Offline
Зарегистрирован: 16.09.2020

Раз все равно ничего не получается, попробую как что-то другое подумал. http://arduino.ru/Reference/DigitalRead

Через эту функцию хочу видеть на вебстранице состояние нужного мне контакта. Пример вывода подсмотрел здесь - https://radioprog.ru/post/109 И все равно ничего не получается, не хочет даже собираться, подсвечивает красным строку с IF. 

А нету какого-то букваря? Раз я не могу даже пример подставить. На сайте есть раздел "Программирование ардуино" но даже там мне не все понятно. Нужно понять самые азы, куда IF можно писать, а куда нельзя. 

#include <SPI.h>
#include <Ethernet.h> 
boolean newInfo = 0;

byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };     
IPAddress ip(192,168,4,70);
byte gateway[] = { 192, 168, 4, 1 };
byte subnet[] = { 255, 255, 255, 0 }; 
EthernetServer server(80);

int inPin = 2;                   // кнопка на входе 7
int val = 0;                     // переменная для хранения значения



void setup()
{
  pinMode(inPin, INPUT);         //  устанавливает режим работы - вход для 2го вход/выхода (pin)
  digitalWrite(8,HIGH);
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
}

void loop()
{
  val = digitalRead(inPin);      // считываем значение с входа
  EthernetClient client = server.available();
  if(client){
  boolean currentLineIsBlank = true;
  while (client.connected()) {
    if (client.available()) {
      char c = client.read();
                                                  
      if(newInfo && c == ' '){
        newInfo = 0;
      }
      
      if(c == '$'){                                 
                                                    
        newInfo = 1;                                
      }
      
                                                     
      if(newInfo == 1){                              
          Serial.println(c);
          if(c == '1'){                              
          Serial.println("ON");
          digitalWrite(8, LOW);
          }
          
          if(c == '2'){                              
          Serial.println("OFF");
          digitalWrite(8, HIGH);                     
          }    
      } 
      
      if (c == '\n') {                              
        currentLineIsBlank = true;                  
      } 
      else if (c != '\r') {
        currentLineIsBlank = false;
      }
    
      if (c == '\n' && currentLineIsBlank) {
        client.println("HTTP/1.1 200 OK");
        client.println("Content-Type: text/html");
        client.println("Connection: close");  
        client.println("Refresh: 1");
        client.println();
        client.println("<!DOCTYPE HTML>");
        client.println("<html>");
        client.print("<title>Alarm</title>");
        client.print("<H1>Block 1</H1>");
       if digitalRead(inPin))
  {
    client.println("<h3>0</h3>");
  }
  else
  {
    client.println("<h3>1</h3>");
  }
        client.println("<br />");       
        client.println("</html>");
        break;
      }
    
    }
    
  }
  delay(1);
  client.stop();
}
}

 

 

UW5EGA
Offline
Зарегистрирован: 16.09.2020

http://arduino.ru/Reference/If - 5 раз прочел эту страницу и не понял никакого смысла и чем мне это поможет. Тупой? Слишком старый для обучения?

sadman41
Offline
Зарегистрирован: 19.10.2016

Опять скобка потеряна. Пересчитайте в своем ифе кол-во открывающих и закрывающих круглых скобок

sadman41
Offline
Зарегистрирован: 19.10.2016

UW5EGA пишет:
http://arduino.ru/Reference/If - 5 раз прочел эту страницу и не понял никакого смысла и чем мне это поможет. Тупой? Слишком старый для обучения?

Просто невнимательный. Любой начинающий делает ошибки, за которые ему через некоторое время становится стыдно - теряет запятые, скобки, путает знаки.

Я вижу, что в данном коде криминала нет (кроме бессмысленного HTML). И с мигалкой тоже было на пять минут дел, если бы не бросил. Я же даже написал что куда копипастить.

Не сдавайся, мастер тебя похвалит ))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

UW5EGA пишет:
http://arduino.ru/Reference/If - 5 раз прочел эту страницу и не понял никакого смысла и чем мне это поможет. Тупой? Слишком старый для обучения?

Нет, краткая справка по Ардуино подразумевает, что читающий более или менее представляет себе язык программирования.

Другими словами, Вам надо читать не справку по Ардуино, а учебник по Си++.

UW5EGA
Offline
Зарегистрирован: 16.09.2020

Есть у меня знакомый который что-то понимает, долго я клянчил посмотреть мою поделку и вот свершилось. 

#include <SPI.h>
#include <Ethernet.h>
boolean newInfo = 0;
byte mac[] = { 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 };     
byte gateway[] = { 192, 168, 4, 1 };
byte subnet[] = { 255, 255, 255, 0 }; 
IPAddress ip(192,168,4,70);
 
EthernetServer server(80);
  int a;
  int count;
  int operation;
void setup()
{
  cli();
  pinMode(8, OUTPUT);
  digitalWrite(8,HIGH);
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
  /*
   * Настройка таймера по переполнению
   */
  TCCR1A = 0; // установить TCCR1A регистр в 0
  OCR1A = 15624; // установка регистра совпадения
  TCCR1B |= (1 << WGM12); // включение в CTC режим
  TIMSK1 = (1 << TOIE1);//включить прерывание Timer1 overflow
  TCCR1B |= (1 << CS12); 
  TCCR1B |= (0 << CS11);
  TCCR1B |= (1 << CS10);
  sei();
 
  a = 0;
  count = 0;
  operation = 0;
}
ISR(TIMER1_COMPA_vect)
{
  switch (a){
    case 1:
      count = 0;
      break;
    case 2:
      count = count + 1;
      break;
    default:;
  }
  if(a == 1)blinker();
}
void blinker() //Мигалка
{
  /*
  digitalWrite(8, HIGH);
  delay(8000);
  digitalWrite(8, LOW);
  delay(5000);
  digitalWrite(8, HIGH);
  delay(8000);
  digitalWrite(8, LOW);
  delay(10000);
  digitalWrite(8, HIGH);
  delay(210000);
  digitalWrite(8, LOW);
  */
  if(operation == 1){
    digitalWrite(8, HIGH);
    operation = 2;
    a = 1;
  }
  if((operation == 2) && (count == 8)){
    digitalWrite(8, LOW);
    operation = 3;
    count = 0;
  }
  if((operation == 3) && (count == 5)){
    digitalWrite(8, HIGH);
    operation = 4;
    count = 0;
  }
  if((operation == 4) && (count == 8)){
    digitalWrite(8, LOW);
    operation = 5;
    count = 0;
  }
  if((operation == 5) && (count == 10)){
    digitalWrite(8, HIGH);
    operation = 6;
    count = 0;
  }
  if((operation == 6) && (count == 210)){
    digitalWrite(8, LOW);
    operation = 0;
    a = 0;
  }
}
 
void loop()
{
  EthernetClient client = server.available();
  if(client){
  boolean currentLineIsBlank = true;
  while (client.connected()) {
    if (client.available()) {
      char c = client.read();
                                                  
      if(newInfo && c == ' '){
        newInfo = 0;
      }
      
      if(c == '$'){
        newInfo = 1;
      }
      
      if((newInfo == 1) && (operation == 0)){
          Serial.println(c);
          if(c == '1'){
          Serial.println("ON");
          operation = 1; // мигалка
          blinker(); // мигалка
          }
          
          if(c == '2'){
          Serial.println("OFF");
          digitalWrite(8, LOW);
          }    
      } 
      
      if (c == '\n') {
        currentLineIsBlank = true;
      } 
      else if (c != '\r') {
        currentLineIsBlank = false;
      }
    
      if (c == '\n' && currentLineIsBlank) {
        client.println("HTTP/1.1 200 OK");
        client.println("Content-Type: text/html");
        client.println("Connection: close");  
        client.println("Refresh: 30");
        client.println();
        client.println("<!DOCTYPE HTML>");
        client.println("<html>");
        client.print("<title>Web Server</title>");
        client.print("<H1>Web Server</H1>");
        client.print("<a href=\"/$1\"><button>On</button></a>");
        client.print("<a href=\"/$2\"><button>Off</button></a>");
        client.println("<br />");       
        client.println("</html>");
        break;
      }
    
    }
    
  }
  delay(1);
  client.stop();
}
}

Ииии не работает! Вебстраница недоступна, пинга нет. Если убрать из кода это:

/*
   * Настройка таймера по переполнению
   */
  TCCR1A = 0; // установить TCCR1A регистр в 0
  OCR1A = 15624; // установка регистра совпадения
  TCCR1B |= (1 << WGM12); // включение в CTC режим
  TIMSK1 = (1 << TOIE1);//включить прерывание Timer1 overflow
  TCCR1B |= (1 << CS12); 
  TCCR1B |= (0 << CS11);
  TCCR1B |= (1 << CS10);
  sei();

то вебстраница начинает быть доступной, но нет реакции на кнопки. 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Эпическая битва.

Теперь, товарищ рядовой электрик, понимаете почему специализированное оборудование стоит дорого и из говна и палок с Алиэкспресса собрать аналог удается крайне редко?

UW5EGA
Offline
Зарегистрирован: 16.09.2020

sadman41 пишет:
Эпическая битва. Теперь, товарищ рядовой электрик, понимаете почему специализированное оборудование стоит дорого и из говна и палок с Алиэкспресса собрать аналог удается крайне редко?

О да теперь понимаю! подъехала свежая информация - "перепиши вместо TOIE1, OCIE1A".  Вроде заработало но без задержек, где-то еще косяк. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

мне кажется OCR1A инициализируется рановато, сравни:
 

// Остановка таймера и перевод пина D10 в режим OUTPUT - TCCR1A &= ~0x30;
// Для проверки работы алгоритма стандартными средствами ардуино задействуем
// на пине 13 (синхронное тактирование с D10), для проверки сброса и установки таймера
// воспользуемся функцией millis()

unsigned long int old_Millis = 0;
unsigned int pause = 15000;

enum Prescalers {
   PRESCALER_1 = 1, PRESCALER_8 = 2, PRESCALER_64 = 3, PRESCALER_256 = 4, PRESCALER_1024 = 5
};

void set_Timer(){
   pinMode(13, OUTPUT);
   uint8_t prescaler = PRESCALER_256;
   uint16_t topValue = 62499;
   pinMode(10, OUTPUT);
   TCCR1A = 0x10;              // Инвертирование пина 10 по сравнению
   TCCR1B = 0x08 | prescaler;  // Установить СТС режим и делитель частоты
   OCR1A = topValue;           // установить TOP равным topValue
}

void start_Timer(){
  TCCR1A = 0x10;              // Инвертирование пина 10 по сравнению
}

void end_Timer(){
 TCCR1A &= ~0x30;
 digitalWrite(10,LOW);
}

void sync_Timer(){
    if (digitalRead(10)==HIGH){
    digitalWrite(13,HIGH);
        } else {
    digitalWrite(13,LOW);}
}

void setup() {
  set_Timer();
  old_Millis = millis();
}

void loop() {
  unsigned long int new_Millis = millis();
  if (new_Millis - old_Millis <= pause){
   sync_Timer();
    }else{
      end_Timer();
      sync_Timer();
      delay(10000);
      start_Timer();
      old_Millis = millis();
     }
    }

 

UW5EGA
Offline
Зарегистрирован: 16.09.2020

ua6em пишет:

мне кажется OCR1A инициализируется рановато, сравни:
 

// Остановка таймера и перевод пина D10 в режим OUTPUT - TCCR1A &= ~0x30;
// Для проверки работы алгоритма стандартными средствами ардуино задействуем
// на пине 13 (синхронное тактирование с D10), для проверки сброса и установки таймера
// воспользуемся функцией millis()

unsigned long int old_Millis = 0;
unsigned int pause = 15000;

enum Prescalers {
   PRESCALER_1 = 1, PRESCALER_8 = 2, PRESCALER_64 = 3, PRESCALER_256 = 4, PRESCALER_1024 = 5
};

void set_Timer(){
   pinMode(13, OUTPUT);
   uint8_t prescaler = PRESCALER_256;
   uint16_t topValue = 62499;
   pinMode(10, OUTPUT);
   TCCR1A = 0x10;              // Инвертирование пина 10 по сравнению
   TCCR1B = 0x08 | prescaler;  // Установить СТС режим и делитель частоты
   OCR1A = topValue;           // установить TOP равным topValue
}

void start_Timer(){
  TCCR1A = 0x10;              // Инвертирование пина 10 по сравнению
}

void end_Timer(){
 TCCR1A &= ~0x30;
 digitalWrite(10,LOW);
}

void sync_Timer(){
    if (digitalRead(10)==HIGH){
    digitalWrite(13,HIGH);
        } else {
    digitalWrite(13,LOW);}
}

void setup() {
  set_Timer();
  old_Millis = millis();
}

void loop() {
  unsigned long int new_Millis = millis();
  if (new_Millis - old_Millis <= pause){
   sync_Timer();
    }else{
      end_Timer();
      sync_Timer();
      delay(10000);
      start_Timer();
      old_Millis = millis();
     }
    }

 

Я вообще не знаю, что оно делает. Но не работает его вариант кода, показывает только в браузере кнопки и при их нажатии нет никакой реакции. Смотрел в коде какие-то закономерности - ничего не нашел. Этот товарищ сказал, что это мои проблемы почему оно не работает. Вернулись снова откуда начали. 

UW5EGA
Offline
Зарегистрирован: 16.09.2020

UW5EGA пишет:
Эпическая битва. Теперь, товарищ рядовой электрик, понимаете почему специализированное оборудование стоит дорого и из говна и палок с Алиэкспресса собрать аналог удается крайне редко?

Еще как довелось услышать, что эту "систему" до меня пытались отремонтировать на протяжении 8 лет! В каком-то графике есть даты испытания и каждый год руководство сношало друг-друга по кругу. Каждый год выделялись средства и люди на ее ремонт и каждый раз ее не могут отремонтировать. До моего предложения... На каком-то этапе я уже начал отказываться от этой затеи, но мне сказали, что соскочить не получится уже. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Что, расстреливать у полыньи начнут?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

sadman41 пишет:
Что, расстреливать у полыньи начнут?

Видимо, хуже. 

UW5EGA
Offline
Зарегистрирован: 16.09.2020

Скорее всего поставят секретную отметку в трудовой, что тебя потом нигде брать не будут. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

UW5EGA пишет:

Скорее всего поставят секретную отметку в трудовой, что тебя потом нигде брать не будут. 

прототип у тебя почти готов (на одну ячейку), продемонстрируешь принципиальную возможность реализации этой задачи через сеть, а дальше проси денег побольше )))
 

UW5EGA
Offline
Зарегистрирован: 16.09.2020

В пятницу была демонстрация с делеями, на лампочку. 10 штук всего нужно будет сделать. + экран сделал из двухстороннего гетинакса найденного на помойке.  

gfx125
Offline
Зарегистрирован: 27.05.2017

Ящичег похож на блок управления системой оповещения ГО. Не оно?

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

UW5EGA пишет:

Еще как довелось услышать, что эту "систему" до меня пытались отремонтировать на протяжении 8 лет!

Прости мою невнимательность, но я забыл где ты писал, что эта "система" должна делать? Напомни, или ссылку дай, если не против. Что-то мне интересно стало! ;))

UW5EGA
Offline
Зарегистрирован: 16.09.2020

gfx125 пишет:

Ящичег похож на блок управления системой оповещения ГО. Не оно?

Оно самое.