Сделать стартовойДобавить в закладки  
Главная страничка Главная страничка
В номере:

    Выходит с 17 июля 2008 г. цена договорная

    Опрос

    конечно, он настанет в 2012 г.
    да, но не в 2012 г.
    нет, это фантастика
    а что такое конец света
    а мне пофиг - я буду уже мертв



    Календарь
    «    Май 2013    »
    ПнВтСрЧтПтСбВс
     12345
    6789101112
    13141516171819
    20212223242526
    2728293031 

    Архив новостей
    Ноябрь 2013 (1)
    Май 2013 (2)
    Апрель 2013 (3)
    Март 2013 (2)
    Февраль 2013 (1)
    Январь 2013 (2)

    Информация
    Arduino + w5100 + SD
    Arduino
    автор: dimon, опубликовано: 1 мая 2013

    Посмотрим как записывать данные в файл на SD карточке, установленной в картридере Ethernet W5100 Shield Network Expansion Board w/ Micro SD Card Slot.
    Для этого напишем простой скетч, который будет принимать по com-порту строку, выводить ее на экран 1602 вместе с количеством принятых строк, делать эхо этой строки в com-порт, и записывать ее в текстовый файл на карте памяти SD.
    Т.к. шилд использует digital пины 4 (низкий уровень – выбор картридера на шилде), 10 (низкий уровень – выбор ethernet на шилде), 11 (SPI bus – MOSI), 12 (SPI bus – MISO), 13 (SPI bus – CLK), а в наших ранних примерах эти пины использовал дисплей, то придется переподключить дисплей на другие цифровые выходы.

    Скетч с кучей комментариев, надеюсь, не требует дополнительных пояснений:
    /*
    Баловство с w5100 и com-портом
    Будем принимать по com-порту строку, выводим ее на экран и
    записывать в файл на SD карте
    
    Оборудование:
    - дисплей 1602, потенциометр для подсветки дисплея
    - Ethernet W5100 Shield Network Expansion Board w/ Micro SD Card Slot
    - SD карточка
    
    Подключение дисплея 1602:
    Контакт дисплея  	Контакт Arduino	             Значение
      1	                       GND                   Vss
      2                            5V                    Vdd
      3                            GND	             Vo (контрастность)
      4	                       digital 9	     RS
      5	                       digital 8             R/W
      6	                       digital 7             ENABLE
      11	                       digital 6	     DB4
      12	                       digital 5	     DB5
      13	                       digital 3	     DB6
      14                           digital 2	     DB7
      15	                       5V	             LED+
      16                           GND	             LED-
    
    Подключение W5100:
    Обмен данными между Ардуиной и Шилдом происходит по SPI.
    Низким уровнем на digital выводе выбирает ведомое устройство на шине SPI:
    выбор SD - digital 4
    выбор ethernet - digital 10
    
     * SD card attached to SPI bus as follows:
     ** MOSI - pin 11
     ** MISO - pin 12
     ** CLK - pin 13
     ** CS - pin 4
    
     */
     
     
     
     // подключаем библиотеки
     #include <LiquidCrystal.h>    // для работы с LCD
     #include <SPI.h>              // для работы с SPI
     #include <SD.h>               // для работы с SD
    // #include <Ethernet.h>       // для работы с Ethernet
     
    
     // инициализируем LCD, указывая контакты данных
     LiquidCrystal lcd(9, 8, 7, 6, 5, 3, 2);
    
    
    // задаем переменные
    boolean receiveFlag = false;      // флаг что было что-то принято через com-порт
    String myString;                  // строка
    char* FileName = "testfile.txt";  // имя файла с которым будем работать
    File myFile;                      // класс File
    int Count = 1;                    // счетчик
    int selectEthernet = 10;          // выбор ведомого на шилде - Ethernet
    int selectSd = 4;                 // выбор ведомого на шилде - SD
    
    // включим Ethernet
    #define SWITCH_TO_W5100 digitalWrite(selectSd,HIGH); digitalWrite(selectEthernet,LOW);
    // включим SD
    #define SWITCH_TO_SD digitalWrite(selectEthernet,HIGH); digitalWrite(selectSd,LOW);
    // выключим и SD и Ethernet
    #define ALL_OFF digitalWrite(selectEthernet,HIGH); digitalWrite(selectSd,HIGH);
    
     
     void setup() {
       
       
       // красивая "загрузка" программы при старте :)
        lcd.begin(16, 2);
        lcd.print("Loading");
        delay(500);                // ждем 0.5 секунды
        lcd.print(".");
        delay(500);                // ждем 0.5 секунды
        lcd.print(".");
        delay(1000);               // ждем 1 секунду
        lcd.clear();               //очистка экрана
      
     
        Serial.begin(9600); // инициализируем передачу данных по COM-порту 
                               // на скорости 9600 бод
        Serial.println("Start "); //   
    
        // Задаем режим работы портов  
        pinMode(selectEthernet, OUTPUT);
        pinMode(selectSd, OUTPUT);
        // высокий уровень на обоих - не выбран ведомый на SPI
        digitalWrite(selectEthernet, HIGH);
        digitalWrite(selectSd, HIGH);
    
        // инициализация SD
        if (!SD.begin(selectSd)) Serial.println("initialization SD failed!");
        
    
         
     }
     
     void loop() {
    
            
         
        // проверяем буфер com-порта - было ли что-то принято
        if (Serial.available() > 0)     //если есть доступные данные считываем строку
        {  
                
            while (Serial.available() > 0) 
            {
              int inChar = Serial.read();  // считываем символ
              myString += (char)inChar;    // формируем строку
            }  
              
     
            // устанавливаем флаг что нужно обработать принятые данные
            receiveFlag = true; 
         
            // Serial.flush(); // очистим буфер
           
        }
    
    
    
    
        // если флаг receiveFlag установлен - значит что-то приняли. Обработаем: 
        if (receiveFlag == true)
        {
          
          // выводим принятую переменную на экран
          lcd.clear();              //очистка экрана
          
          lcd.setCursor(13, 0);     // устанавливаем курсор в 12-ом столбце, 1 строке
          lcd.print(Count);         // выводим кол-во итераций
    
          lcd.setCursor(0, 1);      // устанавливаем курсор в 0-ом столбце, 2 строке
          lcd.print(myString);      // выводим myString на экран
    
          // эхо в com-порт
          Serial.print("String: "); // 
          Serial.println(myString); // эхо myString в com-порт
    	 
    
          // записываем в файл
    
            // выберем ведомого SPI = включим SD        
            SWITCH_TO_SD;
            
            // Откроем файл на запись
            myFile = SD.open(FileName, FILE_WRITE);
    
            // если файл открылся - запишем в него данные
            if (myFile) 
            {
                myFile.println(myString);
        	    // закроем файл
                myFile.close();
            } else {
                // если файл не открылся - рапортуем об ошибке
                Serial.println("error opening file");
            }
            
            // отключим SD (отключим все)
            ALL_OFF; 
    
    
          // подотрем за собой :)
          receiveFlag = false;      // сбрасываем флаг
          myString = "";            // очистка строки
          
          Count++;         // инкремент счетчика 
          
          
        }
    	 
    	 
         delay(1000);     // задержка перед повторением 
    
    
     }


    Com-порт, переданные строки:
    Com-порт и эхо переданных строк


    Тестовый файл на SD карте - те же самые строки:
    Тестовый файл на SD карте с этими же строками


    Тестовый стенд на макетке:
    Тестовый стенд на макетке - arduino + w5100 shield + LCD1602Тестовый стенд на макетке - arduino + w5100 shield + LCD1602


    Обратите внимание на первую строку - цифра 8 - это количество принятых строк.

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

    Другие новости по теме:

  • Arduino com-port echo
  • Arduino + аналоговый температурный датчик LM35
  • Баловство с кнопками на Arduino
  • Ethernet погодная станция
  • Настройка DNS (BIND)


  • Комментарии:

    Оставить комментарий



     
    Информация
     
    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


    Поиск по сайту:


    Аккаунт
    Войти
    (Забыли?)
    Облако тегов
    1602, Android, Arduino, backup, CentOS, cmd, css, div, DLE, DLE хаки, Ethernet, LCD, Linux, log, Monster, ogf3, RDP, Template, VBS, w2k8, windows, WSH, бумага, бумажный самолетик, бэкап, верстка, иструкция, Карты, кино, Навигация, оригами, программа, рецензия, рецепт, скрипт, фигуры, шаблон, Яндекс, яндекс-карты

    Показать все теги
    Реклама
    раскрутка сайта бесплатно






    Главная страница | Регистрация | Добавить новость | Новое на сайте | Статистика | Поддержка | Правила ресурса Copyright © 2005-2013 by dimon - all right reserved!
    Тираж:       Счетчик тИЦ и PR     экземпляров.   Дизайн, верстка by dimon