Заметки электроника
Простое - надёжнее!
Меню
  • Главная
  • Погода
  • Заметки
  • Календарь
  • Фотогалерея
  • Песни
  • Чтиво
  • Программы
  • Скачать
  • Связь и ссылки
  • Чехия
  • Lavka

Живёшь в Чехии?

STM32 HAL: таймер не стартует после программирования через CUBE

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Программирование микроконтроллеров
Создано: 03 сентября 2022
Обновлено: 25 апреля 2025
Просмотров: 967
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
Итак вы запрограммировали свой TIM16 таймер, но после запуска с удивлением обнаруживаете, что прерывания не происходят?
Всего пару вещей нужно добавить ( например, в main.c):

1. Определить коллбэк

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{
   if (htim == &htim16)
   {
      HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_9);
   }
}

2. Вызвать
  //  __HAL_TIM_ENABLE_IT(&htim16, TIM_IT_UPDATE);
  HAL_TIM_Base_Start_IT(&htim16);
HAL_NVIC_SetPriority(TIM16_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM16_IRQn); __HAL_TIM_ENABLE_IT(&htim16, TIM_IT_UPDATE);

VBA - скрипт для MS Excel - ищем текст во всех файлах внутри папки

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Программирование
Создано: 03 июля 2023
Обновлено: 25 апреля 2025
Просмотров: 768
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
Attribute VB_Name = "search_in_files"

Public Sub SearchFolders()
    Dim fso As Object
    Dim fld As Object
    Dim strSearch As String
    Dim strPath As String
    Dim strFile As String
    Dim wOut As Worksheet
    Dim wbk As Workbook
    Dim wks As Worksheet
    Dim lRow As Long
    Dim rFound As Range
    Dim strFirstAddress As String

    On Error GoTo ErrHandler
    Application.ScreenUpdating = False

    'Change as desired
    strPath = "C:\Components"  'write your folder path here
    
    strSearch = InputBox("String to search:", "Search a string", "")
  
    If strSearch = "" Then
     Exit Sub
    End If

    Set wOut = Worksheets.Add
    lRow = 1
    With wOut
        .Cells(lRow, 1) = "Workbook"
        .Cells(lRow, 2) = "Worksheet"
        .Cells(lRow, 3) = "Cell"
        .Cells(lRow, 4) = "Text in Cell"
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set fld = fso.GetFolder(strPath)

        strFile = Dir(strPath & "\*.xls*")
        Do While strFile <> ""
            Set wbk = Workbooks.Open _
              (Filename:=strPath & "\" & strFile, _
              UpdateLinks:=0, _
              ReadOnly:=True, _
              AddToMRU:=False)

            For Each wks In wbk.Worksheets
                Set rFound = wks.UsedRange.Find(strSearch)
                If Not rFound Is Nothing Then
                    strFirstAddress = rFound.Address
                End If
                Do
                    If rFound Is Nothing Then
                        Exit Do
                    Else
                        lRow = lRow + 1
                        .Cells(lRow, 1) = wbk.Name
                        .Cells(lRow, 2) = wks.Name
                        .Cells(lRow, 3) = rFound.Address
                        .Cells(lRow, 4) = rFound.Value
                    End If
                    Set rFound = wks.Cells.FindNext(After:=rFound)
                Loop While strFirstAddress <> rFound.Address
            Next

            wbk.Close (False)
            strFile = Dir
        Loop
        .Columns("A:D").EntireColumn.AutoFit
    End With
    MsgBox "Done"

ExitHandler:
    Set wOut = Nothing
    Set wks = Nothing
    Set wbk = Nothing
    Set fld = Nothing
    Set fso = Nothing
    Application.ScreenUpdating = True
    Exit Sub

ErrHandler:
    MsgBox Err.Description, vbExclamation
    Resume ExitHandler
End Sub

Создаём приложения с красочным и управляемым интерфейсом в Visual Studio Code

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Программирование
Создано: 04 июля 2023
Обновлено: 25 апреля 2025
Просмотров: 1619
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
Многие привыкли считать, что для создания "оконного " приложения на C# им нужна полноценная Visual Studio, а для Visual Studio Code подходит лишь для создания консольного, давайте развеем эти мифы вместе! В этом примере мы создадим простое приложение для чтения дынных с датчика загрязнения воздуха (PM2.5).
Итак нам понадобится:
1. Установленная Visual Studio Code
2. Уcтановленные необходимые .NET SDK и Framework


Приступаем

1. Переходим в Visual Studio и устанавливаем расширения для поддержки C#: C# Dev Kit, vscode-runner, .NET Meteor
2. Создаём и открываем папку и создаём новое windows forms приложение, написав в терминале: dotnet new winforms 
3. Открываем Form1.Designer.cs и добавляем в класс Form1

private System.Windows.Forms.WebBrowser webBrowser1;

4. В методе InitializeComponent:

private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.webBrowser1 = new System.Windows.Forms.WebBrowser();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450); // первичный размер основной формы
this.Text = "Form1";
this.webBrowser1.Name = "webBrowser1"; //инициализируем обьект браузера
this.webBrowser1.ScrollBarsEnabled = false;
this.webBrowser1.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.WebBrowser1DocumentCompleted);
this.webBrowser1.AllowWebBrowserDrop = false;
this.webBrowser1.IsWebBrowserContextMenuEnabled = false;
this.webBrowser1.WebBrowserShortcutsEnabled = false;
this.webBrowser1.ObjectForScripting = this;
string curDir = Directory.GetCurrentDirectory();
this.webBrowser1.Url = new System.Uri(String.Format("file:///{0}/interface/title.html", curDir)); //адрес странички нашего интерфейса
this.ResizeEnd += new EventHandler(Form1_ResizeEnd); //при изменении размера изменяем и размер контрола "браузера"
this.Controls.Add(this.webBrowser1);
this.ResumeLayout(false);
this.PerformLayout();

}

5. Добавляем методы - обработчики событий (Events):
 

 

private void WebBrowser1DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
           this.webBrowser1.Size = new Size(this.Size.Width, this.Size.Height);
        }
private void Form1_ResizeEnd(object sender, System.EventArgs e)
        {
           this.webBrowser1.Size = new Size(this.Size.Width, this.Size.Height);
        }

Полный код модуля:

namespace AIR_MASTER_CONTROL;

partial class Form1
{
    private System.ComponentModel.IContainer components = null;
    private System.Windows.Forms.WebBrowser webBrowser1;

    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

    private void WebBrowser1DocumentCompleted(object sender,
           WebBrowserDocumentCompletedEventArgs e)
    {
        this.webBrowser1.Size = new Size(this.Size.Width, this.Size.Height);
    }
    private void Form1_ResizeEnd(object sender, System.EventArgs e)
    {
        Control control = (Control)sender;
        this.webBrowser1.Size = new Size(this.Size.Width, this.Size.Height);
    }
    private void InitializeComponent()
    {
        this.components = new System.ComponentModel.Container();
        this.webBrowser1 = new System.Windows.Forms.WebBrowser();
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(800, 450);
        this.Text = "Form1";
        this.webBrowser1.Name = "webBrowser1";
        this.webBrowser1.ScrollBarsEnabled = false;
        this.webBrowser1.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.WebBrowser1DocumentCompleted);
        this.webBrowser1.AllowWebBrowserDrop = false;
        this.webBrowser1.IsWebBrowserContextMenuEnabled = false;
        this.webBrowser1.WebBrowserShortcutsEnabled = false;
        this.webBrowser1.ObjectForScripting = this;
        this.ResizeEnd += new EventHandler(Form1_ResizeEnd);
        string curDir = Directory.GetCurrentDirectory();
        this.webBrowser1.Url = new System.Uri(String.Format("file:///{0}/interface/index.html", curDir));
        this.Controls.Add(this.webBrowser1);
        this.ResumeLayout(false);
        this.PerformLayout();
    }
}

6. В папке со скомпилированным бинарником создаём папку interface, а внутри неё файл index.html
7. Мы можем вызывать функции JavaScript (находящиеся в файле /interface/index.html) из нашей C# программы, например, следующим образом:
        SetValuesToHTML(webBrowser1.Document, ref ValuesOfSource); // передаём ссылку на массив чисел типа float 
         public Int16 SetValuesToHTML(System.Windows.Forms.HtmlDocument document, ref float[] ValuesOfSource)
        {
            Object[] objArray = new Object[3];
            for (int i = 0; i < 3; i++)
                objArray[i] = (Object)(ValuesOfSource[i]);
            document.InvokeScript("SetValuesToHTML", objArray); // функция, принимающая массив чисел типа (в JavaScript)
            return 0;
        }
На стороне JavaScript принимающий метод:

function SetValuesToHTML(current, voltage, temperature){
        document.all['Current'].value = current;
	document.all['Voltage'].value = voltage;
	document.all['Temperature'].value = temperature;
	}

8. Мы можем вызывать функции(методы)  С# из JavaScript  следующим образом:

window.external.SendSettingsCOM(document.all['number'].value);
На стороне C# вызываемый метод - внутри класса Form1:
public void SendSettingsCOM (int ExtraParam){ // transfer settings to COM-port
            
 byte[] data = { 0x40, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00};
 
 if (ExtraParam < 0)
     data[1] = 0x00;
 else 
     if(ExtraParam != 0 )
     data[1] = 0x01;
 
  data[2] = (byte)((ExtraParam < 0) ? -ExtraParam : ExtraParam);
  
  if(MyPort != null)
      MyPort.Write(data, 0, data.Length);
  }

Турбины Фибоначчи

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Моделирование
Создано: 09 мая 2024
Обновлено: 25 апреля 2025
Просмотров: 804
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна

Maker Faire Brno

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Чехия
Создано: 06 апреля 2025
Обновлено: 06 апреля 2025
Просмотров: 467
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
https://makerfaire.cz/brno/
  1. Meshtastic: WisMesh Basic Device Setup Guide, MQTT Gateway Setup Guide
  2. Meshtastic: the MQTT conection
  3. Micropython : get started with XAIO
  4. Seeed Arduino Boards

Страница 7 из 193

  • 2
  • 3
  • 4
  • ...
  • 6
  • 7
  • 8
  • 9
  • ...
  • 11

Back to Top

© 2025 Заметки электроника

Top.Mail.Ru